Releases

v0.44.0

23 Apr 2024

Shuttle: v0.44.0 update

Improvements to cargo shuttle logs

Until this point, it has only been possible to fetch all the logs for a deployment. Following this release, after upgrading your cargo-shuttle CLI, you will be able to:

  • Fetch the last n log lines with cargo shuttle logs --tail <n>.
  • Fetch the first n log lines with cargo shuttle logs --head <n>.
  • Fetch all the logs lines with cargo shuttle logs --all. Note that this is capped at 4 MiB of log lines.

Thanks to @biplab5464 for contributing this new functionality!

Breaking changes

Bug fixes

  • The shuttle_service::Environment enum is now correctly re-exported from shuttle_runtime.

Other updates

  • We made improvements to the errors returned from the control plane, that should make it easier to resolve some common failures.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.43.0...v0.44.0

v0.43.0

2 Apr 2024

Shuttle: v0.43.0 update

This is mainly a bugfix release, and no upgrade is required. We are working on several upcoming features behind the scenes, so stay tuned!

Updates

  • cargo-shuttle now has a global --debug flag that enables debug logging.
  • Made cargo-shuttle fail fast when encountering an API error, instead of retrying up to 3 times.
  • Fixed a small downtime in the logger service that happened when new versions of Shuttle were deploying.
  • Fixed a bug where having a non-std Result type in scope would make the shuttle_runtime::main macro fail.
  • (released in shuttle-turso 0.42.1) Fixed the connection behaviour when connecting to a remote URL on local runs.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.42.0...v0.43.0

v0.42.0

18 Mar 2024

Shuttle: v0.42.0 update

We're excited to release Shuttle v0.42.0! 🚀

Secrets and Metadata plugins moved to shuttle-runtime

The shuttle-secrets and shuttle-metadata crates have been deprecated. You can now access these resources like this:

use shuttle_runtime::SecretStore;
use shuttle_runtime::DeploymentMetadata;

#[shuttle_runtime::main]
async fn main(
    #[shuttle_runtime::Secrets] secrets: SecretStore,
    #[shuttle_runtime::Metadata] metadata: DeploymentMetadata,
) -> ... { ... }

Other updates

  • Secrets.toml files can now be placed either in the crate root or in the workspace root if your project is in a workspace.
  • Resolved the most common errors in the project delete command. It should now be more reliable.
  • Improved the error message if fetching too many log line in one call.
  • (hotfixed in 0.41.0) Fixed a bug where RDS resources would error on redeployments.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.41.0...v0.42.0

v0.41.0

7 Mar 2024

Shuttle: v0.41.0 update

We're excited to release Shuttle v0.41.0! 🚀

Idle wakeups improved

The proxy will now properly wait until a service exposes its HTTP port when a project is waking up from idle. This should resolve the common 502 errors that services get on the first request to an idled project. No upgrade is needed.

Let us know if you experience any other issues with idling projects!

Easy access to more project templates

cargo shuttle init now allows you to browse the full list of official tempaltes on shuttle-examples.

Other updates

  • shuttle-next is now discontinued
  • cargo-shuttle now has an --offline flag to skip non-essential network requests, like versions checks and template list fetching

Contributions

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.40.0...v0.41.0

0.40.0

4 Mar 2024

Shuttle: v0.40.0 update

We're excited to release Shuttle v0.40.0! 🚀

[BREAKING] Resource/plugin API updated

We have updated the interface for how a service requests resources, to make it easier to configure our resources, and allowing custom plugins to do more things.

After upgrading (restarting) your project to 0.40.0, your next deployment will need

  • shuttle-runtime 0.40.0+
  • cargo-shuttle 0.40.0+
  • An up-to-date Secrets.toml (previous secrets will be invalidated)

Local runs will also need matching versions of CLI and runtime.

If you have a custom plugin, it will need to be refactored to the new ResourceInputBuilder trait, an updated API for plugins. Check out the implementations of our plugins or an example.

CHANGED: The Metadata struct in shuttle-metadata no longer has a service_name field. Use project_name instead.

Other updates

  • Reduced the dependency weight of shuttle-runtime 🥳. The axum hello-world example went from 291 to 222 dependencies.
  • Added a --secrets arg to the run and deploy commands that allows you to use a different secrets file than the default
  • Added load phase caching, which should improve the speed and reliability of starting the service after wakeups from idle and project restarts
  • AWS RDS resources can now configure their database name in the macro: #[shuttle_aws_rds::Postgres(database_name = "thing")]. The project name is now used as the default name.
  • Newly generated database passwords will now have length 32 instead of 12
  • Fixed a bug where the --working-directory/--wd arg would create directories that didn’t exist
  • The init command will now suggest using a directory with the same name as the project, instead of the current directory
  • Bumped deployer’s trunk version to 0.18.8
  • Projects no longer restart when adding a custom domain
  • Fixed the URL formatting of services with a custom domain
  • (hotfixed during 0.39.0) Fixed an issue where project ownership was not checked in some backends

Deprecating shuttle-next

We are deprecating the current iteration of our WASM framework shuttle-next in this release to keep our priorities focused. Next release, we will drop support for shuttle-next.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.39.0...v0.40.0

0.39.0

14 Feb 2024

Shuttle: v0.39.0 update

We're excited to release Shuttle v0.39.0! 🚀

Multiple domains + performance improvements

Projects that have custom domains (and have upgraded their deployer to 0.39.0) can now also be reached at their usual *.shuttleapp.rs domain. It is now also possible to add multiple custom domains to a project.

This change also comes with reduced CPU usage per request, so feel free to upgrade even if you are not using custom domains!

OpenDAL plugin

Thanks to @Xuanwo’s contribution, we now have shuttle-opendal. OpenDAL allows you to easily connect to many storage services with credentials that you provide as secrets, for example:

use opendal::Operator;

#[shuttle_runtime::main]
async fn main(
    #[shuttle_opendal::Opendal(scheme = "s3")] storage: Operator,
) -> ... { ... }

Templates

Some templates in our examples repo have been added or updated:

Other updates

  • Rust 1.76 is now available by restarting your project.
  • Deployment logs older than 1 month will regularly be getting cleaned up from now on.
  • Removed our tracking of resources that we don’t need to track, such as static folder, turso, and custom.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.38.0...v0.39.0

v0.38.0

1 Feb 2024

Shuttle: v0.38.0 update

We're excited to release Shuttle v0.38.0! 🚀

AWS RDS pricing

Our AWS RDS instances will from now be a paid add-on instead of a Pro feature. Emails with more information and instructions will be sent out to everyone who uses RDS.

All users can now sign up for AWS RDS in the billing section in the Console.

shuttle-turso now uses the libsql crate

The new and improved replacement for libsql-client is now used, which introduces some breaking changes. The resource output is now a libsql::Connection. Check out the updated docs for more. Thanks @Mouwrice for the contribution!

Other updates

  • The Shuttle crates’ minimum support Rust version (MSRV) is now officially set to 1.75. Future bumps to the MSRV will be announced in release notes. Enjoy those async traits!
  • Fixed a bug where cloning a template with a workspace incorrectly set the project name in the workspace manifest.

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.37.0...v0.38.0

v0.37.0

24 Jan 2024

Shuttle: v0.37.0 update

We're excited to release Shuttle v0.37.0! 🚀

Multiple output types in resource macros

🚨 BREAKING 🚨: To keep using an sqlx Pool in the main macro, add the feature flag sqlx to your shuttle-shared-db or shuttle-aws-rds dependency. To use sqlx with native TLS instead, use the feature flag sqlx-native-tls.

The traits in shuttle-service have been refactored, allowing you to have several possible output types in the Shuttle main macro’s resource annotations. For example:

// Use the connection string
#[shuttle_runtime::main]
async fn main(#[shuttle_shared_db::Postgres] conn_str: String) -> ... { ... }

// 🚨 Add the "sqlx" feature flag to get a PgPool like before
#[shuttle_runtime::main]
async fn main(#[shuttle_shared_db::Postgres] pool: sqlx::PgPool) -> ... { ... }

Shuttle + Qdrant

Thanks to @paulotten, we now have a shuttle-qdrant plugin that simplifies the client connection to a Qdrant Cloud vector database during deployment (that you set up yourself), and automates a local Qdrant Docker container during local runs. Check out this example!

The local provisioner can now start a wider variety of Docker containers during local runs, so making similar plugins is now easier.

Other breaking changes

  • shuttle-serenity now uses 0.12 by default. Using 0.11 is still possible with a feature flag. More info in the crate docs.
  • shuttle-poise has been deprecated, but can still be used for poise 0.5. To use poise 0.6, use shuttle-serenity and return a serenity client built with the poise framework. Example
  • shuttle-poem now uses poem 2.0.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.36.0...v0.37.0

v0.36.0

9 Jan 2024

Shuttle: v0.36.0 update

We're excited to release Shuttle v0.36.0! 🚀

Windows installer script

We’ve had a cargo-shuttle installer script for Linux and macOS for some time now, but a Windows script has been missing. Thanks to a great contribution from @supleed2 we now have all the major operating systems covered. Refer to our getting started docs for how to use these scripts.

Axum 0.7

shuttle-axum will now use axum 0.7 by default. Using axum 0.6 is still possible by enabling a feature flag:

# If switching to axum 0.7 and hyper 1.0:
axum = "0.7.3"
shuttle-axum = "0.36.0"
shuttle-runtime = "0.36.0"

# If staying on axum 0.6:
axum = "0.6.20"
shuttle-axum = { version = "0.36.0", default-features = false, features = ["axum-0-6"] }
shuttle-runtime = "0.36.0"

Other updates

  • Rust 1.75.0 is now used in the deployers. Restart your project to upgrade.
  • The version of Salvo used in shuttle-salvo has been updated to 0.63.
  • cargo shuttle init now has a --no-git argument to not initialize a git repository.
  • The Shuttle Pro subscription total will now be visible in the console.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.35.1...v0.36.0

v0.35.2

21 Dec 2023

v0.35.2 - Release Notes

We're excited to release Shuttle v0.35.2! 🚀

Shuttle: v0.35.2 update

Security fixes

Guarded an auth service endpoint to block any attempt for unauthorized projects to create or delete provisioned resources for other projects.

v0.35.1

13 Dec 2023

v0.35.1 - Release Notes

We're excited to release Shuttle v0.35.1! 🚀

Shuttle: v0.35.1 update

Platform stability improvements

We keep up with the platform stability improvement track and this time our focus was on Shuttle auth service, besides other small improvements. We made a significant change to our database by using PostgreSQL now, which opens up the stage for adding redundancy.

Other updates

  • fixed our CI in terms of the cargo-audit advisories
  • simplified a part of the gateway’s project state-machine dependencies, in terms of generics usage

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.35.0...v0.35.1

v0.35.0

7 Dec 2023

We're excited to release Shuttle v0.35.0! 🚀

Shuttle: v0.35.0 update

Platform stability improvements

In the past week, we identified a bottleneck in our system linked to the way we were retrieving Docker stats for project containers. This bottleneck had a noticeable impact on the capacity of the Shuttle platform, causing intermittent service degradation, leading to e.g. slow and failing project commands. We’re pleased to announce that this bottleneck has been resolved in this release.

Breaking changes

  • The cargo shuttle generate command has been refactored to accommodate the new manpage command. This command now takes a subcommand for generating either shell completions or a manpage. In addition, it no longer reads the SHELL or OUTPUT environment variable for shell completions.
    • cargo shuttle generate manpage
    • cargo shuttle generate shell <SHELL>

Bug fixes

  • Fixed a bug where cancelling a Pro tier subscription immediately downgraded the user to the Community tier, rather than waiting until the end of the period.

Other updates

  • Added a flag to skip confirmation when deleting projects or resources: cargo shuttle project delete -y/--yes.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.34.1...v0.35.0

v0.34.1

29 Nov 2023

Shuttle: v0.34.1 update

Bugfix release

Serenity 0.12 and Axum 0.7

We have added opt-in support for these breaking changes with feature flags. In a future release when their usage share is larger, we will swap the default features to point to the newer versions, and keep support for the older version with a feature flag.

Serenity 0.12 is now supported by using these feature flags (native TLS also available):

serenity = { version = "0.12.0", features = ["..."] }
shuttle-serenity = { version = "0.34.1", default-features = false, features = ["serenity-0-12-rustls_backend"] }

Axum 0.7 is now supported by using these feature flags:

axum = "0.7.0"
shuttle-axum = { version = "0.34.1", default-features = false, features = ["axum-0-7"] }

Added

  • cargo shuttle logs now has a --raw flag that hides the timestamps and log origins from log lines.

Changed

  • cargo shuttle project delete will now restart the project, stop deployments, and delete resources for you if needed, reducing manual work needed by the user.
  • cch23 projects will always have the idle timer set to 5 minutes.

Bugfixes

  • Fixed a bug where normal log usage would be rate limited.
  • Fixed a bug where parsing a rate limit response in the deployment log stream caused an error.
  • Fixed a bug where deploying new secrets did not properly update them.
  • Fixed a bug where the runtime version check timeout on local runs was not high enough. Thanks @fatfingers23 for the contribution!

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.34.0...v0.34.1

v0.34.0

23 Nov 2023

Shuttle: v0.34.0 update

We're excited to release Shuttle v0.34.0! 🚀

Shuttle’s Christmas Code Hunt 🎄

This is the last major release ahead of the Christmas Code Hunt (CCH) - 16 Rust challenges to deploy on Shuttle during December. The CCH platform on the Shuttle Console will open on Monday 27 Nov with a warmup challenge, so get ready! More info and signup: https://www.shuttle.rs/cch

Dropping our crates.io mirror

Since the sparse protocol got rolled out, the need for our mirror of crates.io decreased. Due to some recent instability and its overall weight, we are dropping it in this release, meaning your deployment will download crates directly from crates.io.

Breaking changes

  • We will start enforcing our AWS RDS limits from this release. Users on the Community Tier will no longer be able to provision RDS instances. As per our pricing page, users will need to upgrade to the Pro Tier to keep using their existing AWS RDS instances. A deadline for when Community Tier users have to migrate will be announced next week, along with a migration guide.
  • Some projects are still running on deployers as old as 0.12.0. In order to clear up capacity on our platform for the CCH event, we might stop some old and inactive projects. We plan to introduce a “minimum supported deployer version” later on to ensure projects stay up to date and don’t break.

Bug fixes

  • (Hotfixed in deployer 0.33.0) Secrets are no longer cleared from resource-recorder when a project restarts or wakes up from idle.
  • Fixed the cargo shuttle clean command not parsing the API response correctly.
  • Fixed shuttle-turso compilation.

Other updates

  • Rust 1.74: Restart your project to utilize the latest Rust release in deployments. MSRV for cargo-shuttle and our libraries remains at 1.70.
  • Reduced the dependency tree with better scoping of features in our crates. This improves compile times a fair bit:
    • Building our Axum Hello World starter now compiles 266 crates (down from 366)!
    • Installing cargo-shuttle from source now compiles 416 crates (down from 605)!
  • cargo shuttle init now has a --force-name flag to disable checking if the project name is valid and available.
  • Added support in shuttle-serenity for seamlessly upgrading to serenity 0.12 once it is released (currently 0.12.0-rc). Also added feature support for using native tls.
  • Our logger service that records logs from projects now has rate limiting. This should not affect normal logging amounts.
  • Improved handling of delete project requests. More improvements are to follow.
  • Improved handling of runtime version check on local run.
  • Improved error handling and error messages in several areas.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

Commits

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.33.0...v0.34.0

v0.33.0

16 Nov 2023

Shuttle: v0.33.0 update

We're excited to release Shuttle v0.33.0! 🚀

Bug fixes

  • Fixed a bug where project restarts could lead to duplicated resource records being displayed in cargo shuttle resource list.

Other updates

  • Shortened aliases for commonly used commands are now visible in the cargo shuttle --help output.
  • Removed the cargo shuttle secrets command, the keys of Secrets for your project can now only be viewed with cargo shuttle resource list, or in the Shuttle web console.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.32.0...v0.33.0

v0.32.0

9 Nov 2023

Shuttle: v0.32.0 update

We're excited to release Shuttle v0.32.0! 🚀

Stricter Project Name Validation

One year ago we started enforcing stricter project names for any new project, but we allowed older projects with now invalid names to still be usable without interruption. In this release we will start enforcing the new restrictions for existing projects as well.

If you encounter any issues with old projects that had invalid names, please reach out to us on support@shuttle.rs, or open a help thread in our Discord.

Shuttle for Alpine Linux

Shuttle has been packaged for Alpine Linux 🥳 See https://github.com/shuttle-hq/shuttle/blob/main/cargo-shuttle/README.md#alpine-linux for installation instructions.

Other updates

  • The deployer environment’s Rust version is now 1.73.0.
  • cargo_metadata::Metadata’s project name field is now type String.
  • The password of local_uri connection strings will now be obfuscated in the terminal output.
  • Checking for the Shuttle runtime's version now errors if the check fails, for instance if the binary is not using shuttle-runtime or if the cargo config targets the wrong binary.

Bug fixes

  • Fixed a bug where resource list --show-secrets was displaying the incorrect hostname for databases

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

Commits in this release

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.31.0...v0.32.0

v0.31.0

2 Nov 2023

Shuttle: v0.31.0 update

We're excited to release Shuttle v0.31.0! 🚀

Project Limits

With this release, we still start enforcing our project limits to reflect the limits from our pricing page. You will no longer be able to create more projects than your tier allows. If you are above the limit but want to create more projects, you need to either delete projects with cargo shuttle project delete or upgrade to the Pro tier. If you are on the Pro tier and want more projects than the Pro tier limit, you can get in touch with us on hello@shuttle.rs or on our Discord.

If you experience problems when deleting very old projects, feel free to open a help thread on our Discord, or reach out at support@shuttle.rs.

Hidden Resource Credentials

The credentials of resources like shuttle_shared_db or shuttle_aws_rds will now be obfuscated by default in the CLI. If you need to see these credentials to access your database, you can add the --show-secrets flag to the resource command: cargo shuttle resource list --show-secrets.

Bug fixes

  • Fixed a bug where the cargo shuttle deploy command would appear to hang when it was downloading crates.
  • Fixed a bug where renewed custom domain certificates were not persisted across gateway restarts.
  • Fixed a bug where resource provisioning errors were not displayed.
  • Fixed a bug in our turso integration where using the latest version of libsql-client would not compile. We reverted to the previous version, see: https://github.com/shuttle-hq/shuttle/pull/1355.
  • Fixed a bug where secrets that were removed with cargo shuttle resource delete secrets (and removed from Secrets.toml), would be restored on subsequent deploys.

Contributions

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

What's Changed

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.30.1...v0.31.0

v0.30.1

24 Oct 2023

Shuttle: v0.30.1 update

We're excited to release shuttle v0.30.1! 🚀

Bug fixes

  • fixed failing commands when running certain commands against deployments (e.g. cargo shuttle deployment list)

Considerations

If you experienced any problems with v0.30.0, please upgrade your Shuttle dependencies to v0.30.1 and run cargo shuttle project restart.

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

Commits for this release

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.30.0...v0.30.1

v0.30.0

24 Oct 2023

Shuttle: v0.30.0 update

We're excited to release shuttle v0.30.0! 🚀

Project deletion

You can now delete projects with cargo shuttle project delete 🥳!

Bear in mind that you will be asked to manually delete any linked secrets and/or databases before deleting a project. Other resources, such as shuttle-persist, are deleted along with your project.

⚠️ We are aware that some old projects are in a bad state where restarting them can not get them to a valid state, and can therefore not be deleted with the command. If you have projects that you are unable to delete, please reach out to us on support@shuttle.rs or open a help thread on Discord.

Other updates

  • Improved error message when pre-deployment tests fail
  • Fixed a bug in the installer script where reading Y/N input failed
  • shuttle-next: Updated the version of wasmtime to 13.0

Contributions

  • Unpin and bump version of libsql-client in shuttle-turso @sentinel1909
  • The commands that print tables (project list, deployment list, resource list, and secrets) can now use --raw to not use bordered and dynamically sized tables @supleed2
  • Alignment in the project list table fixed @supleed2

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

Commits in this release

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.29.1...v0.30.0

v0.29.1

12 Oct 2023

Shuttle: v0.29.1 update

We're excited to release shuttle v0.29.1! 🚀

Bug Fixes

  • fixed a bug where local runs with a database would fail on the first run

Note: only cargo-shuttle needs to be updated for this release.

What's Changed

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.29.0...v0.29.1

v0.29.0

9 Oct 2023

Shuttle: v0.29.0 update

We're excited to release shuttle v0.29.0! 🚀

Deleting resources

Databases linked to a project can now be deleted via the cargo shuttle resource delete <type> command. You can check the syntax of <type> with cargo shuttle resource list.

After deleting a database, remember to remove the annotation from your main function, so that it does not get provisioned again.

With this feature released, we will soon enable you to delete projects! Deleting other resources, such as Secrets, Persist and Static Folder, will be added soon.

Bug fixes

  • Fixed --reset-api-key when logging out of the CLI
  • Fixed scenario where the CLI init command would crash if not logged in

Other updates

  • Added backend support for billing 👀

Upgrading

Refer to the upgrading docs

Commits in this release

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.28.1...v0.29.0

cargo-shuttle v0.28.1

5 Oct 2023

Bug fixes

  • fixed a bug where cargo-shuttle would panic on cargo shuttle login

Commits for this release

Note: only the cargo-shuttle version was increased in this release, no other crates need to be upgraded.

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.28.0...v0.28.1

v0.28.0

3 Oct 2023

Shuttle: v0.28.0 update

We're excited to release shuttle v0.28.0! 🚀

New project container image

When restarting your project, your project container will now run a Debian 12 image (previously Debian 10). We don’t expect this upgrade to cause problems for users, but let us know if you experience any deployment issues after this bump, and we will do our best to fix it quickly.

Installer script

Linux and Mac users can now install and update cargo-shuttle using this handy script. We also aim to make this compatible for Windows users in the future.

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

Removed cargo-generate dependency 💎

We now use a homegrown method for cloning templates with the cargo shuttle init command. This means cargo-shuttle is now more oxidized (free from openssl dependencies), and will compile a bit faster. Thanks @d4ckard for the contribution, and congrats on claiming the $100 bounty on this issue! 🥳

More version warnings and project name checks

A common source of errors is mismatching versions between the CLI, the Shuttle runtime, and the Shuttle deployer. We added more warnings to cargo-shuttle when it detects any mismatching versions. You can read more about Shuttle versions in the docs.

Furthermore, when running the init command interactively, the chosen project name will be checked against the API, and re-prompt you if it is already taken. Using the --name argument does not perform this check.

Please let us know about difficulties you encounter when using Shuttle. We are always trying to smooth out rough edges that users commonly face.

Other updates

  • Better handling of project state drift.
  • Project are compressed slightly more before deploying, so that you can squeeze in a couple more bytes in large projects.
  • Updated handling of config files after cloning a template.
  • The spinner when stopping or starting a project updates with a larger interval to not spam the API.
  • [Experimental] Deployer image now has the linkers lld at /usr/bin/ld.lld and mold at /usr/bin/mold.

Contributions

  • Local run will ask you about using a different port if the chosen port is already occupied. Thanks @BadgerBloke!
  • Removed cargo-generate dependency. @d4ckard
  • Fix the Shuttle stack starting locally on Mac M1. @AlexCzar

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

Commits in this release

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.27.0...v0.28.0

v0.27.0

21 Sept 2023

Shuttle: v0.27.0 update

We're excited to release shuttle v0.27.0! 🚀

shuttle-static-folder deprecated

It is now much easier to include and serve files in your deployment. The main change is that binaries are now executed with the working directory set to your project’s workspace root, the same way that cargo runs it locally. This means that all relative paths in your code will work correctly, and that shuttle-static-folder is no longer needed. Check out how the Axum static folder example is simplified:

// Before 0.27.0
#[shuttle_runtime::main]
async fn axum(
    #[shuttle_static_folder::StaticFolder(folder = "assets")] static_folder: PathBuf,
) -> shuttle_axum::ShuttleAxum {
    let router = Router::new()
        .nest_service("/assets", ServeDir::new(static_folder));
    // ...
}

// After 0.27.0
// shuttle-static-folder can be removed from Cargo.toml
#[shuttle_runtime::main]
async fn axum() -> shuttle_axum::ShuttleAxum {
    let router = Router::new()
        .nest_service("/assets", ServeDir::new(PathBuf::from("assets")));
    // ...
}

Including files in deployments

When you deploy, all source files that are not ignored by .gitignore or .ignore are uploaded to Shuttle. If you have ignored files that you want to upload as well, you would previously have had to add a !-rule to .ignore. This approach had a few caveats and was a bit convoluted.

Now, you can tell Shuttle which files to include in Shuttle.toml in the project/workspace root:

### Shuttle.toml
# Declare ignored files that should be included in deployment:
assets = [
  "file.txt", # include file.txt
  "frontend/dist/*", # include all files and subdirs in frontend/dist/
  "static/*", # include all files and subdirs in static/
]

Deploying build artifacts & build environment variables

The changes above make it easier to add arbitrary binaries/libraries/files that your app needs during compile or run time. They also allow for easier customization of the build process. By including the file .cargo/config.toml in your deploy, you can set cargo or rustc options to use during compile time. For example, using the env field lets you set env vars during compile time.

shuttle-persist now persists data between project restarts

This refactor also makes it easier for adding other file-based persistent storage, such as SQLite. Let us know on Discord if you are interested in this type of feature.

More metadata in shuttle-metadata

The new struct returned now contains the fields env, project_name, service_name, storage_path.

Other updates

  • The image used for local runs with the shuttle-shared-db resource now uses PostgreSQL version 14, this matches the version used in deployment.
  • More cargo shuttle commands now give better suggestions for what to do if a command fails.
  • With this release, we are testing out a new builder service behind the scenes. We will try to build every deployment with the new builder in parallel with the normal deployment to see how well it builds projects. This builder will eventually allow more build customization, and faster builds.

Contributions

  • @beyarkay added a helpful error message when Docker is not running during a local run that needs it.
  • @lecoqjacob updated the postgres version for local runs with shuttle-shared-db.
  • @DitherWither added CI for clippy and fmt to shuttle-examples.

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

Commits for this release

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.26.0...v0.27.0

v0.26.0

18 Sept 2023

Shuttle: v0.26.0 update

We're excited to release shuttle v0.26.0! 🚀

New Logger Service

⚠️ Upgrading your deployer to 0.26.0 (with cargo shuttle project restart) will make all logs from prior deployments inaccessible! See the details below for how to save your old logs if you need them. ⚠️

This release features a big refactor of how we handle logs. The result? Fancier and more detailed logs from our side, and much more freedom in how you handle your logging.

  • Everything that your app prints to stdout now shows up in the logs. This means that you can do some logging quickly with just println!().
  • The default tracing subscriber that we initialize behind the scenes is now a default feature of shuttle-runtime, and can be disabled by disabling default features.
  • The filter in the default subscriber is RUST_LOG="info,shuttle=trace". You can override these levels on a local run by setting the RUST_LOG variable. The other alternative, which is required for modifying the log levels in a Shuttle deployment, is by dropping the default tracing layer and implementing your own, with a specific level filter of your choosing.
  • shuttle-next projects have a default tracing subscriber too, but this can not be opted out for the moment.
  • Disabling the default subscriber allows you to set up your own tracing subscriber, for example:
// In your Cargo.toml
shuttle-runtime = { version = "0.26.0", default-features = false }
tracing = "0.1.37"
tracing-subscriber = "0.3.17"

// In your Shuttle main function.
tracing_subscriber::fmt()
    .with_env_filter(
        EnvFilter::builder()
            .with_default_directive(LevelFilter::INFO.into())
            .from_env_lossy(),
    )
    .init();
tracing::info!("tracing is initialized");

Other updates

Contributions

Considerations

  • If you do a cargo shuttle project restart or a cargo shuttle project stop followed by a start, you will not be able to access logs from before the restart. If you want to retain your old logs, you can do a cargo shuttle logs before restarting and then persist the output to a local file.
  • If you upgrade the cargo-shuttle CLI you will have to upgrade your deployer by doing a cargo shuttle project restart, since it will expect to receive the updated output from cargo shuttle logs. If you upgraded the CLI but you’re not ready to restart your project, you can downgrade the CLI again.
  • If you restart your project with a cargo shuttle project restart your project container will be upgraded. You will then have to upgrade your cargo-shuttle CLI, since it will receive logs in a new format from the updated project container.

Upgrading

Refer to the upgrading docs for how to upgrade your projects.

Commits for this release

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.25.1...v0.26.0

cargo-shuttle v0.25.1

28 Aug 2023

cargo-shuttle: v0.25.1 update

Bug fixes

  • Fixed a bug where cargo-shuttle failed to install on Windows, due to a missing feature flag.

All commits

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.25.0...v0.25.1

v0.25.0

28 Aug 2023

Shuttle: v0.25.0 update

We're excited to release shuttle v0.25.0! 🚀

  • Bumped our Rust version to 1.72.0. MSRV for compiling cargo-shuttle is still 1.70.0.
  • New resource: shuttle-metadata can be used to fetch your current service name at runtime. In the future, we aim to extend this resource with more information about your service, like the public URL. Thanks @sd2k for the initiative!
  • Developing Shuttle locally is now easier! We moved the relevant instructions to DEVELOPING.md, and improved the Docker build caching, resulting in up to 5x faster make images.
  • shuttle-aws-rds now has feature flags for using rustls. (Enables corresponding feature in sqlx)
  • cargo shuttle project start now warns you if the idle minutes flag is not 0.

Contributions

New Contributors

Upgrading

To upgrade your shuttle CLI, run: cargo install cargo-shuttle, or if you’re using cargo-binstall, cargo binstall cargo-shuttle.

It is also recommended to upgrade your project’s shuttle-* dependencies in Cargo.toml:

shuttle-runtime = "0.25.0"
# etc

If you’d like to upgrade your project container, run the restart project command. This will not delete any databases, and you will keep your project name:

cargo shuttle project restart

Finally, redeploy your shuttle service:

cargo shuttle deploy

All commits

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.24.0...v0.25.0

v0.24.0

16 Aug 2023

Shuttle: v0.24.0 update

We're excited to release shuttle v0.24.0! 🚀

Bug fixes

Contributions

Considerations

  • The bug fix shipped for shuttle-secrets takes effect after upgrading your project dependency on shuttle-runtime to 0.24.0.
  • The bug fix for shuttle-static-folder takes effect if you upgrade yourshuttle-static-folder dependency to 0.24.0.

Upgrading

To upgrade your shuttle CLI, run: cargo install cargo-shuttle, or if you’re using [cargo-binstall](https://github.com/cargo-bins/cargo-binstall), cargo binstall cargo-shuttle.

If you’d like to upgrade your project container, run the restart project command. This will not delete any databases, and you will keep your project name:

cargo shuttle project restart

Finally, redeploy your shuttle service:

cargo shuttle deploy

v0.23.0

7 Aug 2023

Shuttle: v0.23.0 update

We're excited to release shuttle v0.23.0! 🚀

Bug fixes

  • Fixed a bug where the shuttle-next runtime binary was not being installed in the project container image, leading to failing deploys of shuttle-next projects.
  • Fixed a bug where MongoDB shared database data was not persisted between project restarts.

Contributions

Upgrading

To upgrade your shuttle CLI, run: cargo install cargo-shuttle, or if you’re using [cargo-binstall](https://github.com/cargo-bins/cargo-binstall), cargo binstall cargo-shuttle.

If you’d like to upgrade your project container, run the restart project command. This will not delete any databases, and you will keep your project name:

cargo shuttle project restart

Finally, redeploy your shuttle service:

cargo shuttle deploy

Commits for this release

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.22.0...v0.23.0

v0.22.0

2 Aug 2023

shuttle: v0.22.0 update

We're excited to release shuttle v0.22.0! 🚀

Updated sqlx version in Shuttle databases

We have upgraded the version of sqlx in shuttle_shared_db and shuttle_aws_rds to 0.7.1. This means if you upgrade your version of these resources, you will have to also upgrade the version of sqlx in your application.

Improved the shuttle deploy GitHub action

The https://github.com/shuttle-hq/deploy-action has been greatly improved, with the installation step reduced from minutes to ~4 seconds in https://github.com/shuttle-hq/deploy-action/pull/11, and with some new input options being added that can also reduce deploy times.

Bug fixes

  • Fixed a bug where the deployer was not receiving logs from the runtime.
  • Shuttle service functions (the function annotated with [shuttle_runtime::main]) can now be named main.
  • Fixed a bug where windows was not always shutting down runtimes correctly for local runs that were interrupted by e.g. CTRL + C (thanks @Shubham8287!).

Contributions

Upgrading

To upgrade your shuttle CLI, run: cargo install cargo-shuttle, or if you’re using cargo-binstall, cargo binstall cargo-shuttle.

If you’d like to upgrade your project container, run the restart project command. This will not delete any databases, and you will keep your project name:

cargo shuttle project restart

Finally, redeploy your shuttle service:

cargo shuttle deploy

Commits for this release

New Contributors

Full Changelog: https://github.com/shuttle-hq/shuttle/compare/v0.21.0...v0.22.0