diff --git a/examples/custom-serverless/package.json b/examples/custom-serverless/package.json index b6d96e0b27..b23f21264b 100644 --- a/examples/custom-serverless/package.json +++ b/examples/custom-serverless/package.json @@ -24,7 +24,10 @@ "tags": [ "starter" ], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/examples/deno/package.json b/examples/deno/package.json index d324e9c6d0..6baac2f8ad 100644 --- a/examples/deno/package.json +++ b/examples/deno/package.json @@ -24,7 +24,10 @@ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/examples/drizzle/package.json b/examples/drizzle/package.json index 15baec4417..64ab90add1 100644 --- a/examples/drizzle/package.json +++ b/examples/drizzle/package.json @@ -27,7 +27,10 @@ "tags": [ "database" ], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/examples/elysia/package.json b/examples/elysia/package.json index 71158c3aa2..4f7681267e 100644 --- a/examples/elysia/package.json +++ b/examples/elysia/package.json @@ -27,7 +27,10 @@ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/examples/express/README.md b/examples/express/README.md index 945dc034d0..519d2e1113 100644 --- a/examples/express/README.md +++ b/examples/express/README.md @@ -25,6 +25,21 @@ This example demonstrates integrating Express web framework with Rivet Actors: - **Actor Definition** ([`src/backend/registry.ts`](https://github.com/rivet-dev/rivet/tree/main/examples/express/src/backend/registry.ts)): Shows how to use Express middleware and routing with actors +## Deployment + +This example can be deployed to Railway. See the [Railway deployment guide](/docs/connect/railway) for detailed instructions. + +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/new/template?template=https://github.com/rivet-dev/rivet/tree/main/examples/express) + +### Required Environment Variables + +Configure these environment variables in your Railway project: +- `RIVET_ENDPOINT` - Your Rivet Engine endpoint +- `RIVET_NAMESPACE` - Your Rivet namespace +- `RIVET_RUNNER_TOKEN` - Your Rivet runner token + +Get these values from the [Rivet dashboard](https://dashboard.rivet.dev) under Connect > Railway. + ## Resources Read more about [actions](/docs/actors/actions) and [setup](/docs/setup). diff --git a/examples/express/package.json b/examples/express/package.json index e99a61756a..2a719e25cf 100644 --- a/examples/express/package.json +++ b/examples/express/package.json @@ -28,7 +28,10 @@ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/examples/hono-bun/package.json b/examples/hono-bun/package.json index 9ade9d1eb7..08acd32e90 100644 --- a/examples/hono-bun/package.json +++ b/examples/hono-bun/package.json @@ -46,7 +46,10 @@ "tags": [ "starter" ], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/examples/hono/README.md b/examples/hono/README.md index 4da8c734bc..abefa26b99 100644 --- a/examples/hono/README.md +++ b/examples/hono/README.md @@ -25,6 +25,21 @@ This example demonstrates integrating Hono web framework with Rivet Actors: - **Actor Definition** ([`src/backend/registry.ts`](https://github.com/rivet-dev/rivet/tree/main/examples/hono/src/backend/registry.ts)): Shows how to use Hono for HTTP routing with actors +## Deployment + +This example can be deployed to Railway. See the [Railway deployment guide](/docs/connect/railway) for detailed instructions. + +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/new/template?template=https://github.com/rivet-dev/rivet/tree/main/examples/hono) + +### Required Environment Variables + +Configure these environment variables in your Railway project: +- `RIVET_ENDPOINT` - Your Rivet Engine endpoint +- `RIVET_NAMESPACE` - Your Rivet namespace +- `RIVET_RUNNER_TOKEN` - Your Rivet runner token + +Get these values from the [Rivet dashboard](https://dashboard.rivet.dev) under Connect > Railway. + ## Resources Read more about [actions](/docs/actors/actions) and [setup](/docs/setup). diff --git a/examples/hono/package.json b/examples/hono/package.json index 33208085c4..b72c7bffc5 100644 --- a/examples/hono/package.json +++ b/examples/hono/package.json @@ -26,7 +26,10 @@ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/examples/next-js/README.md b/examples/next-js/README.md index 4c9798817d..d6434dcdf1 100644 --- a/examples/next-js/README.md +++ b/examples/next-js/README.md @@ -25,6 +25,21 @@ This example demonstrates minimal Next.js integration with Rivet Actors: - **Actor Definition** ([`src/backend/registry.ts`](https://github.com/rivet-dev/rivet/tree/main/examples/next-js/src/backend/registry.ts)): Simple counter actor integrated with Next.js App Router +## Deployment + +This example can be deployed to Vercel. See the [Vercel deployment guide](/docs/connect/vercel) for detailed instructions. + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/rivet-dev/rivet/tree/main/examples/next-js&project-name=rivetkit-next-js&demo-title=RivetKit+Next.js&demo-description=Minimal+Next.js+example+with+Rivet+Actors) + +### Required Environment Variables + +After deploying, configure these environment variables in your Vercel project: +- `RIVET_ENDPOINT` - Your Rivet Engine endpoint +- `RIVET_NAMESPACE` - Your Rivet namespace +- `RIVET_RUNNER_TOKEN` - Your Rivet runner token + +Get these values from the [Rivet dashboard](https://dashboard.rivet.dev) under Connect > Vercel. + ## Resources Read more about [Next.js integration](/docs/platforms/next-js), [actions](/docs/actors/actions), [state](/docs/actors/state), and [events](/docs/actors/events). diff --git a/examples/next-js/package.json b/examples/next-js/package.json index 46dce5ed97..93384ebc3e 100644 --- a/examples/next-js/package.json +++ b/examples/next-js/package.json @@ -34,7 +34,10 @@ "tags": [ "starter" ], - "frontendPort": 3000 + "frontendPort": 3000, + "deployTemplate": { + "vercel": true + } }, "license": "MIT" } diff --git a/examples/node/README.md b/examples/node/README.md index d2ee2ef545..7a62aaf657 100644 --- a/examples/node/README.md +++ b/examples/node/README.md @@ -25,6 +25,21 @@ This example demonstrates minimal Node.js setup with Rivet Actors: - **Actor Definition** ([`src/backend/registry.ts`](https://github.com/rivet-dev/rivet/tree/main/examples/node/src/backend/registry.ts)): Basic actor setup for Node.js runtime +## Deployment + +This example can be deployed to Railway. See the [Railway deployment guide](/docs/connect/railway) for detailed instructions. + +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/new/template?template=https://github.com/rivet-dev/rivet/tree/main/examples/node) + +### Required Environment Variables + +After deploying, configure these environment variables in your Railway project: +- `RIVET_ENDPOINT` - Your Rivet Engine endpoint +- `RIVET_NAMESPACE` - Your Rivet namespace +- `RIVET_RUNNER_TOKEN` - Your Rivet runner token + +Get these values from the [Rivet dashboard](https://dashboard.rivet.dev) under Connect > Railway. + ## Resources Read more about [actions](/docs/actors/actions), [state](/docs/actors/state), and [setup](/docs/setup). diff --git a/examples/node/package.json b/examples/node/package.json index 321f5183f3..61456f0278 100644 --- a/examples/node/package.json +++ b/examples/node/package.json @@ -25,7 +25,10 @@ "tags": [ "starter" ], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/examples/trpc/package.json b/examples/trpc/package.json index 321fcefbe5..b24243def8 100644 --- a/examples/trpc/package.json +++ b/examples/trpc/package.json @@ -26,7 +26,10 @@ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, "license": "MIT" } diff --git a/frontend/packages/example-registry/scripts/build/index.ts b/frontend/packages/example-registry/scripts/build/index.ts index 038548fcc7..d76d748aff 100644 --- a/frontend/packages/example-registry/scripts/build/index.ts +++ b/frontend/packages/example-registry/scripts/build/index.ts @@ -54,6 +54,10 @@ interface TemplateMetadata { tags: string[]; noFrontend?: boolean; priority?: number; + deployTemplate?: { + railway?: boolean; + vercel?: boolean; + }; } interface PackageJson { @@ -73,6 +77,10 @@ interface Template { tags: string[]; noFrontend: boolean; priority?: number; + deployTemplate?: { + railway?: boolean; + vercel?: boolean; + }; } function validateTechnologiesAndTags( @@ -300,6 +308,7 @@ async function main() { tags: packageJson.template.tags, noFrontend: packageJson.template.noFrontend ?? false, priority: packageJson.template.priority, + deployTemplate: packageJson.template.deployTemplate, }); // Collect example data for Railway sync @@ -357,6 +366,10 @@ export interface Template { tags: string[]; noFrontend: boolean; priority?: number; + deployTemplate?: { + railway?: boolean; + vercel?: boolean; + }; } export const templates: Template[] = ${JSON.stringify(templates, null, 2)}; diff --git a/frontend/packages/example-registry/src/_gen.ts b/frontend/packages/example-registry/src/_gen.ts index 520547ef1c..4755b85577 100644 --- a/frontend/packages/example-registry/src/_gen.ts +++ b/frontend/packages/example-registry/src/_gen.ts @@ -9,6 +9,10 @@ export interface Template { tags: string[]; noFrontend: boolean; priority?: number; + deployTemplate?: { + railway?: boolean; + vercel?: boolean; + }; } export const templates: Template[] = [ @@ -237,7 +241,10 @@ export const templates: Template[] = [ "tags": [ "starter" ], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, { "name": "deno", @@ -249,7 +256,10 @@ export const templates: Template[] = [ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, { "name": "drizzle", @@ -263,7 +273,10 @@ export const templates: Template[] = [ "tags": [ "database" ], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, { "name": "elysia", @@ -276,7 +289,10 @@ export const templates: Template[] = [ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, { "name": "experimental-durable-streams-ai-agent", @@ -304,7 +320,10 @@ export const templates: Template[] = [ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, { "name": "hono", @@ -316,7 +335,10 @@ export const templates: Template[] = [ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, { "name": "hono-bun", @@ -331,7 +353,10 @@ export const templates: Template[] = [ "tags": [ "starter" ], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, { "name": "hono-react", @@ -386,7 +411,10 @@ export const templates: Template[] = [ "tags": [ "starter" ], - "noFrontend": false + "noFrontend": false, + "deployTemplate": { + "vercel": true + } }, { "name": "node", @@ -399,7 +427,10 @@ export const templates: Template[] = [ "tags": [ "starter" ], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } }, { "name": "raw-websocket-handler-proxy", @@ -448,6 +479,9 @@ export const templates: Template[] = [ "typescript" ], "tags": [], - "noFrontend": true + "noFrontend": true, + "deployTemplate": { + "railway": true + } } ]; diff --git a/website/src/app/(v2)/(marketing)/templates/[slug]/page.tsx b/website/src/app/(v2)/(marketing)/templates/[slug]/page.tsx index 035d074496..5a14875e0e 100644 --- a/website/src/app/(v2)/(marketing)/templates/[slug]/page.tsx +++ b/website/src/app/(v2)/(marketing)/templates/[slug]/page.tsx @@ -102,7 +102,7 @@ export default async function Page({ params }: Props) { // Construct Vercel deploy URL with demo card parameters const vercelDeployUrl = new URL('https://vercel.com/new/clone'); vercelDeployUrl.searchParams.set('repository-url', `https://github.com/rivet-dev/rivet/tree/main/examples/${template.name}`); - vercelDeployUrl.searchParams.set('project-name', template.displayName); + vercelDeployUrl.searchParams.set('project-name', template.name); vercelDeployUrl.searchParams.set('demo-title', template.displayName); vercelDeployUrl.searchParams.set('demo-description', description); vercelDeployUrl.searchParams.set('demo-image', `https://www.rivet.dev/examples/${template.name}/image.png`); @@ -211,25 +211,30 @@ export default async function Page({ params }: Props) { View on GitHub - {/* - - Deploy to Vercel - - - - Deploy to Railway - - */} + {template.deployTemplate?.vercel && ( + + + Deploy to Vercel + + )} + {template.deployTemplate?.railway && ( + + + Deploy to Railway + + )} + {/* Show additional deployment platforms (Kubernetes, AWS, GCP, etc.) when quick-deploy options are available */} + {(template.deployTemplate?.vercel || template.deployTemplate?.railway) && } diff --git a/website/src/content/docs/meta/submit-template.mdx b/website/src/content/docs/meta/submit-template.mdx index f143eb67ec..2583c0e92c 100644 --- a/website/src/content/docs/meta/submit-template.mdx +++ b/website/src/content/docs/meta/submit-template.mdx @@ -57,3 +57,39 @@ Submit your changes by [creating a pull request](https://github.com/rivet-dev/ri - `tags` (required) - Array of tags categorizing the template - `noFrontend` (optional) - Set to `true` to skip screenshot generation - `priority` (optional) - Lower numbers appear first in the list +- `deployTemplate` (optional) - Configuration for deployment platform support: + - `railway` (optional) - Set to `true` to enable Railway deployment + - `vercel` (optional) - Set to `true` to enable Vercel deployment + +### Deploy Template Guidelines + +The `deployTemplate` field indicates which platforms your example can be deployed to: + +- **Railway**: For containerized Node.js, Bun, or Deno applications that use `registry.start()` with standard HTTP frameworks (Express, Hono, tRPC, etc.) +- **Vercel**: For Next.js applications that use the Vercel deployment model + +Examples: + +```json +{ + "template": { + "technologies": ["typescript", "hono"], + "tags": ["starter"], + "deployTemplate": { + "railway": true + } + } +} +``` + +```json +{ + "template": { + "technologies": ["next-js", "react", "typescript"], + "tags": ["starter"], + "deployTemplate": { + "vercel": true + } + } +} +```