
Rust Backend
- 895 installs
- 17.4k repo stars
- Updated August 5, 2026
- windmill-labs/windmill
rust-backend is a Windmill-specific Rust coding skill that enforces backend error handling, sqlx patterns, and windmill_common conventions for developers who modify code in backend/.
About
rust-backend is a Claude Code skill from windmill-labs/windmill that applies Windmill's internal Rust patterns when writing or changing backend code. The skill mandates windmill_common::error::{Error, Result} and JsonResult<T> instead of panics, and shows sqlx::query_as! patterns against tables like v2_job. Developers reach for rust-backend when an agent is editing Rust under backend/ and output must match Windmill's existing services, database access, and error semantics. The skill is marked MUST use for backend Rust changes, making it a repo-local style contract rather than generic Rust advice.
- Enforces Windmill-specific error handling with windmill_common::error::Error and Result types
- Mandates explicit column selection in all SQLx queries to preserve backwards compatibility
- Recommends batch operations and transactions to eliminate N+1 query problems
- Prefers Box<serde_json::value::RawValue> for efficient JSON handling without full deserialization
- Prohibits panics in library code and restricts unwrap to compile-time guarantees
Rust Backend by the numbers
- 895 all-time installs (skills.sh)
- +51 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #448 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/windmill-labs/windmill --skill rust-backendAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 895 |
|---|---|
| repo stars | ★ 17.4k |
| Security audit | 3 / 3 scanners passed |
| Last updated | August 5, 2026 |
| Repository | windmill-labs/windmill ↗ |
How do you follow Windmill backend Rust patterns?
Produce consistent, maintainable Rust code that follows Windmill's internal patterns when working on the backend.
Who is it for?
Developers contributing Rust code to Windmill's backend/ directory who need agents to match existing error handling and database access conventions.
Skip if: Developers writing generic Rust services, CLI tools, or frontend code outside the Windmill backend/ tree.
When should I use this skill?
An agent is writing or modifying Rust files under backend/ in the Windmill repository.
What you get
Rust backend changes using windmill_common::error, Result/JsonResult returns, and sqlx query patterns consistent with Windmill's backend/.
- backend Rust patches using windmill_common error and sqlx patterns
By the numbers
- Targets Rust code exclusively in Windmill's backend/ directory
Files
Windmill Rust Patterns
Apply these Windmill-specific patterns when writing Rust code in backend/.
Error Handling
Use Error from windmill_common::error. Return Result<T, Error> or JsonResult<T>:
use windmill_common::error::{Error, Result};
pub async fn get_job(db: &DB, id: Uuid) -> Result<Job> {
sqlx::query_as!(Job, "SELECT id, workspace_id FROM v2_job WHERE id = $1", id)
.fetch_optional(db)
.await?
.ok_or_else(|| Error::NotFound("job not found".to_string()))?;
}Never panic in library code. Reserve .unwrap() for compile-time guarantees.
SQLx Patterns
*Never use `SELECT `** — always list columns explicitly. Critical for backwards compatibility when workers lag behind API version:
// Correct
sqlx::query_as!(Job, "SELECT id, workspace_id, path FROM v2_job WHERE id = $1", id)
// Wrong — breaks when columns are added
sqlx::query_as!(Job, "SELECT * FROM v2_job WHERE id = $1", id)Use batch operations to avoid N+1:
// Preferred — single query with IN clause
sqlx::query!("SELECT ... WHERE id = ANY($1)", &ids[..]).fetch_all(db).await?Use transactions for multi-step operations. Parameterize all queries.
JSON Handling
Prefer Box<serde_json::value::RawValue> over serde_json::Value when storing/passing JSON without inspection:
pub struct Job {
pub args: Option<Box<serde_json::value::RawValue>>,
}Only use serde_json::Value when you need to inspect or modify the JSON.
Serde Optimizations
#[derive(Serialize, Deserialize)]
pub struct Job {
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_job: Option<Uuid>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub tags: Vec<String>,
#[serde(default)]
pub priority: i32,
}Async & Concurrency
Never block the async runtime. Use spawn_blocking for CPU-intensive work:
let result = tokio::task::spawn_blocking(move || expensive_computation(&data)).await?;Mutex selection: Prefer std::sync::Mutex (or parking_lot::Mutex) for data protection. Only use tokio::sync::Mutex when holding locks across .await points.
Use tokio::sync::mpsc (bounded) for channels. Avoid std::thread::sleep in async contexts.
Module Structure & Visibility
- Use
pub(crate)instead ofpubwhen possible - Place new code in the appropriate crate based on functionality
- API endpoints go in
windmill-api/src/organized by domain - Shared functionality goes in
windmill-common/src/
Code Navigation
Always use rust-analyzer LSP for go-to-definition, find-references, and type info. Do not guess at module paths.
Axum Handlers
Destructure extractors directly in function signatures:
async fn process_job(
Extension(db): Extension<DB>,
Path((workspace, job_id)): Path<(String, Uuid)>,
Query(pagination): Query<Pagination>,
) -> Result<Json<Job>> { ... }Related skills
How it compares
Pick rust-backend over generic Rust style skills when editing Windmill's own backend services and sqlx data access.
FAQ
What error type does Windmill backend Rust use?
Windmill backend Rust uses Error from windmill_common::error, returning Result<T, Error> or JsonResult<T>. The rust-backend skill requires this pattern and disallows panics for routine control flow in backend/ code.
When should rust-backend be invoked?
rust-backend should be invoked whenever an agent writes or modifies Rust code in Windmill's backend/ directory. The skill frontmatter marks it as MUST use for those backend Rust edits.
Is Rust Backend safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.