# Fastest Way to Build & Ship Rust Apps


Get resources and deploy your apps with a few lines of code.

![](https://camo.githubusercontent.com/6d78d1b34dd9bde4bf7c5895a62092046a39df3df6423bea50bd1b577cb2ff23/68747470733a2f2f692e696d6775722e636f6d2f317164576970502e676966 align="left")

*⭐ If you find Shuttle interesting, consider starring this repo to help spread the word.*

# Features

* **One-line Resource Provisioning:** Get a database, or any other AWS resource by adding a line of code to your main file. To delete one, just remove that line of code. No config/yaml files required.
    
* **Rapid Development:** It takes 2 minutes from project initialization to a deployed project. It takes another 2 minutes to provision a resource, and get it deployed to production.
    
* **First-class support for popular Rust frameworks:** [Axum](https://docs.shuttle.rs/examples/axum), [Actix Web](https://docs.shuttle.rs/examples/actix), [Rocket](https://docs.shuttle.rs/examples/rocket), and [more](https://docs.shuttle.rs/examples/other)
    
* **Security:** Let us worry about the security & permissions while you focus on writing good code.
    

# Quick Start

On Linux and macOS, you can use this install script, which will automatically install the correct target for your OS and distro:

```basic
curl -sSfL https://www.shuttle.rs/install | bash
```

On Windows, you can use this install script to do the same:

```basic
iwr "https://www.shuttle.rs/install-win" | iex
```

After installing, log in with:

```basic
cargo shuttle login
```

To initialize your project, simply write:

```basic
cargo shuttle init --template axum hello-world
```

And to deploy it, write:

```basic
cd hello-world
cargo shuttle project start  # Only needed if project has not already been created during init
cargo shuttle deploy --allow-dirty
```

And... that's it!

```basic
Service Name:  hello-world
Deployment ID: 3d08ac34-ad63-41c1-836b-99afdc90af9f
Status:        running
Last Updated:  2022-04-01T08:32:34Z
URI:           https://hello-world.shuttleapp.rs
```

Feel free to build on top of the generated `hello-world` boilerplate or take a stab at one of our [examples](https://github.com/shuttle-hq/shuttle-examples).

For the full documentation, visit [our docs](https://docs.shuttle.rs/).  

# Quick Look

Below is a basic "Hello World" application written in Axum:

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

#[tokio::main]
async fn main() {
    let app = Router::new().route("/", get(hello_world));

    let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
        .await
        .unwrap();
    println!("listening on {}", listener.local_addr().unwrap());
    axum::serve(listener, app).await.unwrap();
}

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

In order to be able to deploy it with a single command, we update the snippet as follows:

```basic
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())
}
```

Now, with just `cargo shuttle deploy`, you can see your application live. But let's enhance it further by adding a shared Postgres database:

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

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

#[shuttle_runtime::main]
async fn main(
    #[shuttle_shared_db::Postgres] pool: sqlx::PgPool,
) -> shuttle_axum::ShuttleAxum {

    pool.execute(include_str!("../schema.sql"))
        .await
        .expect("failed to run migrations");

    let router = Router::new().route("/", get(hello_world));

    Ok(router.into())
}
```

Now, if we run `cargo shuttle deploy`, we'll have an up and running project with a database inside & ready to use.  

# Repositories

| Name | Description |
| --- | --- |
| [shuttle](https://github.com/shuttle-hq/shuttle) 🚀 (This repo) | The core Shuttle product. Contains all crates that users interact with. |
| [shuttle-examples](https://github.com/shuttle-hq/shuttle-examples) 👨‍🏫 | Officially maintained examples of projects that can be deployed on Shuttle. Also has a list of [community examples](https://github.com/shuttle-hq/shuttle-examples#community-examples). |
| [shuttle-docs](https://github.com/shuttle-hq/shuttle-docs) 📃 | Documentation hosted on [docs.shuttle.rs](https://docs.shuttle.rs/). |
| [www](https://github.com/shuttle-hq/www) 🌍 | Our website [shuttle.rs](https://www.shuttle.rs/), including the [blog](https://www.shuttle.rs/blog/tags/all) and [Launchpad newsletter](https://www.shuttle.rs/launchpad). |
| [deploy-action](https://github.com/shuttle-hq/deploy-action) ⚙ | GitHub Action for continuous deployments. |
| [awesome-shuttle](https://github.com/shuttle-hq/awesome-shuttle) 🌟 | An awesome list of Shuttle-hosted projects and resources that users can add to. |
| [shuttlings](https://github.com/shuttle-hq/shuttlings) ⚔️ | A collection of Rust code challenges. A great way to get started with using Rust and Shuttle. |

  
  

# Contributing to Shuttle

Contributing to Shuttle is highly encouraged! Even if you are not planning to submit any code, joining our [Discord server](https://discord.gg/shuttle) and providing feedback helps us a lot!

Check out our [contributing docs](https://github.com/shuttle-hq/shuttle/blob/main/CONTRIBUTING.md) and find the appropriate repo above to contribute to. For development of this repo, check the [development docs](https://github.com/shuttle-hq/shuttle/blob/main/DEVELOPING.md).

### Algora Bounties 💰

To offload work from the engineering team on low-priority issues, we will sometimes add a cash bounty to issues. Sign up to the [Algora Console](https://console.algora.io/org/shuttle/bounties?status=open) to find open issues with bounties.

# Project Status

Check for any outages and incidents on [Shuttle Status](https://status.shuttle.rs/).

We are currently in Public Beta. Watch "releases" of this repo to get notified of major updates! Also, check out the [Beta announcement](https://www.shuttle.rs/beta#06) for features we are looking forward to.

* Alpha: We are testing Shuttle, API and deployments may be unstable
    
* Public Alpha: Anyone can sign up, but go easy on us, there are a few kinks
    
* Public Beta: Stable enough for most non-enterprise use-cases
    
* Public: Production-ready!
