DevPaper is an SEO-first, performance-driven documentation framework built on VitePress and Vue 3. It solves common challenges faced by documentation teams—fragmented content pipelines, poor search visibility, and slow page loads—by providing a type-safe, Markdown‑based workflow that outputs fully pre-rendered HTML with rich metadata.
Designed for professionals, DevPaper enables you to author static documentation with:
- Automatic SEO: metadata, Open Graph/Twitter cards, canonical links, and JSON‑LD generated from frontmatter.
- Type safety & validation: content is parsed into a typed
DocPagemodel at build time, catching errors early. - High performance: Vite-powered dev server, minimal runtime, lazy-loading, and optimized assets for excellent Core Web Vitals.
Whether you’re powering product docs, knowledge bases, or developer portals, DevPaper helps you ship content that ranks and performs. Contributions are welcome – see the Contributing section below to get started.
- ✅ Type-Safe Content Model - Production-grade
DocPagecore model with TypeScript types - ✅ YAML Frontmatter Parser - Automatic parsing of markdown frontmatter with validation
- ✅ Content Loader - Advanced markdown file loading with filtering, sorting, and pagination
- ✅ Multi-format Support - YAML/TOML/JSON frontmatter parsing
- ✅ Nested Object Parsing - Support for complex frontmatter structures
- ⚡️ Lightning-Fast Performance - Built with Vite for instant server startup and hot module replacement
- 📖 Modern Documentation - Clean, intuitive UI powered by VitePress 2.0
- 🎨 Fully Customizable - Flexible theming and layout options
- 🌍 Multi-language Support - Support for multiple languages with hreflang tags
- 📱 Responsive Design - Perfect on mobile, tablet, and desktop devices
- 🔍 SEO-Optimized - Comprehensive SEO features out of the box
- Type-safe content model with TypeScript
- Core fields: id, slug, title, description, body, type, category
- Metadata: author, publishedAt, updatedAt, status
- SEO: robots, urlPath, breadcrumbs, table of contents
- Derived: RenderedDocPage with schema.org and head tags
- Parse YAML frontmatter from markdown files
- Automatic URL path generation
- Breadcrumb generation from paths
- Table of Contents extraction
- Multi-language support
- Flexible author field handling
- Extract YAML/TOML/JSON frontmatter from markdown
- Parse and validate markdown files
- Convert to DocPage objects
- Filter by category, language, status, type
- Sort by order, title, date
- Pagination with limit/offset
- Section 1 (DocPage): 108 tests - Core model, generators, SEO safety
- Section 4 (Frontmatter): 48 tests - YAML parsing, conversion, helpers
- Section 5 (Content Loader): 41 tests - Extraction, loading, generation, filtering
DevPaper comes with enterprise-grade SEO optimization built in:
- ✅ Unique, descriptive page titles for each page
- ✅ Meta descriptions (120-160 characters) on all pages
- ✅ Canonical URLs to prevent duplicate content issues
- ✅ Proper charset (UTF-8) and viewport meta tags
- ✅ Open Graph tags for social media sharing
- ✅ Exactly one
<h1>per page - ✅ Logical heading hierarchy (h1 → h2 → h3)
- ✅ Proper semantic HTML heading tags
- ✅ Clean, descriptive URLs without query strings
- ✅ Lowercase URLs following best practices
- ✅ 301 redirects for URL changes via
_redirectsfile
- ✅
robots.txtfile for search engine guidance - ✅
<meta name="robots" content="index,follow">on all public pages - ✅
index: falsefor draft/internal pages to prevent indexing - ✅ Automatic exclusion of draft pages from sitemap
- ✅ Auto-generated XML Sitemap - Updated on every build
- ✅ Includes all pages except drafts
- ✅ Proper date stamps and change frequencies
- ✅ Referenced in
robots.txtfor search engines
- ✅ Static HTML Content - All content server-rendered, no JS required for initial content
- ✅ Code Splitting - Each page loads only necessary JavaScript
- ✅ Minimal JS Footprint - Core app JS is only 1.35 KB
- ✅ Image Optimization - Support for lazy loading images
- ✅ CSS Optimization - Efficient stylesheet delivery
- ✅ Breadcrumb Schema - Helps search engines understand site structure
{ "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [...] } - ✅ Article/TechArticle Schema - Rich snippets in search results
{ "@context": "https://schema.org", "@type": "TechArticle", "headline": "...", "description": "...", "author": {...}, "datePublished": "..." }
DevPaper/
├── types/ # Production-grade type definitions
│ ├── doc-page.ts # Core DocPage model & RenderedDocPage
│ ├── doc-page-generator.ts # Generator functions for SEO
│ ├── frontmatter.ts # Frontmatter types & validators
│ ├── frontmatter-parser.ts # YAML → DocPage conversion
│ ├── content-loader.ts # Content loader types & config
│ ├── content-loader-utils.ts# Content loading & parsing
│ ├── *.examples.ts # Real-world usage examples
│ └── index.ts # Main exports
├── tests/ # Comprehensive test suite (197 tests)
│ ├── doc-page.*.test.ts # 108 tests
│ ├── frontmatter.test.ts # 48 tests
│ └── content-loader.test.ts # 41 tests
├── .vitepress/
│ ├── config.ts # Main VitePress configuration
│ ├── theme/ # Custom theme components
│ └── dist/ # Build output
├── docs/ # Documentation pages
│ ├── index.md
│ ├── installation.md
│ ├── configuration.md
│ ├── features.md
│ ├── examples.md
│ └── new-feature.md
├── services/ # Service pages
├── public/
│ ├── robots.txt
│ ├── _redirects
│ └── assets/
├── package.json
├── .gitignore
└── README.md
- Node.js 14+
- pnpm (recommended) or npm/yarn
# Install dependencies
pnpm install
# Start development server
pnpm dev
# Build for production
pnpm build
# Run tests (197 passing tests)
pnpm vitest run tests/
# Preview production build
pnpm serve# Check that all 197 tests pass
pnpm vitest run tests/
# Expected output:
# Test Files 5 passed (5)
# Tests 197 passed (197)- SEO headaches: eliminates manual metadata management and duplicate-content issues.
- Inconsistent content structure: enforces a single frontmatter schema and type definitions.
- Slow documentation sites: serves pre-rendered HTML and optimizes assets out of the box.
- Integration friction: designed to be dropped into existing VitePress projects or used standalone with Docker.
Applicable for:
- Product documentation teams
- Open‑source projects needing polished docs
- Internal knowledge bases with search/SEO requirements
- Any static site where content authors require type safety and validation
Create a new markdown file with YAML frontmatter:
---
type: doc
title: Installation & Setup Guide
description: Complete step-by-step guide to install DevPaper
category: docs
order: 1
author:
name: DevPaper Team
url: https://DevPaper.dev
publishedAt: 2025-01-10
updatedAt: 2025-01-15
lang: en
index: true
robots: index,follow
---
# Installation & Setup Guide
Your markdown content here...| Field | Type | Required | Description |
|---|---|---|---|
type |
string | ✅ | doc, guide, or service |
title |
string | ✅ | 50-60 characters (SEO optimized) |
description |
string | ✅ | 120-160 characters for meta tag |
category |
string | ✅ | docs or services |
order |
number | ✅ | Display order |
author |
string | object | ✅ | Author name or {name, url} |
publishedAt |
date | ✅ | ISO format date |
updatedAt |
date | ✅ | ISO format date |
lang |
string | ⭕ | Language code (default: en) |
index |
boolean | ⭕ | Include in sitemap (default: true) |
robots |
string | ⭕ | index,follow or other directives |
---
type: doc
title: Work in Progress
index: false
---
# Work in Progress
This page won't appear in sitemaps or search results...import {
loadMarkdownFile,
loadedFileToDocPage,
filterAndSortDocPages,
} from './types'
// Load a single markdown file
const result = loadMarkdownFile({
id: 'docs/installation',
path: 'docs/installation.md',
filename: 'installation.md',
lang: 'en',
raw: fileContent,
})
// Query and filter DocPages
const pages = filterAndSortDocPages(allPages, {
category: 'docs',
status: 'published',
sortBy: 'order',
})All content is validated against the DocPage type system:
interface DocPage {
id: string
slug: string
title: string
description: string
body: string
type: 'doc' | 'guide' | 'service'
category: string
author: { name: string; url?: string }
publishedAt: Date
updatedAt: Date
status: 'published' | 'draft'
robots: RobotsDirective
urlPath: string
breadcrumbs: BreadcrumbItem[]
toc: HeadingItem[]
}- Global site settings (title, description)
- Metadata for all pages
- Breadcrumb and Article Schema generation
- OG tags for social sharing
User-agent: *
Allow: /
Sitemap: https://DevPaper.dev/sitemap.xml
/old-page /new-page 301
| Feature | Status | Details |
|---|---|---|
| Responsive Design | ✅ | Mobile-first, works on all devices |
| Static Content | ✅ | No JavaScript required to see content |
| Page Speed | ✅ | Core app JS: 1.35 KB, CSS: ~182 KB |
| Unique Titles | ✅ | Each page has unique, descriptive title |
| Meta Descriptions | ✅ | 120-160 characters per page |
| Canonical URLs | ✅ | Every page has canonical URL |
| Structured Data | ✅ | Breadcrumb + Article schemas |
| XML Sitemap | ✅ | Auto-generated, updated on build |
| robots.txt | ✅ | Proper directives for crawlers |
| Header Structure | ✅ | One h1, logical h2/h3 hierarchy |
| URL Structure | ✅ | Clean, descriptive, lowercase URLs |
| Draft Pages | ✅ | Excluded from sitemap and indexing |
- View Source - Press
Ctrl+Uto verify content is present without JavaScript - Check Sitemap - Visit
https://DevPaper.dev/sitemap.xml - Test Redirects - Verify 301 redirects are working
- Google Search Console - Monitor indexing and search performance
- Google PageSpeed Insights - Check performance and SEO scores
- Lighthouse - Built-in Chrome DevTools audit
- Schema.org Validator - Validate structured data
- Connect your GitHub repository
- Vercel automatically detects VitePress
- Build command:
pnpm build - Output directory:
.vitepress/dist - Deploy on every push to main
# Build
pnpm build
# The .vitepress/dist folder is ready to deployMIT License - See LICENSE file for details
Contributions are welcome! Please feel free to submit a Pull Request.
For questions and issues, please visit:
Made with ❤️ by xoxxel Team
