cargo-shuttle
brings shuttle, the open source serverless platform for Rust web applications, into your terminal. With a dedicated focus on productivity, reliability, and performance, cargo-shuttle
makes deploying your code to the cloud as easy as deriving a trait.
cargo-shuttle
is available for macOS, Linux, and Windows. To install the commandline tool, run:
bash
cargo install cargo-shuttle
Packaging status
cargo-shuttle
can be installed from the community repository using pacman:
sh
pacman -S cargo-shuttle
cargo-shuttle
's subcommands help you build and deploy web apps from start to finish.
Run cargo shuttle help
to see the basic usage:
```text
Usage: cargo-shuttle [OPTIONS]
Commands: init Create a new shuttle project run Run a shuttle service locally deploy Deploy a shuttle service deployment Manage deployments of a shuttle service status View the status of a shuttle service stop Stop this shuttle service logs View the logs of a deployment in this shuttle service project List or manage projects on shuttle resource Manage resources of a shuttle project secrets Manage secrets for this shuttle service clean Remove cargo build artifacts in the shuttle environment login Login to the shuttle platform logout Log out of the shuttle platform generate Generate shell completions feedback Open an issue on GitHub and provide feedback help Print this message or the help of the given subcommand(s)
Options:
--working-directory
init
To initialize a shuttle project with boilerplates, run cargo shuttle init [OPTIONS] [PATH]
.
Currently, cargo shuttle init
supports the following frameworks:
--template actix-web
: for actix web framework--template axum
: for axum framework--template poem
: for poem framework--template poise
: for poise discord bot framework--template rocket
: for rocket framework--template salvo
: for salvo framework--template serenity
: for serenity discord bot framework--template thruster
: for thruster framework--template tide
: for tide framework--template tower
: for tower library--template warp
: for warp frameworkFor example, running the following command will initialize a project for rocket:
sh
cargo shuttle init --template rocket my-rocket-app
This should generate the following dependency in Cargo.toml
:
toml
rocket = "0.5.0-rc.2"
shuttle-rocket = { version = "0.20.0" }
shuttle-runtime = { version = "0.20.0" }
tokio = { version = "1.26.0" }
The following boilerplate code should be generated into src/lib.rs
:
```rust
extern crate rocket;
fn index() -> &'static str { "Hello, world!" }
async fn rocket() -> shuttle_rocket::ShuttleRocket { let rocket = rocket::build().mount("/", routes![index]);
Ok(rocket.into())
} ```
run
To run the shuttle project locally, use the following command:
```sh
cargo shuttle run ```
This will compile your shuttle project and start it on the default port 8000
. Test it by:
sh
$ curl http://localhost:8000
Hello, world!
login
Use cargo shuttle login
inside your shuttle project to generate an API key for the shuttle platform:
```sh
cargo shuttle login ```
This should automatically open a browser window with an auto-generated API key for your project. Simply copy-paste the API key back in your terminal or run the following command to complete login:
sh
cargo shuttle login --api-key <your-api-key-from-browser>
deploy
To deploy your shuttle project to the cloud, run:
sh
cargo shuttle project start
cargo shuttle deploy
Your service will immediately be available at {crate_name}.shuttleapp.rs
. For instance:
sh
$ curl https://my-rocket-app.shuttleapp.rs
Hello, world!
status
Check the status of your deployed shuttle project with:
sh
cargo shuttle status
logs
Check the logs of your deployed shuttle project with:
sh
cargo shuttle logs
stop
Once you are done with a deployment, you can stop it by running:
sh
cargo shuttle stop
Thanks for using cargo-shuttle
! Weβre very happy to have you with us!
During our alpha period, API keys are completely free and you can deploy as many services as you want.
Just keep in mind that there may be some kinks that require us to take all deployments down once in a while. In certain circumstances we may also have to delete all the data associated with those deployments.
To contribute to cargo-shuttle
or stay updated with our development, please open an issue, discussion or PR on Github and join our Discord! π