v0.1 Yet Another Markdown Blog — now public

Markdown blog engine. Zero database. Full type safety.

Drop a .md file in your repo and it becomes a blog post — with RSS, SEO, JSON-LD, and type-safe queries. Works with Next.js, Astro, and React.

$ npm install @yamblog/core @yamblog/next
Pure TypeScriptSmall core with minimal runtime deps
Static-firstShips HTML with tiny client behavior
Agent-readyDetect platform, verify support, install safely
lib/blog.ts
1 import { defineBlog } from '@yamblog/core';
2
3 // Zero-config — siteUrl auto-detected from env.
4 export const blog = defineBlog('content/posts');
5
6 // Or with a custom path and site URL:
7 export const blog = defineBlog('content/posts', 'https://my-site.com');
Why Yamblog

Six choices, made once, made well.

Every product needs a blog. Contentlayer is dead. Astro Collections are Astro-only. Next.js starters are copy-paste nightmares. Yamblog is the missing middle.

01 / File-based

No database. No CMS. No lock-in.

Markdown files in a directory. Frontmatter as schema. Move providers, fork the repo, hand it to an LLM — your content goes with you.

.md filesfrontmattergit-native
02 / Type-safe

Zod schemas, end to end.

Define frontmatter once and get full TypeScript inference across every query, metadata helper, and adapter. Mistypes fail at build, not in production.

zodstrict modeinferred types
03 / Framework-agnostic

Pure core. Thin adapters.

All business logic lives in @yamblog/core. Adapters for Next.js, Astro, and React are thin wrappers — switch frameworks without rewriting your blog.

next.jsastroreact
04 / Zero-config defaults

Sensible from the first commit.

defineBlog() with no args just works. Site URL is auto-detected from env vars. Reading time, draft filtering, related posts, full-text search — all on by default.

defineBlog()env auto-detect200 wpm
05 / SEO-ready

SEO that doesn't need a checklist.

JSON-LD Article schema, OpenGraph, Twitter cards, canonical URLs, RSS 2.0, and a sitemap — generated automatically from the same posts you already wrote.

schema.orgrsssitemap
06 / Agentic-first

An API your AI agent can hold.

Stable blog-{slug} IDs as foreign keys, Zod-validated frontmatter, predictable file layout. Drop the setup prompt into Claude Code and walk away.

stable idszod validationsetup prompt
Monorepo

One core, many adapters.

Install only what you need. The public API is small and intentional — the core keeps runtime dependencies minimal, and each adapter adds only what its framework requires.

Package
Description
Public exports
Status
@yamblog/core
Framework-agnostic engine. Parser, query, full-text search, RSS, sitemap. Small runtime surface.
defineBlog · getPosts · search
Stable
@yamblog/next
Next.js App Router adapter. Metadata, JSON-LD, OG images, RSS handler, sitemap export.
generatePostMetadata · BlogPostPage · createRssHandler
Stable
@yamblog/astro
Astro 5 Content Layer loader and pre-built .astro components.
yamblogLoader · BlogPostPage · BlogListPage
Stable
@yamblog/react
React hooks and components for Vite SPAs. Client-side search included.
useBlog · MarkdownRenderer · PostCard
Stable
@yamblog/remark
Optional markdown plugins: TOC, YouTube/Vimeo embeds, interactive directives.
toHtml · remarkToc · remarkInteractive
Stable
For agents

Give your coding agent one prompt. Let it inspect, verify, and integrate.

The prompt tells the model to detect the platform, confirm Yamblog support, install the right adapter, create a sample post, and self-correct if the first pass is wrong.

01

Verify support

The agent should confirm whether the project is Next.js, Astro, or React/Vite. If not, it should stop instead of forcing a broken integration.

02

Inspect the repo

Have the agent read package.json, config files, and app structure before touching anything. It should name the platform and explain why.

03

Install the right adapter

Use the official Yamblog package pair for the detected platform and follow local project conventions for package manager and file layout.

04

Create a sample post

A first hello-world.md file proves the content path, frontmatter parsing, and route wiring are all correct.

05

Self-heal and verify

If imports, routes, or paths fail, the agent should repair the integration and re-check instead of stopping at the first error.

prompt-for-llms.md
1 Inspect this project before editing anything.
2
3 Yamblog repo: https://github.com/yamblog/yamblog
4 Packages: @yamblog/core, @yamblog/next, @yamblog/astro, @yamblog/react, @yamblog/remark
5
6 1. Detect whether the project uses Next.js, Astro, or React/Vite.
7 2. Confirm that the detected platform is supported by Yamblog.
8 3. Verify integration steps from the official Yamblog docs or repo, then install only the correct packages.
9 4. Integrate Yamblog using project-native file locations and conventions.
10 5. Create a sample hello-world.md post in the correct posts directory.
11 6. Verify the setup by checking imports, routes/pages, and the content directory wiring.
12 7. If an import, route, or path is wrong, fix it and continue.
13 8. If the platform is unsupported, stop and explain the safest fallback instead of forcing the install.
14
15 Sample post content:
16 ---
17 title: "Hello World"
18 date: "2026-05-01"
19 author: "Your Name"
20 tags: ["general", "intro"]
21 excerpt: "My first post powered by Yamblog."
22 featured: true
23 draft: false
24 ---
25
26 # Hello World
27
28 Welcome to my blog, powered by **Yamblog**.

Need the full version? Read Prompt for LLMs.

Get started

Install it yourself. Or hand it to an agent.

No CMS, no database, no hosted service to depend on. Install, write, ship — your content lives in your repo.

Read the full guide: Getting Started for humans, Prompt for LLMs for coding agents.

Acceptance checklist
Humans get framework recipes
Agents get a self-healing prompt
Stable post IDs (blog-{slug})
RSS 2.0 & sitemap
SEO metadata and JSON-LD
Repo-owned markdown content