1---
2title: Vocs
3description: Package Vocs documentation and its Waku RSC handler for Neon Functions.
4sidebar:
5 order: 12
6---
7
8`Neon.Website.Vocs` builds documentation assets and the Waku RSC handler into a
9Node 24 Fetch artifact for Neon Functions. It is not an assets-only S3 deployment,
10a container, or a listening Bun server.
11
12## Prepare the app
13
14Use a compatible Vocs app or the
15[runnable Vocs example](https://github.com/alchemy-run/alchemy/tree/main/examples/neon-website-vocs).
16Install Vocs with its matching Waku, React, and RSC peers; the linked example's
17manifest records the workspace dependency set. Configure
18[deployment credentials](/neon/setup), then add the integration in the app directory:
19
20Install [Alchemy and its matching Effect dependencies](/getting-started) first;
21use Node 24 for this build toolchain.
22
23```sh
24pnpm add -D @alchemy.run/frontend-frameworks @vercel/nft
25```
26
27Keep documentation, navigation, and theme configuration in `vocs.config.*`.
28The integration manages the Node/Waku target and the Neon Fetch wrapper.
29
30## Define the stack
31
32```typescript
33// alchemy.run.ts
34import * as Alchemy from "alchemy";
35import * as Neon from "alchemy/Neon";
36import * as Effect from "effect/Effect";
37
38export default Alchemy.Stack(
39 "NeonVocs",
40 { providers: Neon.providers(), state: Alchemy.localState() },
41 Effect.gen(function* () {
42 const site = yield* Neon.Website.Vocs("Web", {
43 rootDir: ".",
44 });
45 return { url: site.url };
46 }),
47);
48```
49
50`outDir` defaults to `"dist"`; if customized, it must match the output in
51`vocs.config.*`. Static pages use extensionless HTML lookup; other requests reach
52the RSC handler. Keep secrets out of rendered documentation, client-component
53props, and public build variables, even if their input was `Redacted`.
54
55## Develop and deploy
56
57```sh
58pnpm exec alchemy dev
59pnpm exec alchemy deploy
60pnpm exec alchemy destroy
61```
62
63Run separately, destroying when finished. The dev implementation uses Vocs's own
64Vite instance in an isolated process and returns a local URL, without an implicit
65Project or Function. Append `.pipe(Alchemy.remote())` to the Website Effect to
66use live deployment during dev; this does not bypass packaging validation.
67
68Live deploy creates an Ohio Project if no scope is supplied. Pass either
69`project` or `branch` for an existing backend; choose Ohio when adding storage.
70See [scope and credentials](/neon/frontend/vite#scope-and-credentials).
71
72The runnable example passes deployment through the packaged framework integration,
73with live desktop/mobile counter hydration and guide navigation, JSON GET/HEAD,
74and generated `/llms.txt`. The fresh Vocs artifact lifecycle test also passes
75homepage, guide, and JavaScript/CSS asset checks and verifies teardown. These
76checks cover Vocs, not the full framework matrix.
77
78Packaging rejects traced `.env`, `.alchemy`, and private-key files, including
79symlink targets, and reports sanitized workspace-relative filenames. Keep runtime
80source dependencies outside those sensitive locations; do not bypass the check.
81A historical `artifact-browser` rejection could not be attributed to a filename
82from its retained log and was not reproduced by the actual example deployment.
83
84There is no added CDN or durable framework cache. Neon probes have served old
85code/env after deployment metadata updates, and domain registration does not
86validate TLS. See the
87[shared deployment limits](/neon/frontend/vite#environment-and-deployment-limits).
88
89## Reference
90
91- [Vocs API](/providers/neon/website/vocs)
92- [Runnable Vocs example](https://github.com/alchemy-run/alchemy/tree/main/examples/neon-website-vocs)