Releases: shuttle-hq/shuttle
v0.42.0
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
- @nopeNoshishi Added the
--raw
flag to therun
anddeploy
commands #1653 - @aumetra added
async-diesel
support toshuttle-shared-db
#1664 - @sourabpramanik improved
shuttle-examples
CI workflow for the develop branch shuttle-hq/shuttle-examples#154
Upgrading
Refer to the upgrading docs for how to upgrade your projects.
What's Changed
- fix(cargo-shuttle): remove integration test example by @jonaro00 in #1672
- Improvement: add
--raw
flag torun
,deploy
command by @nopeNoshishi in #1653 - fix(deployer): check correct config field(s) in resource cache by @iulianbarbu in #1675
- gateway: delete project restarts them first if oudated by @iulianbarbu in #1677
- refactor: move secrets and metadata plugins to runtime by @jonaro00 in #1673
- misc(deployer): improve get_logs out_of_range error by @iulianbarbu in #1676
- Update README.md by @ivancernja in #1679
- Update README.md by @ivancernja in #1680
- Update README.md by @ivancernja in #1681
- refactor(auth, gateway): use user_id over account_name by @jonaro00 in #1674
- ci: fix unstable filter by @jonaro00 in #1683
- fix: patches script root-relative path by @jonaro00 in #1685
- feat: Add
diesel-async
support forshuttle-shared-db
by @aumetra in #1664 - feat: fall back to finding Secrets.toml in workspace root by @jonaro00 in #1682
- chore: v0.42.0 by @jonaro00 in #1686
New Contributors
- @nopeNoshishi made their first contribution in #1653
- @aumetra made their first contribution in #1664
Full Changelog: v0.41.0...v0.42.0
v0.41.0
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 templates on shuttle-examples.
Other updates
shuttle-next
is now discontinuedcargo-shuttle
now has an--offline
flag to skip non-essential network requests, like versions checks and template list fetching
Contributions
What's Changed
- feat(install): change powershell installation script by @Pulko in #1636
- fix(common): add missing schema, v0.40.1 by @jonaro00 in #1661
- fix(common): public fields, v0.40.2 by @jonaro00 in #1662
- misc: remove shuttle-next by @jonaro00 in #1652
- ci: remove buildx cache, bump versions by @jonaro00 in #1650
- fix(gateway): proxy wait for service port to open by @jonaro00 in #1668
- feat: migration for user_id by @chesedo in #1663
- chore: update test-context dependency by @JasterV in #1665
- fix(auth): user query columns by @jonaro00 in #1669
- feat(cargo-shuttle): new template system for init by @jonaro00 in #1667
- chore: v0.41.0 by @jonaro00 in #1670
New Contributors
Full Changelog: v0.40.0...v0.41.0
0.40.0
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 therun
anddeploy
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
- @Pulko improved the installer scripts #1610 #1636
- @Xuanwo added an example for
shuttle-opendal
shuttle-hq/shuttle-examples#142
Upgrading
Refer to the upgrading docs for how to upgrade your projects.
What's Changed
- fix(gateway): custom domain followup improvements by @jonaro00 in #1627
- misc(provisioner): check project ownership in APIs by @iulianbarbu in #1630
- feat: enable Datadog APM error tracking with a tracing layer by @oddgrd in #1626
- feat(installer): always check for cargo install first by @Pulko in #1610
- chore: remove builder by @oddgrd in #1637
- misc: use cargo-chef 0.1.64 --bin flags by @jonaro00 in #1638
- feat(runtime, deployer)!: extract load phase + provisioning to deployer, resource update by @jonaro00 in #1628
- feat(deployer): load phase caching, automatic startup by @jonaro00 in #1640
- fix: various fixes by @jonaro00 in #1641
- fix: remove builder from compose by @jonaro00 in #1643
- fix(resource-recorder)!: disable service id endpoint by @jonaro00 in #1644
- feat(cargo-shuttle):
--secrets
arg to use non-default secrets file by @jonaro00 in #1642 - fix(resource-recorder, provisioner): fix integration tests by @jonaro00 in #1645
- chore: v0.40.0 by @jonaro00 in #1646
- fix(cargo-shuttle): windows build by @jonaro00 in #1648
- misc: make passwords longer by @chesedo in #1649
- feat(common): add template definition schema by @jonaro00 in #1655
- feat(cargo-shuttle): add project name to the default directory, ask again if path is rejected by @christos-h in #1654
- fix: cargo audit by @jonaro00 in #1657
- feat: RDS custom database name by @chesedo in #1651
- ci: use newer linux images by @jonaro00 in #1659
Full Changelog: v0.39.0...v0.40.0
0.39.0
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:
- Actix Web + Clerk + React added by @sourabpramanik. A good starting point for a fullstack app with user authentication. He also wrote a two-part blog post showing usage of the template: https://www.shuttle.rs/blog/2024/02/13/clerk-in-rust
- Loco Hello World added by @kaplanelad
- Fullstack SaaS was updated with improved development tooling by @ccmvn
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
- @sourabpramanik added an example for using Clerk authentication with Actix web shuttle-hq/shuttle-examples#133
- @hamirmahal fixed some code formatting shuttle-hq/www#257
- @ccmvn upgraded dependencies and dev tooling for our SaaS template shuttle-hq/shuttle-examples#137
- @kaplanelad added a hello-world Loco template to our examples and init command shuttle-hq/shuttle-examples#139 #1620
- @biplab5464 refactored some error messages #1615
- @Xuanwo added shuttle-opendal #1617
Upgrading
Refer to the upgrading docs for how to upgrade your projects.
What's Changed
- fix(shuttle-qdrant): v0.38.0 by @jonaro00 in #1606
- fix: don't try to deserialize non-200 res to service summary by @oddgrd in #1607
- wip: use cargo-make for tasks and ci by @jonaro00 in #1595
- feat: disable trace_layer on_failure, only emit error event for 500s by @oddgrd in #1608
- refactor: uniform client wrappers by @chesedo in #1614
- ci: move more tasks to cargo make by @jonaro00 in #1613
- [Improvement]: Refactor ApiError and ErrorKind to use thiserror #1601 by @biplab5464 in #1615
- fix: alias database field names updated in 0.37.0 by @jonaro00 in #1618
- fix: remove obsolete resources by @jonaro00 in #1543
- feat(deployer, gateway): remove deployer proxy by @jonaro00 in #1612
- feat(logger): clean old logs on startup by @jonaro00 in #1619
- chore: bump git2 to resolve vulnerability by @oddgrd in #1621
- add loco to shuttle cli by @kaplanelad in #1620
- chore: Rust 1.76 by @jonaro00 in #1622
- feat(gateway): allow multiple hostnames, proxy caching by @jonaro00 in #1616
- feat: Add OpenDAL resource support by @Xuanwo in #1617
- chore: v0.39.0 by @jonaro00 in #1623
- fix: submodule by @jonaro00 in #1625
New Contributors
- @biplab5464 made their first contribution in #1615
- @kaplanelad made their first contribution in #1620
- @Xuanwo made their first contribution in #1617
Full Changelog: v0.38.0...v0.39.0
v0.38.0
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
- fix: remove common_tests dep from common by @jonaro00 in #1537
- fix(gateway): rename scope field to shuttle.project.name by @oddgrd in #1538
- fix: qdrant docker image name by @jonaro00 in #1539
- chore: remove shuttle-poise by @jonaro00 in #1541
- fix(otel): increase trace_buffer for dd exporter by @Kazy in #1587
- nit: small nitpicks by @jonaro00 in #1544
- chore: remove panamax and deck-chores by @jonaro00 in #1540
- feat(shuttle-turso)!: replace
libsql-client
crate with the new and improvedlibsql
crate by @Mouwrice in #1531 - chore: remove utopia openAPI docs by @jonaro00 in #1588
- docs(shuttle-libsql): update docs for turso libsql change by @Mouwrice in #1591
- feat: write a wrapper for the provisioner to call gw and r-r clients by @chesedo in #1585
- gateway: add operation_name field for task polling by @iulianbarbu in #1590
- docs: Update README by @jonaro00 in #1594
- misc: remove session by @chesedo in #1596
- feat: limit concurrent active cch23 projects by @jonaro00 in #1589
- fix(cargo-shuttle): set name in Shuttle.toml when cloning a workspace by @jonaro00 in #1599
- chore: disable unused builder service until it is needed by @jonaro00 in #1542
- feat: have
auth
handle new subscriptions by @chesedo in #1597 - chore: v0.38.0 by @jonaro00 in #1598
New Contributors
Full Changelog: v0.37.0...v0.38.0
v0.37.0
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, useshuttle-serenity
and return a serenity client built with the poise framework. Exampleshuttle-poem
now uses poem 2.0.
Contributions
- @paulotten added
shuttle-qdrant
#1025 shuttle-hq/shuttle-examples#64 - @paulotten upgrade
shuttle-poem
, as well as our poem examples, to poem 2.0 #1520 shuttle-hq/shuttle-examples#126 - @supleed2 set serenity 0.12 as the default for
shuttle-serenity
#1521 - @ErrolKeith added icons to the sidebar in our docs shuttle-hq/shuttle-docs#248
- @Krensi fixed a disparity between our docs and examples shuttle-hq/shuttle-docs#247
- @beyarkay improved a version hint in cargo-shuttle #1533
Upgrading
Refer to the upgrading docs for how to upgrade your projects.
What's Changed
- ci: split release flow by @jonaro00 in #1518
- tests(auth): simplify auth service tests with wiremock by @oddgrd in #1514
- refactor(gateway): renew gateway certificate returns more info about success by @iulianbarbu in #1492
- feat: support poem v2.0.0 by @paulotten in #1520
- fix(gateway): uppercase old ulids by @jonaro00 in #1424
- Traces: set shuttle.project.name in more places by @Kazy in #1526
- fix(proxy): record http.host after parsing to avoid Some(..) in the attr by @Kazy in #1527
- Traces add shuttle version by @Kazy in #1528
- chore: upgrade h2 to resolve cargo audit by @oddgrd in #1530
- feat: base api and gateway client by @chesedo in #1525
- ci: use default ubuntu machine image by @jonaro00 in #1524
- feat(resources)!: get db connection string from resources, refactor ResourceBuilder by @jonaro00 in #1522
- feat(auth): add subscriptions table to auth, add rds quota to claim limits by @oddgrd in #1529
- chore: update wiremock to resolve cargo audit by @oddgrd in #1534
- feat: Qdrant resource by @paulotten in #1025
- Improve shuttle-runtime out-of-date hint by @beyarkay in #1533
- feat(shuttle-serenity): make serenity 0.12 default, support poise 0.6, deprecate shuttle-poise by @supleed2 in #1521
- chore: v0.37.0 by @jonaro00 in #1535
Full Changelog: v0.36.0...v0.37.0
v0.36.0
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 to0.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
- @supleed2 created an installation script for Windows in #1503. He also made the necessary changes to our docs in shuttle-hq/shuttle-docs#241, and added a redirect to the script in our website repo in shuttle-hq/www#220
- @fatfingers23 made the selection of the Docker stats path in the
gateway
dynamic in #1476, fixing local development of Shuttle on most Linux and Mac systems. - @dalton-oliveira updated the version of Salvo in
shuttle-salvo
in #1486 and shuttle-hq/shuttle-examples#121 - @atcol fixed an incorrect link on our website in shuttle-hq/www#218
- @halvko updated the documented version of Rust in our docs in shuttle-hq/shuttle-docs#244
- @Akashin fixed a typo in our docs in shuttle-hq/shuttle-docs#242
Upgrading
Refer to the upgrading docs for how to upgrade your projects.
What's Changed
- chore: upgrade proto-gen to 0.2.0 by @jonaro00 in #1482
- fix(gateway): dynamically pick docker stats source by @fatfingers23 in #1476
- feat(auth): add subscription items endpoint by @oddgrd in #1478
- chore: bump salvo by @dalton-oliveira in #1486
- fix(provisioner): only delete new rds on failed subscription update by @oddgrd in #1488
- chore: bump zerocopy by @oddgrd in #1489
- auth: guard the
/auth/key
endpoint by @iulianbarbu in #1487 - bug: missing gateway key when trying to get jwt by @chesedo in #1499
- fix: tracing fixes and nits by @oddgrd in #1500
- Update README.md by @joshua-mo-143 in #1505
- chore: Rust 1.75 by @jonaro00 in #1506
- feat(service): emit trace with shuttle dependencies by @jonaro00 in #1498
- feat:
--no-git
tocargo shuttle init
by @dhruvdabhi101 in #1501 - feat(installer): add windows installer script by @supleed2 in #1503
- fix: return empty list when querying for project deployments by @GugaGongadze in #1495
- feat: track project deployments by @GugaGongadze in #1508
- chore(shuttle-axum): use axum 0.7 by default by @jonaro00 in #1507
- revert: initial implementation of rds billing by @oddgrd in #1510
- chore: v0.36.0 by @oddgrd in #1511
New Contributors
- @dalton-oliveira made their first contribution in #1486
- @dhruvdabhi101 made their first contribution in #1501
Full Changelog: v0.35.1...v0.36.0
v0.35.2
v0.35.1
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
- @fatfingers23 added a more descriptive error message for the case of using a project name that is not owned by the user of the command or the project doesn’t exist: #1452
Upgrading
Refer to the upgrading docs for how to upgrade your projects.
What's Changed
- fix(gateway): more descriptive project not found error by @fatfingers23 in #1452
- refactor: remove generics by @chesedo in #1460
- fix: cargo audit failures by @oddgrd in #1475
- tests(resource-recorder): allow server time to start by @oddgrd in #1477
- auth: store state in postgres instance by @iulianbarbu in #1420
- chore: v0.35.1 by @iulianbarbu in #1480
Full Changelog: v0.35.0...v0.35.1
v0.35.0
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 theSHELL
orOUTPUT
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
- @fatfingers23 fixed a bug in our CI testing in #1453
- @selectiveduplicate added the ability to create a manpage to the
cargo-shuttle
CLI in #1388 - @supleed2 fixed a bug in the table output of the
project list
command in #1466 - @AvaterClasher tidied up the service crates’ documentation in #1425
Upgrading
Refer to the upgrading docs for how to upgrade your projects.
What's Changed
- add: service docs readme by @AvaterClasher in #1425
- feat: protect ourselves from going over the 1k limit by @chesedo in #1444
- refactor: improve build queue messages and increase queueing time by @chesedo in #1447
- test: add an extra property claim test for pro users by @chesedo in #1448
- feat: protect pro tier projects and our services by @chesedo in #1445
- feat(gateway): allow manual blocking of cch project traffic at high load by @jonaro00 in #1446
- fix(gateway): don't attempt to retry error infinitely by @Kazy in #1450
- feat(gateway): add cch projects idle admin endpoint by @oddgrd in #1454
- feat: propagate ambulance traces by @chesedo in #1456
- feat: don't overload docker with requests by @chesedo in #1457
- Add back retry logic on project error by @Kazy in #1455
- refactor: reduce backoff by @chesedo in #1458
- refactor: only ambulance ready projects by @chesedo in #1459
- refactor: allow stats to change in the future by @chesedo in #1463
- Setup datadog by @Kazy in #1462
- ci: fix tests with axum and serenity feature flags by @fatfingers23 in #1453
- fix(optl): correctly set deployment.environment resource by @Kazy in #1467
- feat(cargo-shuttle): add --no-confirmation flag to project deletion by @Kazy in #1468
- feat(cargo-shuttle): generate manpage by @selectiveduplicate in #1388
- feat: downgrade user to basic tier only after period end by @GugaGongadze in #1427
- feat(cargo-shuttle): change no_confirmation flag to -y/--yes, add it to resource delete by @jonaro00 in #1470
- refactor: get stats from cgroup file directly by @oddgrd in #1464
- fix(cargo-shuttle): remove newline from errored project state output by @supleed2 in #1466
- chore: v0.35.0 by @oddgrd in #1471
- ci: fix deploy-images conditional by @oddgrd in #1473
New Contributors
- @AvaterClasher made their first contribution in #1425
- @selectiveduplicate made their first contribution in #1388
Full Changelog: v0.34.1...v0.35.0