diff --git a/astro.config.ts b/astro.config.ts
index 19ab4724..aa9691be 100644
--- a/astro.config.ts
+++ b/astro.config.ts
@@ -93,8 +93,24 @@ export default defineConfig({
// discovered mid-hydration, the re-optimize invalidates the in-flight
// import chain, and every large island on the page silently fails to
// hydrate — docs sidebar dropdowns dead until a lucky reload.
+ //
+ // `@rivet-gg/components` is a linked workspace package, which Vite serves
+ // as raw source in dev: its barrel `src/index.ts` fans out to ~130
+ // separate module requests on every page that imports even `cn`, and on
+ // a high-latency link that waterfall dominates page load. Listing it
+ // here pre-bundles it into a handful of chunks like any other dep. The
+ // cost is that edits inside packages/components need a dev-server
+ // restart (or `astro dev --force`) instead of HMR. Production builds are
+ // unaffected: optimizeDeps only applies to the dev server. Subpath
+ // entries are separate optimizer entries, so list each one the site
+ // imports; those resolve to `.tsx` files, which Vite refuses to treat
+ // as optimizable entries unless the extension is listed.
optimizeDeps: {
+ extensions: ['.tsx'],
include: [
+ '@rivet-gg/components',
+ '@rivet-gg/components/header',
+ '@rivet-gg/components/mdx',
'mermaid',
'framer-motion',
'@rivet-gg/icons',
diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx
index e6f4cf37..a9215330 100644
--- a/src/components/Footer.jsx
+++ b/src/components/Footer.jsx
@@ -26,6 +26,7 @@ const footer = {
product: VISIBLE_PRODUCTS.map((item) => ({ name: item.name, href: `/${item.id}` })),
company: [
{ name: "Cloud Pricing", href: "/cloud" },
+ { name: "Bring Your Own Cloud", href: "/cloud/byoc" },
{ name: "Enterprise", href: "/enterprise" },
{ name: "Careers", href: "/careers" },
{ name: "Talk to an engineer", href: "/talk-to-an-engineer" },
diff --git a/src/components/marketing/DeploymentOptions.tsx b/src/components/marketing/DeploymentOptions.tsx
index 140a487f..3f0433ad 100644
--- a/src/components/marketing/DeploymentOptions.tsx
+++ b/src/components/marketing/DeploymentOptions.tsx
@@ -37,10 +37,12 @@ export const DeploymentOptions = ({
-
Local
+
Local & Self-Host
- Install {productName} and run it locally while you build.
+ Install {productName} and run it locally while you build. When you ship,
+ run the same open-source control plane as a Rust binary or container on
+ your own infrastructure.
- Run the open-source Rivet control plane as a Rust binary or container on
- your infrastructure.
+ Run the control plane inside your own VPC, fully managed by Rivet. Your
+ data never leaves your cloud and there is no inbound management
+ connection.
-
- Read self-hosting docs
+
+ Read the BYOC docs
diff --git a/src/components/marketing/diagrams/deploymentDiagrams.tsx b/src/components/marketing/diagrams/deploymentDiagrams.tsx
index 513a6165..141ae981 100644
--- a/src/components/marketing/diagrams/deploymentDiagrams.tsx
+++ b/src/components/marketing/diagrams/deploymentDiagrams.tsx
@@ -2,30 +2,28 @@
import { motion, useInView, useReducedMotion } from 'framer-motion';
import { useRef } from 'react';
-import { Icon, faRailway, faVercel, faCloudflare, faAws, faKubernetes } from '@rivet-gg/icons';
// ---------------------------------------------------------------------------
// The three deployment models drawn on one shared axis: every variant is the
// identical backend → control plane → storage stack, and only the containment
// boundary moves. Pine names what Rivet Cloud runs, ink names what you run,
-// and the dashed arrow is the backend dialling out across the network
+// and the dashed arrow is the BYOC operator dialling out across the network
// boundary. Pine only — no ember; the page's one accent CTA lives elsewhere.
-// Restated from the self-host docs (src/content/self-host/index.mdx).
+// Restated from the self-host docs (src/content/self-host/index.mdx) and the
+// BYOC docs (/cloud/byoc/).
// ---------------------------------------------------------------------------
-type DeploymentDiagramVariant = 'managed' | 'byoc' | 'self-hosted';
+export type DeploymentDiagramVariant = 'managed' | 'byoc' | 'self-hosted';
const DEPLOYMENT_DIAGRAM_ARIA: Record = {
managed:
'Fully managed architecture: your backend, the control plane, and storage all run inside Rivet Cloud.',
byoc:
- 'Bring-your-own-compute architecture: your backend runs on your infrastructure — such as Railway, Vercel, Cloudflare, AWS, or Kubernetes — and connects outbound to the control plane and storage in Rivet Cloud.',
+ 'Bring-your-own-cloud architecture: your backend, the control plane, and storage all run inside your VPC. A Rivet operator connects outbound to Rivet Cloud, which manages updates and maintenance.',
'self-hosted':
'Fully self-hosted architecture: your backend, the control plane, and storage all run on infrastructure you control.',
};
-const COMPUTE_PROVIDERS = [faRailway, faVercel, faCloudflare, faAws, faKubernetes];
-
// Staged fade-in gated on scroll-into-view; settled instantly under reduced
// motion. Same hook as workflowDiagrams.tsx.
const useDiagram = () => {
@@ -95,8 +93,8 @@ const Zone = ({
);
// The one edge that crosses the network boundary: a dashed arrow pointing
-// from your backend into Rivet Cloud (your backend dials out; no inbound
-// path to your infra). The shaft sits on the diagram's center axis — the
+// from your VPC into Rivet Cloud (the operator dials out; no inbound path
+// to your infra). The shaft sits on the diagram's center axis — the
// label hangs off it absolutely so it cannot push the arrow off-center.
const CrossConnector = ({ show, at }: { show: Show; at: number }) => (
@@ -114,6 +112,7 @@ const CrossConnector = ({ show, at }: { show: Show; at: number }) => (
const Backend = () => ;
const ControlPlane = () => ;
const Storage = () => ;
+const Management = () => ;
export const DeploymentDiagram = ({ variant }: { variant: DeploymentDiagramVariant }) => {
const { ref, show } = useDiagram();
@@ -127,30 +126,25 @@ export const DeploymentDiagram = ({ variant }: { variant: DeploymentDiagramVaria
>
{variant === 'byoc' ? (
<>
-
+
-
- {COMPUTE_PROVIDERS.map((provider, i) => (
-
- ))}
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
>
) : (
{
- const deploymentModels = [
+ const deploymentModels: Array<{
+ title: string;
+ description: string;
+ hint: string;
+ icon: typeof faCloudArrowUp;
+ diagram: DeploymentDiagramVariant;
+ cta: string;
+ href: string;
+ primary: boolean;
+ secondaryLink?: { label: string; href: string };
+ }> = [
{
- title: 'Fully managed',
- description: 'Rivet Cloud runs your backend, the control plane, and storage. Nothing to operate.',
+ title: 'Rivet Cloud',
+ description: 'Rivet Cloud runs the control plane and storage. Run your backend on Rivet Cloud too, or bring your own compute from Vercel, Railway, Cloudflare, AWS, or Kubernetes.',
hint: 'Best for most teams shipping to production.',
icon: faCloudArrowUp,
- diagram: 'managed' as const,
+ diagram: 'managed',
cta: 'Get Started',
href: 'https://dashboard.rivet.dev',
primary: true,
+ secondaryLink: { label: 'Connect your own compute', href: '/actors/self-host/' },
},
{
- title: 'Bring your own compute',
- description: 'Your backend runs on your own infrastructure and connects outbound to the control plane in Rivet Cloud.',
- hint: 'Best for serverless platforms and keeping compute in your VPC.',
- icon: faShareNodes,
- diagram: 'byoc' as const,
- cta: 'Connect Your Host',
- href: '/actors/self-host/',
+ title: 'Bring your own cloud',
+ description: 'The whole stack runs inside your VPC, and Rivet manages it for you over an outbound connection.',
+ hint: 'Best for data residency without anything to operate.',
+ icon: faCloudCheck,
+ diagram: 'byoc',
+ cta: 'Read the BYOC Docs',
+ href: '/cloud/byoc/',
primary: false,
},
{
@@ -70,7 +81,7 @@ const SelfHostingComparison = () => {
description: 'You run the entire stack on infrastructure you control, including air-gapped networks.',
hint: 'Best for strict compliance and air-gapped environments.',
icon: faServer,
- diagram: 'self-hosted' as const,
+ diagram: 'self-hosted',
cta: 'View on GitHub',
href: 'https://github.com/rivet-dev/rivet',
primary: false,
@@ -112,12 +123,23 @@ const SelfHostingComparison = () => {
- Add multi-tenancy, access controls, backups, and deployment guidance to a self-hosted deployment.
+ Add multi-tenancy, access controls, backups, and deployment guidance to a BYOC or self-hosted deployment.
+
+);
diff --git a/src/pages/enterprise.astro b/src/pages/enterprise.astro
index c6ae0733..cacb09e8 100644
--- a/src/pages/enterprise.astro
+++ b/src/pages/enterprise.astro
@@ -24,7 +24,7 @@ import {
const title = 'Enterprise Infrastructure';
const description =
- 'Run Rivet on-prem, in your VPC, inside customer environments, or fully air-gapped with an enterprise control plane and no required outbound connections.';
+ 'Run Rivet in your VPC with BYOC, on-prem, inside customer environments, or fully air-gapped with an enterprise control plane and no outbound connections.';
const canonicalUrl = 'https://rivet.dev/enterprise/';
const breadcrumbSchema = {
@@ -68,6 +68,21 @@ const footprints = [
},
];
+const deploymentPaths = [
+ {
+ title: 'Bring your own cloud',
+ body: 'Rivet deploys and maintains the control plane and storage inside your VPC over an outbound connection. Your data stays in your cloud, and there is nothing for your team to operate.',
+ href: '/cloud/byoc/',
+ linkLabel: 'Read the BYOC docs',
+ },
+ {
+ title: 'Self-host',
+ body: 'Run the control plane yourself on Kubernetes or systemd, with no required connection to Rivet Cloud. The path for air-gapped and sovereign-cloud deployments.',
+ href: '/actors/self-host/control-plane/',
+ linkLabel: 'Read self-hosting docs',
+ },
+];
+
const enterpriseEditionFeatures = [
'Actor control plane',
'FoundationDB persistence layer',
@@ -98,7 +113,8 @@ const enterpriseEditionFeatures = [
Run Rivet inside your perimeter.
Keep runtime, control plane, and data under the controls your team already
- operates. The same platform that powers Rivet Cloud.
+ operates, managed by Rivet in your VPC or run entirely by you. The same
+ platform that powers Rivet Cloud.