IfDocumentation Index
Fetch the complete documentation index at: https://86d.app/docs/llms.txt
Use this file to discover all available pages before exploring further.
doctor is green and you still have a problem, the rest of this page covers the symptoms we see most often.
”DATABASE_URL is not set”
The store boots without a database, but every endpoint that needs data fails. SetDATABASE_URL in .env:
.env
DATABASE_URL to the pooled connection string, DATABASE_URL_UNPOOLED to the direct one). For Docker Compose, both can point at postgres:5432.
”Database is not reachable”
The TCP connectivity check in86d dev and 86d init failed. Either the database is down, or DATABASE_URL points at the wrong host.
- Local Postgres:
pg_isready -h localhost -p 5432 - Docker Compose:
docker compose ps postgresshould show “healthy” - Neon or Railway: confirm the project is awake and the connection string is current
Module components are missing
Symptom:<ProductGrid /> or <Cart /> renders as plain text in MDX, or the page errors with “component not found”.
Run codegen and restart the dev server:
config.json. If modules is "*", every module under modules/ is enabled. If it is an explicit array, the package name (@86d-app/<name>) must be in the list.
”Module ‘X’ is enabled in template but not found”
86d doctor flags this when config.json references a module that has no folder under modules/. Either install the module:
config.json and run 86d generate.
Codegen fails
86d generate errors usually point at one of:
- A module whose
src/index.tsdoes not export a default factory. - A module whose
package.jsonhas the wrongname(must be@86d-app/<dir>for first-party modules). - A circular
requiresbetween modules.
Webhooks return 401
Most often the webhook secret is wrong or the body is being mutated before signature verification.- For Stripe, set
STRIPE_WEBHOOK_SECRETto the value from the Stripe dashboard webhook endpoint detail. The same secret must match the deployment receiving the webhook (test secret for test events, live secret for live events). - Confirm your reverse proxy is not stripping or modifying the request body. The webhook handler reads the raw body before any JSON parsing.
- Webhooks older than 5 minutes are rejected as replays. If you are replaying old events for testing, do so via the Stripe CLI which re-signs with a current timestamp.
”Could not find active template config.json”
The CLI’s template helpers look for thetemplate/* path alias in apps/store/tsconfig.json to figure out which template is active. If you edited the alias by hand and it does not match ../../templates/<name>/, the helpers fail.
Re-run:
”BETTER_AUTH_SECRET” placeholder warning
The store boot validator rejects the placeholderchange-me-to-a-random-string. Generate a real value:
.env. The CLI’s 86d init does this automatically on first run.
OAuth callbacks fail
Symptom: customer signs in with Google (or another provider), is redirected, and lands on an error.BETTER_AUTH_URLmust be set to the public URL of your store. On Vercel, this ishttps://<deployment>.vercel.appor your custom domain. On Railway, setAPP_URL=https://$RAILWAY_PUBLIC_DOMAIN.- The redirect URI registered with the OAuth provider must match
https://<your-store>/api/auth/callback/<provider>exactly. Trailing slashes count. - For Google, both server-side credentials and
NEXT_PUBLIC_AUTH_GOOGLE_IDmust be set.
Storage uploads fail in production
- Local storage on Vercel does not persist. Files written to disk in a serverless deployment are lost on the next request. Switch
STORAGE_PROVIDERtovercel(and connect a Blob store) ors3. - For MinIO inside Docker, set
STORAGE_PUBLIC_URL_MODE=proxyso URLs return as/uploads/...paths from the store app rather than raw container hostnames the browser cannot reach.
TypeScript errors after upgrading
Run a clean install:Asking for help
If none of the above resolves your problem:- Run
86d doctorand copy the full output. - Capture the error message verbatim, the command that produced it, and the page or endpoint involved.
- Open an issue at github.com/86d-app/86d/issues with that information.

