SolidStart
Everything you need to build a Solid project, powered by solid-start;
Creating a project
# create a new project in the current directory
npm init solid@latest
# create a new project in my-app
npm init solid@latest my-app
Developing
Once you've created a project and installed dependencies with npm install (or pnpm install or yarn), start a development server:
npm run dev
# or start the server and open the app in a new browser tab
npm run dev -- --open
GitHub API
The Worker holds no GitHub token. Stars, contributors and avatars come from the build-time snapshot
(script/github-snapshot.ts, src/lib/github-snapshot.json). The changelog reads releases from the
GitHub API without a token (src/lib/changelog.ts, src/lib/github-api.ts), cached for 15 minutes in
memory and at the edge, with the snapshot as fallback. Without a token GitHub allows 60 calls an hour
per IP; in dev the last good releases are kept in $TMPDIR/opencode-site-github/, so a restart while
rate limited still has them. The snapshot script uses GITHUB_TOKEN when it is set (CI passes the
workflow's own token):
GITHUB_TOKEN=$(gh auth token) bun ./script/github-snapshot.ts
Never commit a token.
Building and deploying
bun run build -- --mode dev builds the site (Nitro's cloudflare-module preset) into the Build Output
Specification tree in .cloudflare/output; bun run deploy:dev builds and runs
cf deploy --prebuilt --mode dev. cloudflare.config.ts defines the Worker (opencode-site-dev on
dev.opencode.ai, opencode-site-production on opencode.ai), its bindings and its routes. CI deploys on
pushes to dev and production (.github/workflows/deploy-site.yml). Production takes no routes until
productionOwnsRoot is switched on.
Each build also carries the hashed scripts and stylesheets of the last 20 builds it replaces (for up to a
week), downloaded from the live site's /_build/retained.json, so pages already open keep loading their
code after a deploy (script/retain-assets.ts). A rollback in the Cloudflare dashboard restores the older
version's assets only, so tabs opened on the rolled-back build reload once.
The V2 docs at /docs are part of this app (src/docs/, see src/docs/AGENTS.md). script/build.ts prerenders
them into the Worker's assets after vite build. A /docs URL without a V2 page redirects to the V1 docs app on
docs.opencode.ai.