As a platform designed with a focus on providing an exceptional developer experience, our goal is to make building and deploying applications a breeze. Shuttle’s capabilities make provisioning resources simple and hassle-free. Getting a database is just a matter of asking for one with a macro:
#[shuttle_runtime::main]async fn main( // Automatically provisions a Postgres database // and hands you an authenticated connection pool #[shuttle_shared_db::Postgres] pool: sqlx::PgPool,) -> ShuttleAxum { // Application code}
You can hit the ground running and swiftly transform your ideas into tangible solutions. Accelerate your project’s progress by rapidly building and deploying prototypes, ensuring you bring your vision to life in record time.
The GIF above demonstrates how easy it is to add resources to your project, visualized with the Shuttle Console.
Our mission is aligned with the wider shift of Rust becoming the future of web development, as we strive to deliver cutting-edge solutions that leverage the full potential of the most loved programming language.
This example starts an HTTP server where the GET / endpoint returns Hello, world!.
But most importantly, the code you see in the snippet above, is all it takes for shuttle deploy to deploy it.This is possible due to the #[shuttle_runtime::main] procedural macro.
The macro wraps your app with Shuttle’s runtime, which handles resource provisioning and initialization for you.
Many types of Rust programs can be deployed on Shuttle.Shuttle provides all hosted apps with proxied HTTPS web traffic.
Therefore, the most common use case is to deploy web apps and APIs.
Any app that can bind to a socket and accept incoming HTTP traffic can run on Shuttle.To make life easier we have implemented all the boilerplate required for these Rust web frameworks. Get started with just a few lines of code.
The Discord Bot building frameworks Serenity and Poise are also officially supported.If you need a custom service, you can take a look at our guide right here.
One of the great features of Shuttle is the provisioning of resources through macros.
With just a few lines of code, you can get access to various resources. Here are some examples:
use shuttle_runtime::SecretStore;#[shuttle_runtime::main]async fn main( #[shuttle_runtime::Secrets] secrets: SecretStore,) -> shuttle_axum::ShuttleAxum { // Get secret defined in `Secrets.toml` file. let secret = secrets.get("MY_API_KEY").expect("secret was not found");}
#[shuttle_runtime::main]async fn main( #[shuttle_shared_db::Postgres] pool: PgPool,) -> shuttle_axum::ShuttleAxum { // Use the connection pool to query the Postgres database pool.execute(include_str!("../schema.sql")) .await .map_err(CustomError::new)?;}
For more info on resources, head on over to our Resources section.
When you run shuttle deploy, your project code is archived and sent to our platform where it is built into a Docker image.
Your service will then be started on Shuttle’s infrastructure on AWS in London (eu-west-2).
The generated code from shuttle_runtime::main handles resource provisioning and initialization, leaving you to focus on what matters.
If you are wondering about the best way to get involved, here’s how
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Shuttle Docs","description":"The Shuttle platform documentation","colors":{"primary":"#000","light":"#f91","dark":"#f91"},"logo":{"light":"https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/logo/light.png?fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=994cd9fbe183a93a076cdf69d48f181b","dark":"https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/logo/dark.png?fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=5552086a59dfe5f7821ca8fd8f851ae0","href":"https://www.shuttle.dev/"},"favicon":"https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/favicon.png?fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=7432dd3e823109c0236063ff9d037c8f","background":{"decoration":"windows","color":{"light":"#fcf0d0","dark":"#0b0a00"}},"navbar":{"links":[{"href":"https://docs.shuttle.dev/support/support","label":"Support"}],"primary":{"type":"button","label":"Log In","href":"https://console.shuttle.dev/"}},"footer":{"socials":{"twitter":"https://twitter.com/shuttle_dev","discord":"https://discord.com/invite/shuttle","github":"https://github.com/shuttle-hq/shuttle"}},"integrations":{"posthog":{"apiKey":"phc_cQMQqF5QmcEzXEaVlrhv3yBSNRyaabXYAyiCV7xKHUH","apiHost":"https://eu.posthog.com"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/shuttle-hq/shuttle"},{"anchor":"Community","icon":"discord","href":"https://discord.gg/shuttle"},{"anchor":"Releases and Changelog","icon":"rust","href":"https://github.com/shuttle-hq/shuttle/releases"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"shuttle","hasAudioNarration":false,"actualSubdomain":"shuttle","customDomains":["docs.shuttle.dev"],"gitSource":{"type":"github","owner":"shuttle-hq","repo":"shuttle-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a884c909ed824a42f57a520","collectionId":"920743ba-918a-4f70-af19-6ab38ed26793","schemaVersion":"v2","latestBuiltDeploymentHistoryId":"6a884c909ed824a42f57a520"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a884c909ed824a42f57a520:success","clientVersion":"0.0.3918","searchFilterCounts":[{"language":"default","tag":"Documentation","count":48},{"language":"default","tag":"Examples","count":40},{"language":"default","tag":"Shuttle","count":15},{"language":"default","tag":"Templates and Tutorials","count":12},{"language":"default","tag":"Tutorials","count":9},{"language":"default","tag":"Integrations","count":8},{"language":"default","tag":"Getting Started","count":5},{"language":"default","tag":"Actix Web","count":5},{"language":"default","tag":"Axum","count":5},{"language":"default","tag":"Guides","count":5}]},"assistantConfig":{},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2-autocommit","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"teamspace","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"client-snapshot-docs-config","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"welcome/introduction","slug":"/welcome/introduction","pageMetadata":{"title":"Introduction to Shuttle","description":"Shuttle is a Rust-native cloud development platform that lets you deploy your app while also taking care of all of your infrastructure.","icon":"hand-wave","href":"/welcome/introduction"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Shuttle is a Rust-native cloud development platform that lets you deploy your app while also taking care of all of your infrastructure.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Info,OptimizedImage,Tooltip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);return _jsxs(_Fragment,{children:[_jsxs(CardGroup,{children:[_jsx(Card,{title:`Get Started`,icon:`circle-play`,color:`#3d3`,href:`/getting-started/installation`,children:_jsx(_components.p,{children:`Installation and quickstart guide`})}),_jsx(Card,{title:`Examples`,icon:`book`,href:`/examples`,color:`#f8b5F2`,children:_jsx(_components.p,{children:`Check out some Shuttle examples`})}),_jsx(Card,{title:`Templates`,icon:`sparkles`,href:`/templates`,color:`#ffdf54`,children:_jsx(_components.p,{children:`Get started from one of many templates`})}),_jsx(Card,{title:`Tutorials`,icon:`list-check`,href:`/templates/tutorials`,color:`#a26`,children:_jsx(_components.p,{children:`Follow one of our tutorials`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-shuttle`,children:`What is Shuttle?`}),`\n`,_jsxs(_components.p,{children:[`As a platform designed with a focus on providing an exceptional developer experience, our goal is to make building and deploying applications a breeze. Shuttle’s `,_jsx(_components.strong,{children:_jsx(Tooltip,{tip:`Provisioning resources directly from your code, instead of having to deal with complex consoles and yaml files`,children:`Infrastructure from Code`})}),` capabilities make provisioning resources simple and hassle-free. Getting a database is just a matter of asking for one with a macro:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`rust`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`rust`,children:_jsxs(_components.code,{language:`rust`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`#[shuttle_runtime`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`main]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` fn`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Automatically provisions a Postgres database`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // and hands you an authenticated connection pool`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` #[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`shuttle_shared_db`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`Postgres`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`pool`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` sqlx`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`PgPool`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` ShuttleAxum`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Application code`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You can hit the ground running and swiftly transform your ideas into tangible solutions. Accelerate your project’s progress by rapidly building and deploying prototypes, ensuring you bring your vision to life in record time.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/infra-from-code.gif?s=193207fb894a658c89a342c247b54f94`,alt:`infra-from-code`,\"data-og-width\":`800`,width:`800`,\"data-og-height\":`458`,height:`458`,\"data-path\":`images/infra-from-code.gif`,\"data-optimize\":`true`,\"data-opv\":`3`}),`\n`,_jsxs(Info,{children:[`The GIF above demonstrates how easy it is to add resources to your project, visualized with the `,_jsx(_components.a,{href:`https://console.shuttle.dev/`,children:`Shuttle Console`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Our mission is aligned with the wider shift of Rust becoming the future of web development, as we strive to deliver cutting-edge solutions that leverage the full potential of `,_jsx(_components.a,{href:`https://survey.stackoverflow.co/2024/technology/#admired-and-desired`,children:`the most loved programming language`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-shuttle-works`,children:`How Shuttle Works`}),`\n`,_jsx(_components.p,{children:`The simplest way to build and deploy a web app on Shuttle looks like this:`}),`\n`,_jsx(CodeBlock,{filename:`src/main.rs`,numberOfLines:`12`,language:`rust`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`rust`,children:_jsxs(_components.code,{language:`rust`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` axum`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`routing`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`get, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`Router`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` fn`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` hello_world`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`'`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`static`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Hello, world!\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`#[shuttle_runtime`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`main]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` fn`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` shuttle_axum`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`ShuttleAxum`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` router`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Router`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`new`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`route`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hello_world`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Ok`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`router`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`into`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`())`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This example starts an HTTP server where the `,_jsx(_components.code,{children:`GET /`}),` endpoint returns `,_jsx(_components.code,{children:`Hello, world!`}),`.\nBut most importantly, the code you see in the snippet above, is all it takes for `,_jsx(_components.code,{children:`shuttle deploy`}),` to deploy it.`]}),`\n`,_jsxs(_components.p,{children:[`This is possible due to the `,_jsx(_components.code,{children:`#[shuttle_runtime::main]`}),` procedural macro.\nThe macro wraps your app with Shuttle’s runtime, which handles resource provisioning and initialization for you.`]}),`\n`,_jsx(Heading,{level:`2`,id:`supported-frameworks`,children:`Supported Frameworks`}),`\n`,_jsx(_components.p,{children:`Many types of Rust programs can be deployed on Shuttle.`}),`\n`,_jsx(_components.p,{children:`Shuttle provides all hosted apps with proxied HTTPS web traffic.\nTherefore, the most common use case is to deploy web apps and APIs.\nAny app that can bind to a socket and accept incoming HTTP traffic can run on Shuttle.`}),`\n`,_jsx(_components.p,{children:`To make life easier we have implemented all the boilerplate required for these Rust web frameworks. Get started with just a few lines of code.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/examples/axum`,children:`Axum`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/examples/actix`,children:`Actix Web`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/examples/rocket`,children:`Rocket`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/examples/other`,children:`Rama`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/examples/other`,children:`Warp`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/examples/other`,children:`Tower`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/examples/other`,children:`Salvo`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/examples/other`,children:`Poem`})}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The Discord Bot building frameworks `,_jsx(_components.a,{href:`/examples/serenity`,children:`Serenity`}),` and `,_jsx(_components.a,{href:`/examples/poise`,children:`Poise`}),` are also officially supported.`]}),`\n`,_jsxs(_components.p,{children:[`If you need a custom service, you can take a look at our guide `,_jsx(_components.a,{href:`/templates/tutorials/custom-service`,children:`right here`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`resource-provisioning`,children:`Resource Provisioning`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/shuttle-macros.png?fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=81ec683dd2cd2dbc2a35d3b9db23e590`,alt:`Shuttle macros`,\"data-og-width\":`1107`,width:`1107`,\"data-og-height\":`527`,height:`527`,\"data-path\":`images/shuttle-macros.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/shuttle-macros.png?w=280\u0026fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=da3771fe374c09c8a1cd95f04d44a560 280w, https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/shuttle-macros.png?w=560\u0026fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=6aa8e677bfab8eb5f6dd2e4206d7a3a4 560w, https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/shuttle-macros.png?w=840\u0026fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=3ca85334c4209a5d104d7095dd82617f 840w, https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/shuttle-macros.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=b1d95bc627a6d95ae5eb31557249dc75 1100w, https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/shuttle-macros.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=311744b39f5293f8e43f0c8bf26590f4 1650w, https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/shuttle-macros.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=bb875c36868518fd4bf1ab39c6b9a915 2500w`}),`\n`,_jsx(_components.p,{children:`One of the great features of Shuttle is the provisioning of resources through macros.\nWith just a few lines of code, you can get access to various resources. Here are some examples:`}),`\n`,_jsx(Heading,{level:`3`,id:`secrets`,children:`Secrets`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`rust`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`rust`,children:_jsxs(_components.code,{language:`rust`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` shuttle_runtime`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`SecretStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`#[shuttle_runtime`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`main]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` fn`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` #[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`shuttle_runtime`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`Secrets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`secrets`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` SecretStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` shuttle_axum`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`ShuttleAxum`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" // Get secret defined in `Secrets.toml` file.\"})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` secret`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` secrets`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"MY_API_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`expect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"secret was not found\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`postgres-database`,children:`Postgres Database`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`rust`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`rust`,children:_jsxs(_components.code,{language:`rust`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`#[shuttle_runtime`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`main]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` fn`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` #[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`shuttle_shared_db`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`Postgres`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`pool`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` PgPool`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` shuttle_axum`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`ShuttleAxum`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Use the connection pool to query the Postgres database`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` pool`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`execute`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`include_str!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"../schema.sql\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`map_err`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`CustomError`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`new`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`?`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For more info on resources, head on over to our `,_jsx(_components.a,{href:`/resources/resources`,children:`Resources`}),` section.`]}),`\n`,_jsx(Heading,{level:`2`,id:`deployment-process`,children:`Deployment Process`}),`\n`,_jsxs(_components.p,{children:[`When you run `,_jsx(_components.code,{children:`shuttle deploy`}),`, your project code is archived and sent to our platform where it is built into a Docker image.\nYour service will then be started on Shuttle’s infrastructure on AWS in London (eu-west-2).\nThe generated code from `,_jsx(_components.code,{children:`shuttle_runtime::main`}),` handles resource provisioning and initialization, leaving you to focus on what matters.`]}),`\n`,_jsx(Heading,{level:`2`,id:`get-involved`,children:`Get Involved`}),`\n`,_jsxs(CardGroup,{children:[_jsx(Card,{title:`Give us a star on GitHub`,icon:`star`,color:`#fbdf24`,href:`https://github.com/shuttle-hq/shuttle`,children:_jsx(_components.p,{children:`Check us out at shuttle-hq/shuttle`})}),_jsx(Card,{title:`Join our Discord server`,icon:`discord`,color:`#5865F2`,href:`https://discord.com/invite/shuttle`,children:_jsx(_components.p,{children:`Click to accept invite`})}),_jsx(Card,{title:`Follow us on Twitter`,icon:`twitter`,color:`#1DA1F2`,href:`https://x.com/shuttle_dev`,children:_jsx(_components.p,{children:`Go to @shuttle_dev on Twitter`})}),_jsx(Card,{title:`Get Involved`,icon:`hand`,color:`#525`,href:`/community/get-involved`,children:_jsx(_components.p,{children:`If you are wondering about the best way to get involved, here’s how`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Introduction to Shuttle","description":"Shuttle is a Rust-native cloud development platform that lets you deploy your app while also taking care of all of your infrastructure.","icon":"hand-wave","href":"/welcome/introduction"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What is Shuttle?","slug":"what-is-shuttle","depth":2,"children":[]},{"title":"How Shuttle Works","slug":"how-shuttle-works","depth":2,"children":[]},{"title":"Supported Frameworks","slug":"supported-frameworks","depth":2,"children":[]},{"title":"Resource Provisioning","slug":"resource-provisioning","depth":2,"children":[{"title":"Secrets","slug":"secrets","depth":3,"children":[]},{"title":"Postgres Database","slug":"postgres-database","depth":3,"children":[]}]},{"title":"Deployment Process","slug":"deployment-process","depth":2,"children":[]},{"title":"Get Involved","slug":"get-involved","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"shuttle","siteName":"Shuttle Docs","title":"Introduction to Shuttle - Shuttle Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2025-10-21T16:02:53.004Z","originalFileLocation":"welcome/introduction.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Shuttle is a Rust-native cloud development platform that lets you deploy your app while also taking care of all of your infrastructure.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Shuttle Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Introduction to Shuttle - Shuttle Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Shuttle is a Rust-native cloud development platform that lets you deploy your app while also taking care of all of your infrastructure.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Shuttle Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.shuttle.dev/welcome/introduction\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://shuttle.mintlify.app/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Introduction+to+Shuttle\u0026amp;description=Shuttle+is+a+Rust-native+cloud+development+platform+that+lets+you+deploy+your+app+while+also+taking+care+of+all+of+your+infrastructure.\u0026amp;theme=0af612d510f66a8559a7420f\u0026amp;signature=06b2ab2e9f396a857108128f276f5d40dba2d53b860d729fc7baa0d4bb340e20\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Introduction to Shuttle - Shuttle Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Shuttle is a Rust-native cloud development platform that lets you deploy your app while also taking care of all of your infrastructure.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://shuttle.mintlify.app/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Introduction+to+Shuttle\u0026amp;description=Shuttle+is+a+Rust-native+cloud+development+platform+that+lets+you+deploy+your+app+while+also+taking+care+of+all+of+your+infrastructure.\u0026amp;theme=0af612d510f66a8559a7420f\u0026amp;signature=06b2ab2e9f396a857108128f276f5d40dba2d53b860d729fc7baa0d4bb340e20\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/shuttle/pxkvy0s1bdM3ua6n/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Shuttle Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.shuttle.dev/welcome/introduction\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/welcome/introduction.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.shuttle.dev/#organization\",\"name\":\"Shuttle Docs\",\"url\":\"https://docs.shuttle.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/shuttle/ISqfIZfTiW4muc41/images/logo/light.png?fit=max\u0026auto=format\u0026n=ISqfIZfTiW4muc41\u0026q=85\u0026s=994cd9fbe183a93a076cdf69d48f181b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.shuttle.dev#website\",\"name\":\"Shuttle Docs\",\"url\":\"https://docs.shuttle.dev\",\"publisher\":{\"@id\":\"https://docs.shuttle.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.shuttle.dev/welcome/introduction#webpage\",\"url\":\"https://docs.shuttle.dev/welcome/introduction\",\"name\":\"Introduction to Shuttle\",\"description\":\"Shuttle is a Rust-native cloud development platform that lets you deploy your app while also taking care of all of your infrastructure.\",\"dateModified\":\"2025-10-21T16:02:53.004Z\",\"isPartOf\":{\"@id\":\"https://docs.shuttle.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.shuttle.dev/welcome/introduction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.shuttle.dev/welcome/introduction#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Shuttle Docs\",\"item\":\"https://docs.shuttle.dev\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introduction to Shuttle\",\"item\":\"https://docs.shuttle.dev/welcome/introduction\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.shuttle.dev/welcome/introduction#article\",\"headline\":\"Introduction to Shuttle\",\"name\":\"Introduction to Shuttle\",\"description\":\"Shuttle is a Rust-native cloud development platform that lets you deploy your app while also taking care of all of your infrastructure.\",\"url\":\"https://docs.shuttle.dev/welcome/introduction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.shuttle.dev/welcome/introduction#webpage\"},\"dateModified\":\"2025-10-21T16:02:53.004Z\",\"publisher\":{\"@id\":\"https://docs.shuttle.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.shuttle.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Shuttle Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Shuttle Docs","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/shuttle-hq/shuttle"},{"anchor":"Community","icon":"discord","href":"https://discord.gg/shuttle"},{"anchor":"Releases and Changelog","icon":"rust","href":"https://github.com/shuttle-hq/shuttle/releases"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Getting Started","pages":[{"title":"Introduction to Shuttle","icon":"hand-wave","href":"/welcome/introduction"},{"title":"Installation","description":"How to install the Shuttle Command Line Interface (CLI)","icon":"download","href":"/getting-started/installation"},{"title":"Quick Start","icon":"circle-play","href":"/getting-started/quick-start"},{"title":"Migrate to Shuttle","icon":"arrow-right","href":"/migration/guide"},{"title":"Shuttle Shutdown","icon":"face-saluting","href":"/docs/shuttle-shutdown"}]},{"group":"Shuttle","pages":[{"title":"Projects","icon":"cards-blank","href":"/docs/projects"},{"title":"Project configuration","icon":"gear","href":"/docs/project-configuration"},{"title":"Local Run","icon":"screwdriver-wrench","href":"/docs/local-run"},{"title":"Deployment files","icon":"files","href":"/docs/files"},{"title":"Builds","icon":"hammer","href":"/docs/builds"},{"title":"Deployment environment","icon":"box","href":"/docs/deployment-environment"},{"title":"Logs","icon":"list","href":"/docs/logs"},{"title":"Domain names","icon":"globe","href":"/docs/domain-names"},{"group":"Telemetry","icon":"telescope","pages":[{"title":"Overview","icon":"chart-mixed","href":"/docs/telemetry/overview"},{"title":"Getting Started","icon":"rocket","href":"/docs/telemetry/getting-started"},{"title":"Better Stack Integration","icon":"layer-group","href":"/docs/telemetry/betterstack"},{"title":"Custom Metrics Guide","icon":"chart-line","href":"/docs/telemetry/custom-metrics"}]},{"title":"Account","icon":"user","href":"/docs/account"},{"title":"Teams","icon":"users","href":"/docs/teams"},{"title":"Scaling","icon":"arrows-up-down","href":"/docs/scaling"}]},{"group":"Resources","pages":[{"title":"Resources","icon":"boxes-stacked","href":"/resources/resources"},{"title":"Secrets","icon":"user-secret","href":"/resources/shuttle-secrets"},{"group":"Databases","icon":"database","pages":[{"title":"Shuttle Shared Databases","icon":"database","href":"/resources/shuttle-shared-db"},{"title":"AWS RDS","icon":"aws","href":"/resources/shuttle-aws-rds"}]}]},{"group":"Integrations","pages":[{"title":"GitHub Integration","icon":"github","href":"/integrations/github"},{"group":"Databases","icon":"database","pages":[{"title":"Turso","icon":"database","href":"/integrations/shuttle-turso"},{"title":"Qdrant","icon":"database","href":"/integrations/shuttle-qdrant"},{"title":"Apache OpenDAL","icon":"database","href":"/integrations/shuttle-opendal"}]},{"title":"OpenAI","icon":"microchip","href":"/integrations/shuttle-openai"},{"title":"Custom Resources","icon":"toolbox","href":"/integrations/custom-resources"},{"title":"GitHub Actions","icon":"code-branch","href":"/integrations/ci-cd"},{"title":"Shuttle MCP","icon":"sparkles","href":"/integrations/mcp-server"}]},{"group":"Guides","pages":[{"title":"CLI","icon":"code","href":"/guides/cli"},{"title":"Upgrade Shuttle version","icon":"code-merge","href":"/guides/upgrade"},{"title":"Migrate Postgres Data","icon":"dove","href":"/guides/migrate-shared-postgres"},{"group":"Platform Update","icon":"layer-group","pages":[{"title":"Overview \u0026 Changelog","href":"/platform-update/platform-update"},{"title":"Transfer to the new platform","href":"/platform-update/migration"}]}]},{"group":"Pricing","pages":[{"title":"Plans overview","icon":"circle-dollar","href":"/pricing/overview"},{"title":"Usage \u0026 Billing","icon":"money-check-dollar","href":"/pricing/billing"},{"title":"Scaling \u0026 Limits","icon":"arrows-up-to-line","href":"/pricing/scaling"},{"title":"Upgrading","icon":"circle-arrow-up","href":"/pricing/upgrading"},{"title":"FAQ","icon":"comment-dollar","href":"/pricing/faq"}]},{"group":"Support","pages":[{"title":"Support","icon":"headset","href":"/support/support"},{"title":"Frequently Asked Questions","icon":"comment-question","href":"/support/faq"},{"title":"Troubleshooting","icon":"bug","href":"/support/troubleshooting"}]},{"group":"Community","pages":[{"title":"Get Involved","icon":"hand-holding-hand","href":"/community/get-involved"},{"title":"Contributing","icon":"code-pull-request","href":"/community/contribute"},{"title":"Open Source","icon":"osi","href":"/community/open-source"}]}]},{"tab":"Examples","pages":[{"title":"Examples","href":"/examples/overview"}]},{"tab":"Templates and Tutorials","pages":[{"title":"Templates and Tutorials","href":"/templates/overview"}]},{"tab":"Blog","href":"https://www.shuttle.dev/blog/tags/all"}]},"title":"Introduction to Shuttle - Shuttle Docs","buildId":"dpl_22zLaHtK6fmmSqApXTTP5tC7UBZn","deploymentId":"dpl_22zLaHtK6fmmSqApXTTP5tC7UBZn","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-BxIiCHya.js","PlusIcon-Br4qdG7I.js","lightbox-handle-r17bVUz3.js"]}