AgBlogger
A self-hosted, Markdown-first blogging platform. Write in any editor, organize with labels, cross-post to social media, and synchronize between your computer and server.
Features
- Write in Markdown — posts are Markdown
.mdfiles you can create in any text editor. AgBlogger provides a convenient Web editor with instant preview. - Organize with labels — group your posts with labels and browse them in a visual label map.
- Share to social media — publish a post to Bluesky, Mastodon, X (Twitter), and Facebook in one click.
- Search everything — find any post instantly by searching its title, content, or labels.
- Sync from your computer — keep a folder on your computer in sync with your blog, so you always have a local backup.
- Track analytics — see view counts on posts and browse traffic stats in the admin dashboard.
Quick start
Deploy
Requirements: just and uv on your computer, Docker on your server.
Download and extract the latest release source from the releases page, then:
cd agblogger-X.Y.Z
just deploy # interactive setup wizard
rsync -av dist/deploy/ user@your-server:~/agblogger/ # copy bundle to server
Then on the server:
cd ~/agblogger
bash setup.sh # starts everything, including HTTPS
Your blog is live at https://your-domain. Log in with the admin credentials you provided during setup.
See the deployment guide for managing the server, updates, and alternative deployment methods.
Sync tool
The sync tool keeps a local folder of Markdown files in sync with your blog. Download it from the releases page.
agblogger init --dir ~/blog --server https://your-server.com # one-time setup
Write posts as index.md files in dedicated post folders inside the posts/ folder, e.g., in posts/my-first-post/index.md:
---
labels:
- "#cooking"
---
# My First Post
Post content here. The title is extracted from the first `#` heading.
Dates are filled in automatically on sync.
Then sync:
agblogger status --dir ~/blog # preview changes
agblogger sync --dir ~/blog # push and pull
See the sync tool guide for post format details, conflict handling, and authentication.
Cross-posting
Connect social accounts under Admin → Social in the web UI, then cross-post from any published post’s editor. See the cross-posting guide.
Analytics
View traffic stats and per-post view counts under Admin → Analytics. Powered by a self-hosted, cookie-free GoatCounter sidecar. See the analytics guide.