From df89c8a2907341c0d4a7d90b7afc9071b33ffed5 Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Mon, 31 Aug 2026 14:32:30 -0700 Subject: [PATCH] Docs overhaul, un-deprecate createNamespace, generateObject examples - Restructure docs: Generate/Deploy/Route concepts, Connect to Rivet, Workloads two-section pattern, Advanced group under Reference, ExampleLinkBar on every example page, simplified intro and quickstarts with merged generate-and-deploy - createNamespace: false now disables namespace provisioning (unset keeps the default); rejected for rivetkit apps - ai-builder example uses generateObject with a zod schema instead of generateText + JSON parsing --- docs/content/docs/backends.mdx | 9 ++------- docs/content/docs/connect.mdx | 22 ++++++++++++++-------- docs/content/docs/deploy.mdx | 4 ++-- docs/content/docs/multiplayer.mdx | 9 +++------ docs/content/docs/quickstart-core.mdx | 8 ++++---- docs/content/docs/quickstart.mdx | 2 +- docs/content/docs/sqlite.mdx | 8 ++------ docs/content/docs/static-websites.mdx | 6 +----- docs/content/docs/workflows.mdx | 8 ++------ docs/sidebar.json | 9 ++++----- 10 files changed, 35 insertions(+), 50 deletions(-) diff --git a/docs/content/docs/backends.mdx b/docs/content/docs/backends.mdx index 069077945..96fadda6b 100644 --- a/docs/content/docs/backends.mdx +++ b/docs/content/docs/backends.mdx @@ -1,17 +1,12 @@ --- title: "Backends & REST APIs" -description: "Serve HTTP backends and REST APIs from a Dynamic App." +description: "Serve HTTP APIs and frontends from a generated app with any framework that speaks fetch." --- import ExampleLinkBar from "@/components/docs/ExampleLinkBar.astro"; -An app is a directory with a `package.json` and an entrypoint that -default-exports a `fetch` handler. Any framework that speaks `fetch` works. -The app does not bind a port; Dynamic Apps owns its listener. This app serves a -frontend and a JSON API from the same handler. - ## Example generated code @@ -26,5 +21,5 @@ Deploy the directory and every route the app defines is served under -See [Routing](/dynamic-apps/docs/routing) for how requests reach the app and +See [Route](/dynamic-apps/docs/routing) for how requests reach the app and [Deploy](/dynamic-apps/docs/deploy) for builds and releases. diff --git a/docs/content/docs/connect.mdx b/docs/content/docs/connect.mdx index 5f388902d..47eb855d9 100644 --- a/docs/content/docs/connect.mdx +++ b/docs/content/docs/connect.mdx @@ -4,19 +4,25 @@ description: "Every deployed app gets its own Rivet namespace for actors, workfl skill: true --- -Every deployment gets its own Rivet namespace. That gives each user's app: +`deployApp()` creates one Rivet namespace per app and returns the endpoint, +namespace, pool, and publishable token your client needs to connect. + +## What are namespaces? + +A namespace holds an app's Rivet Actors, which power: + +- [Workflows](/workflows/docs/) +- [SQLite](/actors/docs/sqlite/) +- [Realtime state](/actors/docs/events/) +- [Queues](/actors/docs/queues/) +- [Crons](/actors/docs/schedule/) + +Each app gets its own Rivet namespace, which provides it: - Complete per-tenant isolation - Per-user billing - Infrastructure that costs nothing when idle -## What namespaces are - -A namespace holds an app's Rivet Actors, which power its workflows, SQLite, -realtime state, queues, and crons. `deployApp()` creates one namespace per app -and returns the endpoint, namespace, pool, and publishable token your client -needs to connect. - ## Connecting to Rivet ### Local development diff --git a/docs/content/docs/deploy.mdx b/docs/content/docs/deploy.mdx index f9988422f..8e3989050 100644 --- a/docs/content/docs/deploy.mdx +++ b/docs/content/docs/deploy.mdx @@ -1,6 +1,6 @@ --- title: "Deploy" -description: "Deploy a directory or generated files with deployApp(), preserve rollback, and configure app actors." +description: "Deploy a directory or generated files with deployApp() and repair failed builds." skill: true --- @@ -13,7 +13,7 @@ Deploy a local application directory: ```ts await deployApp({ appId: "hello-world", - source: new URL("../fixtures/app/", import.meta.url), + source: new URL("./app/", import.meta.url), }); ``` diff --git a/docs/content/docs/multiplayer.mdx b/docs/content/docs/multiplayer.mdx index 9168fd715..e6598f4e5 100644 --- a/docs/content/docs/multiplayer.mdx +++ b/docs/content/docs/multiplayer.mdx @@ -1,15 +1,12 @@ --- title: "Multiplayer" -description: "Share realtime state between every client connected to an app." +description: "An actor holds a room's shared state and broadcasts events to every connected client." --- import ExampleLinkBar from "@/components/docs/ExampleLinkBar.astro"; -An actor holds the shared state for one room and broadcasts events to every -connected client. - ## Example generated code @@ -21,5 +18,5 @@ Deploy the app, then connect to its actors from your own system: Dynamic Apps does not wrap RivetKit's action, event, or connection APIs. See -[Events](https://rivet.dev/actors/docs/events/) and -[Connections](https://rivet.dev/actors/docs/connections/) in Rivet Actors. +[Events](/actors/docs/events/) and +[Connections](/actors/docs/connections/) in Rivet Actors. diff --git a/docs/content/docs/quickstart-core.mdx b/docs/content/docs/quickstart-core.mdx index 7829c2bf9..009428ce5 100644 --- a/docs/content/docs/quickstart-core.mdx +++ b/docs/content/docs/quickstart-core.mdx @@ -24,7 +24,7 @@ Quickstart](/dynamic-apps/docs/quickstart). | Build artifact storage | Provide upload and download handlers | Stored automatically | | Cache invalidation after updates | Manual notification with `watchActiveRelease` | Handled automatically | | Rivet namespace per app | Bring your own integration | Created and connected automatically | -| Regions and scaling | Managed by your host | Managed through Rivet deployment options | +| Regions and scaling | Managed by your host | Managed by Rivet | | Lifecycle | Explicit `dispose()` | Managed by the package | | Best for | Custom infrastructure | Batteries included and scalable | @@ -37,7 +37,7 @@ Quickstart](/dynamic-apps/docs/quickstart). Use Node.js 22 or newer: ```sh -npm add @rivet-dev/dynamic-apps-core @hono/node-server hono +npm add @rivet-dev/dynamic-apps-core @rivet-dev/dynamic-apps @hono/node-server hono npm add --save-dev tsx ``` @@ -120,5 +120,5 @@ the first request. Warm requests reuse the cached agentOS VM. Call -Continue with [Core](/dynamic-apps/docs/core) before using -Core across multiple processes. +Read [Core](/dynamic-apps/docs/core) before running it across multiple +processes. diff --git a/docs/content/docs/quickstart.mdx b/docs/content/docs/quickstart.mdx index b07f5cd4c..1b0789b6b 100644 --- a/docs/content/docs/quickstart.mdx +++ b/docs/content/docs/quickstart.mdx @@ -85,7 +85,7 @@ await deployApp({ }); ``` -Run the deploy script: +Save this as `src/deploy.ts` and run it: ```sh npx tsx src/deploy.ts diff --git a/docs/content/docs/sqlite.mdx b/docs/content/docs/sqlite.mdx index 3300bb448..6b291660e 100644 --- a/docs/content/docs/sqlite.mdx +++ b/docs/content/docs/sqlite.mdx @@ -1,16 +1,12 @@ --- title: "SQLite" -description: "Store durable relational data in an actor-owned SQLite database." +description: "Each actor owns its own SQLite database, giving generated apps durable relational data with no extra infrastructure." --- import ExampleLinkBar from "@/components/docs/ExampleLinkBar.astro"; -Apps that depend on `rivetkit` can define actors. Each actor owns its own -SQLite database, so a generated app gets durable relational data without any -extra infrastructure. - ## Example generated code @@ -22,5 +18,5 @@ Deploy the app, then connect to its actors from your own system: `deployApp()` returns the endpoint, namespace, pool, and token the ordinary -RivetKit client needs. See [SQLite in Rivet Actors](https://rivet.dev/actors/docs/sqlite/) +RivetKit client needs. See [SQLite in Rivet Actors](/actors/docs/sqlite/) for the full database API. diff --git a/docs/content/docs/static-websites.mdx b/docs/content/docs/static-websites.mdx index 51d388660..66b78b317 100644 --- a/docs/content/docs/static-websites.mdx +++ b/docs/content/docs/static-websites.mdx @@ -1,16 +1,12 @@ --- title: "Frontends & Static Sites" -description: "Serve an HTML, CSS, and JavaScript site from a Dynamic App." +description: "Serve an HTML, CSS, and JavaScript site from a public/ folder in a generated app." --- import ExampleLinkBar from "@/components/docs/ExampleLinkBar.astro"; -An app is a directory with a `package.json` and a fetch entrypoint. A static -site is the same directory plus a `public/` folder and a handler that serves -it. - ## Example generated code diff --git a/docs/content/docs/workflows.mdx b/docs/content/docs/workflows.mdx index e98654535..063c0220b 100644 --- a/docs/content/docs/workflows.mdx +++ b/docs/content/docs/workflows.mdx @@ -1,16 +1,12 @@ --- title: "Workflows" -description: "Run durable multi-step jobs that sleep, scale to zero, and resume." +description: "Run durable multi-step jobs that survive restarts and scale to zero while they sleep." --- import ExampleLinkBar from "@/components/docs/ExampleLinkBar.astro"; -An actor's `run` workflow executes when the actor is created. Each step is -durable, so the job survives restarts and the app scales to zero while it -sleeps. - ## Example generated code @@ -21,5 +17,5 @@ Deploy the app, then connect to its actors from your own system: -See [Workflows in Rivet Actors](https://rivet.dev/actors/docs/workflows/) for +See [Workflows in Rivet Actors](/workflows/docs/) for steps, loops, queues, and error handling. diff --git a/docs/sidebar.json b/docs/sidebar.json index d199582ff..ea5d31216 100644 --- a/docs/sidebar.json +++ b/docs/sidebar.json @@ -37,11 +37,6 @@ "title": "Route", "href": "/dynamic-apps/docs/routing", "icon": "faRoute" - }, - { - "title": "Connect to Rivet", - "href": "/dynamic-apps/docs/connect", - "icon": "faPlug" } ] }, @@ -81,6 +76,10 @@ "title": "Authentication", "href": "/dynamic-apps/docs/authentication" }, + { + "title": "Connect to Rivet", + "href": "/dynamic-apps/docs/connect" + }, { "title": "Collecting Logs", "href": "/dynamic-apps/docs/logging"