A lightweight CLI for creating, previewing, and building blogs. Create with one command, write in MDX, push to Git — your blog is truly yours.
- Zero boilerplate — no
package.json, nonode_modules, just content and config - MDX powered — use React components in your posts
- Multi-language — built-in i18n with directory-based routing
- AI-ready — auto-generates
llms.txt,skill.mdfor LLM discoverability - SEO built-in — RSS feed, sitemap, robots.txt out of the box
- Agent friendly — generates a clean document structure, perfect for coding agents like Codex and Claude Code to edit directly
- Launch fast — deploy your blog quickly with the CitePo platform
npx citepo init my-blog
cd my-blog
npx citepo devSend this line to Claude Code, Codex, OpenClaw, Cursor or any agent that can run commands:
Set up CitePo for me: https://citepo.com/agent-setup.md
The agent installs the CLI and its skill, creates the blog, writes the first post with you and gets it published. If you already have a CitePo blog, it signs you in and brings that blog onto your computer instead. See docs/agent-setup.md.
For convenience, install citepo globally to use the citepo command from any directory:
# Using npm
npm install -g citepo
# Using pnpm
pnpm install -g citepo
# Using Yarn
yarn global add citepo| Command | Description |
|---|---|
citepo init [dir] |
Create a blog (--name, --lang, --langs, --theme, --yes) |
citepo dev |
Start the local preview server |
citepo build |
Build the static site (images are compressed automatically) |
citepo check |
Check posts, images, links and sizes without building |
citepo post new | list |
Create a post with frontmatter filled in; list posts and URLs |
citepo tag list |
List tags and spellings that differ only in case |
citepo image add | optimize |
Add a compressed image to a post; shrink large images in place |
citepo docs [topic] |
Writing reference: frontmatter, components, config, publish |
citepo skill install | update |
Install the citepo skill for Claude Code, Codex, OpenClaw and more |
citepo auth login | status |
Sign in to CitePo by approving a code in the browser |
citepo site create | connect | index |
Create a site, connect its GitHub repository, submit new pages to search engines |
citepo deploy wait | logs |
Follow the build of a push until it is live, or see why it failed |
citepo doctor |
Check Node.js, citepo, the skill, git and the current folder |
citepo upgrade |
Upgrade citepo with the package manager that installed it |
Every command accepts --json and prints a single JSON document; exit codes are 0 for
success, 1 for errors and 2 for warnings only. citepo new still works as an alias of
citepo init.
Tip:
ctpis available as a short alias —npx ctp devis equivalent tonpx citepo dev.
A CitePo blog is a minimal Git repository:
my-blog/
├── blog.json # Blog configuration
├── style.css # Custom styles (overrides theme)
├── content/ # Blog posts (MDX)
│ ├── hello-world.mdx
│ └── another-post.mdx
├── asset/ # Static assets
└── .gitignore
You can deploy your CitePo blog anywhere that serves static files. The easiest option is CitePo — connect your GitHub repo, and every push triggers an automatic build and deploy.
- Push your blog to a GitHub repository
- Sign in at citepo.com and create a new site
- Connect your GitHub repo and select the branch
- Done — your blog is live at
yoursite.citepo.app
CitePo also supports custom domains and subdirectory mounting (e.g. yourdomain.com/blog).
For other platforms, run citepo build and upload the output directory to any static hosting service (Vercel, Netlify, Cloudflare Pages, etc.).
Full documentation: docs.citepo.com
Apache License 2.0 — see LICENSE for details.