Skip to main content
After completing the local setup, you can start the development server and browse the docs site at http://localhost:4000.

Starting the server

npm start
This runs:
cross-env NODE_ENV=development ENABLED_LANGUAGES=en nodemon src/frame/server.ts
The server starts on port 4000 with NODE_ENV=development and English content enabled. nodemon watches for file changes and restarts the server automatically.
npm start and npm run dev are equivalent — both invoke the same command.
To stop the server at any time, press Ctrl+C in your terminal.

Starting the server in debug mode

Use npm run debug to start the server with the Node.js inspector attached:
npm run debug
This runs:
cross-env NODE_ENV=development ENABLED_LANGUAGES=en nodemon --inspect src/frame/server.ts
The --inspect flag enables the V8 inspector protocol on 127.0.0.1:9229. You can then attach a debugger from VS Code or Chrome DevTools. See Debugging for a step-by-step guide.

Enabling additional languages

By default, the server only loads English content (ENABLED_LANGUAGES=en). Loading all languages at startup would significantly increase memory usage and startup time. To enable one or more additional languages, set ENABLED_LANGUAGES before starting the server:
ENABLED_LANGUAGES=en,ja,pt npm start
You can also set ENABLED_LANGUAGES in your .env file to avoid typing it every time.
Restart the server after changing ENABLED_LANGUAGES. The application reads this variable at startup and does not reload it on the fly.

Supported language codes

The full set of language codes is defined in src/languages/lib/languages.ts:
CodeLanguage
enEnglish
esSpanish (Español)
jaJapanese (日本語)
ptPortuguese (Português do Brasil)
zhSimplified Chinese (简体中文)
ruRussian (Русский)
frFrench (Français)
koKorean (한국어)
deGerman (Deutsch)

Serving all languages without nodemon

If you want to run with all languages enabled and skip nodemon’s restart overhead, use:
npm run start-all-languages
This runs tsx src/frame/server.ts directly with NODE_ENV=development and no ENABLED_LANGUAGES restriction — meaning all supported languages are served.

Using the fixture dev server

The fixture server loads a lightweight set of test content from src/fixtures/fixtures instead of the full content tree. It starts much faster and is useful when working on application code rather than documentation content.
npm run fixture-dev
This is equivalent to:
cross-env ROOT=src/fixtures/fixtures npm start
A debug variant is also available:
npm run fixture-dev-debug
Use the fixture server when you’re iterating on server logic, middleware, or rendering behavior and don’t need the full content tree loaded.

Hot reload behavior

The server uses nodemon to watch for changes and restart automatically. The watch configuration is in package.json under "nodemonConfig": Watched file extensions: ts, json, yml, md, html, scss Directories ignored by nodemon (changes here do not trigger a restart):
  • assets/
  • script/
  • tests/
  • content/
  • translations/
  • data/reusables/
  • data/variables/
  • data/glossaries/
  • data/product-examples/
  • data/learning-tracks/
  • rest-api-description/
  • semmle-code/
Changes to files inside content/ and data/ do not trigger a server restart. The server reads content dynamically on each request, so you can edit Markdown and Liquid files and refresh your browser to see the result without waiting for a restart.
Changes to TypeScript source files in src/, configuration files, or schema files will trigger nodemon to restart the server. Watch the terminal output to confirm the restart has completed before refreshing your browser.

Command reference

CommandDescription
npm startStart the dev server on port 4000 (English only)
npm run devAlias for npm start
npm run debugStart with Node.js inspector on port 9229
npm run start-all-languagesStart without language restriction, no nodemon
npm run fixture-devStart with fixture content (faster startup)
npm run fixture-dev-debugFixture server with Node.js inspector

Build docs developers (and LLMs) love