---
title: "Documentation you own end to end"
description: "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."
canonical: "https://duvlify.dev/"
updated: "2026-08-10"
---

# Documentation you own end to end

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.

[**Get started**](/getting-started)

Clone it, run one command, and see your site.

[**Write a page**](/guides/authoring)

Add frontmatter to a Markdown file. Its path becomes its URL.

[**Serve AI agents**](/agents/overview)

One endpoint turns your docs into tools an agent can call.

[**Deploy it**](/guides/deployment)

Ship it on Cloudflare, or on any static host you already use.

## 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](/why) page.

## Start in one command

```bash title="npm"
git clone https://github.com/DuvInc/duvlify.git && cd duvlify
npm install && npm run dev
```

```bash title="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.

```ts title="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.

> **Info: This site is the demo**
>
> duvlify.dev runs on Duvlify. Its pages live in the `content/` folder of the
> same repository you would clone. Every component on this site is one you can
> use. The search box, the Markdown copies of each page, and the MCP server are
> the same ones your site would get.

## 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`.

```bash title="Markdown copy of a page"
curl https://duvlify.dev/guides/authoring.md
```

```bash title="Ask for Markdown instead of HTML"
curl -H "Accept: text/markdown" https://duvlify.dev/guides/authoring
```

```bash title="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.

[**Read the source**](https://github.com/DuvInc/duvlify)

Issues, discussions, and the licence text.

[**See how it is built**](/reference/architecture)

What the build outputs, and why each part exists.
