36 breaking releases

0.48.0 Oct 1, 2024
0.47.0 Jul 23, 2024
0.46.0 Jun 13, 2024
0.42.0 Mar 18, 2024
0.13.0 Mar 27, 2023

#207 in Web programming

Download history 2510/week @ 2024-07-12 3294/week @ 2024-07-19 4496/week @ 2024-07-26 2504/week @ 2024-08-02 2250/week @ 2024-08-09 2079/week @ 2024-08-16 1955/week @ 2024-08-23 2065/week @ 2024-08-30 2170/week @ 2024-09-06 2083/week @ 2024-09-13 2196/week @ 2024-09-20 2701/week @ 2024-09-27 1620/week @ 2024-10-04 1597/week @ 2024-10-11 2396/week @ 2024-10-18 3623/week @ 2024-10-25

9,773 downloads per month
Used in 25 crates

Apache-2.0

335KB
7.5K SLoC

Shuttle - Deploy Rust apps with a single Cargo subcommand

Shuttle is a Rust-native cloud development platform that lets you deploy your Rust apps for free.

📖 Check out our documentation to get started quickly: docs.shuttle.rs

🙋‍♂️ If you have any questions, join our Discord server.

Usage

Start by installing the cargo shuttle subcommand by running the following in a terminal:

cargo install cargo-shuttle

Now that Shuttle is installed, you can initialize a project with Axum boilerplate:

cargo shuttle init --template axum my-axum-app

By looking at the Cargo.toml file of the generated my-axum-app project you will see it has been made to be a binary crate with a few dependencies including shuttle-runtime and shuttle-axum.

axum = "0.7.3"
shuttle-axum = "0.48.0"
shuttle-runtime = "0.48.0"
tokio = "1.28.2"

A boilerplate code for your axum project can also be found in src/main.rs:

use axum::{routing::get, Router};

async fn hello_world() -> &'static str {
    "Hello, world!"
}

#[shuttle_runtime::main]
async fn main() -> shuttle_axum::ShuttleAxum {
    let router = Router::new().route("/", get(hello_world));

    Ok(router.into())
}

Check out our docs to see all the frameworks we support, or our examples if you prefer that format.

Running locally

To test your app locally before deploying, use:

cargo shuttle run

You should see your app build and start on the default port 8000. You can test this using;

curl http://localhost:8000/
# Hello, world!

Deploying

Before you can deploy, you have to create a project. This will start a deployer container for your project under the hood, ensuring isolation from other users' projects. PS. you don't have to do this now if you did in in the cargo shuttle init flow.

cargo shuttle project start

Then, deploy the service with:

cargo shuttle deploy

Your service will immediately be available at https://{project_name}.shuttleapp.rs/. For example:

curl https://my-axum-app.shuttleapp.rs/
# Hello, world!

Dependencies

~17–30MB
~470K SLoC