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

This runs:
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:
This runs:
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:
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:

Serving all languages without nodemon

If you want to run with all languages enabled and skip nodemon’s restart overhead, use:
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.
This is equivalent to:
A debug variant is also available:
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