Pinned Tweet
$SHUTTLE is live on @ponsdotfamily
Build Backends. Fast. Your infrastructure comes from your code: one annotation on main, and a database is just another argument. No YAML, no consoles.
CA: 0x64eb587083a775732f774b930037d7d7aeb36111
Prefer your own database? Pass local_uri to the resource. It can even pull values from Secrets.toml: postgres://postgres:{secrets.PASSWORD}@localhost:16695/postgres
shuttle run builds and runs your app the way the platform does, then starts a local provisioner that simulates resources with Docker. Using a database? It starts a local Docker container for it.
Shuttle Heroes recognises developers who made exceptional contributions.
What it asks: help others on Discord and GitHub, spread the word, create tutorials, posts and videos, and keep contributing to push Shuttle forward.
Shuttle is open source under Apache-2.0: 6.9K stars, 302 forks and 1,558 commits of Rust.
github.com/shuttle-hq/shuttl…
Inside the shuttle repo.
cargo-shuttle is the CLI, runtime runs your service, codegen generates the proc macros, ifc parses Infrastructure from Code, builder holds the Docker build recipes, and mcp is the Shuttle MCP server.
Everything your app writes to stdout and stderr, plus the build logs:
shuttle logs
shuttle logs --latest
shuttle logs --raw
shuttle deployment list
Add tracing to Cargo.toml and info!() just works, no subscriber setup needed.
Live reload for your backend:
shuttle run --bacon
Save a file and bacon runs shuttle run again for you.
Need more power? Scale vertically from the code itself:
#[shuttle_runtime::main(instance_size = "m")]
Sizes run from xs (0.25 vCPU, 0.5 GB) up to xxl (8 vCPU, 16 GB).
Custom build steps, still experimental: three optional scripts at the project root.
shuttle_prebuild.sh runs before cargo build
shuttle_postbuild.sh runs after it
shuttle_setup_container.sh prepares the runtime image
A nightly toolchain is two lines.
Need different behaviour on Shuttle? Add a cargo feature named shuttle. Shuttle turns it on and disables default features, unless you add default to the shuttle array.
One Shuttle service per workspace: the first binary using #[shuttle_runtime::main] is the one Shuttle runs locally and deploys. Shuttle.toml and Secrets.toml go in the workspace root.










