Duvlify
GitHubGet started
Documentation you own end to end

Documentation you own end to end

Duvlify is an open-source Astro framework for documentation sites. Write Markdown, get a fast static site with search, an API reference, and an MCP server for AI agents.

Duvlify is an open-source framework for documentation sites. You write your pages in Markdown. Duvlify builds a fast, static website from them, with search, an API reference, and a server that lets AI agents read your docs.

No hosted service sits between you and your site. No per-seat fee. No app framework loads in the visitor’s browser. The output is plain HTML files, and you own every one of them.

Why teams pick Duvlify

You own the output

Plain HTML files. Move them to any host at any time.

Nothing to pay per seat

Free and open source, under the MIT licence.

Built to be checked

A broken link or a bad field stops the build and names the file.

See the full list of reasons, and the use cases Duvlify fits, on the Why Duvlify page.

Start in one command

npm
git clone https://github.com/DuvInc/duvlify.git && cd duvlify
npm install && npm run dev
pnpm
git clone https://github.com/DuvInc/duvlify.git && cd duvlify
pnpm install && pnpm dev

A fresh clone runs with no setup. Search works. The agent tools answer. The build passes. Every optional service starts switched off, so you do not need an account to see your first page.

One file controls the site

A page states what it is: its title, its description, its icon. The file src/docs.config.ts states where that page sits in the navigation. Duvlify joins the two at build time. The sidebar, the tabs, the search index, and the agent tools all read that one result.

src/docs.config.ts
export const navigation: NavTab[] = [
  {
    id: 'guides',
    label: 'Guides',
    icon: 'rocket',
    groups: [
      { label: 'Start here', icon: 'zap', pages: ['getting-started', 'guides/authoring'] },
    ],
  },
];

Nothing here repeats a page’s own frontmatter. If a listed page does not exist, or a page exists in no group, the build stops and tells you which one.

Built for people and for AI agents

A person reads a web page. A search engine wants one clear page per topic. An AI agent wants plain Markdown, a map of your docs, and permission to read them.

Duvlify serves all three from one build. Add .md to any page URL to get that page as plain text, or ask for it with the header Accept: text/markdown.

Markdown copy of a page
curl https://duvlify.dev/guides/authoring.md
Ask for Markdown instead of HTML
curl -H "Accept: text/markdown" https://duvlify.dev/guides/authoring
A map of every page
curl https://duvlify.dev/llms.txt

Open source, MIT licence

Fork it. Use it in a paid product. Keep your changes private if you want. The MIT licence asks only that you keep the copyright notice.

Use these docs with your AI tools

An AI agent can read this documentation directly. You do not need an account or an API key. Everything here is public and read-only.

Query these docs via MCP

Recommended

Add this server to Claude, Claude Code, Cursor, Mistral, or any tool that supports MCP. Your agent can then search Duvlify documentation and read it in full, instead of answering from memory.

https://duvlify.dev/mcp
  • searchFind the passages that answer a question.
  • fetchRead one page in full, as Markdown.
  • list_pagesSee every page in this documentation.

Query these docs over HTTP

The same tools also work as plain web requests. Use this for scripts, or for any tool that does not support MCP. There is one endpoint per tool. Arguments go in the query string, and the answer comes back as JSON.

https://duvlify.dev/api/docs/search?query=custom+domain

Read the OpenAPI description. It is built from the same definitions as the tools, so it always matches what the endpoints do.

Read these docs as Markdown

Add .md to any page URL to get its Markdown source. You can also send the headerAccept: text/markdown to the page URL itself.

To read the whole documentation in one file, open llms-full.txt. For a short index of every page, open llms.txt.