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.
+
+[](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.
+
+[](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.
+
+[](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.
+
+[](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
+ }
+ }
+}
+```