๐ A lightweight static site generator for technical documentation.
Dory is a lightweight static site generator built for developers who want fast, clean, and customizable documentation โ without the overhead of server-side rendering, complex CI/CD setups, or cloud-specific constraints.
Built with Preact, Vite, Tailwind CSS, Mermaid, and TypeScript.
We created Dory while building a documentation platform and getting frustrated by bloated frameworks, slow build times, and cryptic deployment errors.
Dory is:
- ๐ง Simple โ Drop in
.mdxfiles and configure onedory.json. - โก Fast โ Instant hot reload in dev, quick static builds for prod.
- ๐ Portable โ No SSR, no lock-in, deploy anywhere.
- ๐งฉ Flexible โ Hackable theme, readable codebase, minimal magic.
demo.mp4
- ๐ Write docs in
.mdx(Markdown + JSX) - ๐งญ Configure site structure with a single
dory.json - ๐งช Built-in components for layout, navigation, and code highlighting
- ๐ Instant hot-reload during development
- ๐ Mermaid support for diagrams and flows
- ๐จ Customizable via Tailwind and minimal theme overrides
- ๐ Deploy to Netlify, Vercel, S3, GitHub Pages โ your call
- ๐ HTTP client for testing API endpoints (automatic inference from openapi.json)
Install Dory globally to use the CLI tool:
pnpm add -g @clidey/doryOnce installed, you can use the dory command:
mkdir my-docs && cd my-docs
dory init # Create dory.json and docs/introduction.mdx
dory dev # Live authoring preview
dory check # Validate navigation, links, assets, and metadata
dory build # Generate dist/
dory preview # Serve the build, including optional documentation chatKeep pages in docs/ and run commands from the directory containing dory.json. Existing flat projects still work. Builds use an isolated workspace and leave the installed package untouched. See documentation chat for a server-side model and languages and versions for localized content.
Builds your documentation site:
- Checks for
dory.jsonin current directory - Clears and prepares the
docsfolder - Copies configuration to
docsfolder - Runs the build process
- Creates
distfolder with build output
dory buildPreviews the built documentation site:
- Requires
distfolder (rundory buildfirst) - Starts a local preview server
dory previewVerifies that MDX content compiles without errors:
- Silent on success (no output means no errors)
- Shows detailed error messages on failure
- Uses the same preprocessing as the main build
- Perfect for automated testing and debugging
# Verify content directly
dory verify:content --content "# Hello World\n\nThis is a test."
# Verify content from file (recommended for complex content)
dory verify:content --file content.mdx
# Development repository usage:
pnpm exec tsx bin/dory.ts verify:content --file content.mdxShows CLI usage information:
dory helpFollow these steps to set up and preview the documentation locally, as well as build a static site for deployment.
Clone the repository to your local machine:
git clone https://github.com/clidey/dory.git
cd doryInstall all required dependencies using pnpm:
pnpm installMake sure you have pnpm installed. If not, you can install it via:
npm install -g pnpmThis repository already contains Dory's documentation in docs/. Edit its MDX
pages and docs/dory.json to work on the site. To create documentation for a
separate project, use dory init in a new folder rather than replacing these pages.
Start the development server to preview the documentation locally:
pnpm run devThis will launch a local server (typically at http://localhost:3000/dory/) where you can preview and edit your documentation in real-time.
To generate a static version of the site for production deployment:
pnpm run buildThis will create a dist directory containing the fully built static site, ready to be served.
The documentation workflow builds the docs from this repository's source. Its
Pages target is https://clidey.github.io/dory/, configured with url and
basePath in docs/dory.json.
Preview the production build locally before reviewing or publishing changes:
pnpm run build
node bin/dist/dory.js check
pnpm run preview --host 127.0.0.1 --port 3188 --strictPortOpen http://127.0.0.1:3188/dory/. Review the code and preview with the user
before pushing. Once approved, the workflow validates pull requests and deploys
approved changes pushed to main. A repository administrator must enable Pages
with GitHub Actions as its source before the first deployment.
Pages serves the static documentation and search. Optional server-backed chat, analytics collection, and HTTP MCP require a separate server.
You can use our official Docker image clidey/dory to create a static server. Simply create a Dockerfile inside the project and build the following Dockerfile:
FROM clidey/dory
WORKDIR /app
COPY . .
RUN dory build
CMD ["dory", "preview"]You can also build and run the static site inside a Docker container using Nginx:
docker build -f k8s/Dockerfile --tag docs:1.0.0 .docker run -it -p 8080:80 docs:1.0.0The site will be available at
http://localhost:8080inside your browser.
pnpm run buildcreates the static site inside thedistfolder, which can be served using any static file server.- The Docker image uses Nginx to serve the contents of the
distfolder.
Weโre actively improving Dory. Hereโs whatโs on deck:
- ๐ Full Documentation โ comprehensive guides, API docs, and examples
- ๐จ Themes โ full theming support with a flexible theme API
- ๐ Multi-language Support โ internationalization (i18n) & localization (l10n)
- ๐ GraphQL Client โ integrated GraphQL playground and client support