Write, edit, and publish your blog without ever leaving your terminal!
See the codeA fast, lightweight static site generator built in Rust for creating and managing blogs. Write in Markdown, preview with a built-in terminal editor, and deploy to GitHub Pages with a single command.

Get up and running in 5 minutes:
# 1. Install Blogr
cargo install blogr-cli
# 2. Create your blog
blogr init my-blog
cd my-blog
# 3. Create your first post
blogr new "Hello World"
# 4. Preview your blog
blogr serve
# Opens http://localhost:3000
# 5. Deploy to GitHub Pages
export GITHUB_TOKEN=your_github_token
blogr deploy
For a personal website instead of a blog:
blogr init --personal my-portfolio
Requirements:
Install from crates.io (recommended):
cargo install blogr-cli
Install from source:
git clone https://github.com/bahdotsh/blogr.git
cd blogr
cargo install --path blogr-cli
Two Site Types
Content Creation
Site Generation
Development
Deployment
Newsletter System (optional)
For detailed information about specific features, see the following documentation:
Project Management
blogr init my-blog # Create new blog
blogr init --personal my-portfolio # Create personal website
blogr project info # Show project details
Content Management
blogr new "My Post Title" # Create new post
blogr list # List all posts
blogr edit my-post-slug # Edit existing post
Development & Deployment
blogr serve # Start dev server
blogr build # Build static site
blogr deploy # Deploy to GitHub Pages
Configuration
blogr config edit # Interactive config editor
blogr theme set minimal-retro # Switch theme
When you create a new blog, Blogr generates this structure:
my-blog/
├── blogr.toml # Configuration file
├── posts/ # Markdown posts
│ ├── welcome.md # Sample post
│ └── about.md # About page
├── static/ # Static files (images, CSS, JS)
│ ├── images/
│ ├── css/
│ └── js/
└── .github/workflows/ # GitHub Actions (auto-generated)
└── deploy.yml
Key files:
blogr.toml - Your site configurationposts/ - All your blog posts in Markdownstatic/ - Images, custom CSS, and JavaScript files.github/workflows/ - Automatic deployment setupEdit blogr.toml to configure your site. Use blogr config edit for an interactive editor.
Basic Configuration:
[blog]
title = "My Blog"
author = "Your Name"
description = "My thoughts and ideas"
base_url = "https://yourusername.github.io/blog"
[theme]
name = "minimal-retro" # or "dark-minimal" for personal sites
[github]
username = "yourusername"
repository = "blog"
[site]
site_type = "blog" # or "personal" for portfolio sites
[math]
enabled = true # Enable MathJax for LaTeX math rendering
For detailed configuration options, see the Configuration Guide.
Posts use Markdown with YAML frontmatter:
---
title: "My Blog Post"
date: "2024-01-15"
author: "Your Name"
description: "Brief description"
tags: ["rust", "programming"]
status: "published"
slug: "my-blog-post"
---
# My Blog Post
Your content goes here in **Markdown**.
Frontmatter Fields:
title - Post title (required)date - Publication date (auto-generated if not provided)author - Author name (uses blog author if not provided)description - Post description for SEOtags - Array of tags for categorizationstatus - "published" or "draft"slug - URL slug (auto-generated from title if not provided)featured - Boolean, mark post as featured (default: false)external_url - URL for external posts (appears in listings but links externally)For personal mode (--personal), use content.md with frontmatter to define your site. See the Themes Guide for detailed examples.
Blogr includes a powerful client-side full-text search feature powered by MiniSearch. Search is enabled by default and works entirely in the browser without requiring a server.
Features:
/ to focus search)For detailed search configuration and troubleshooting, see the Search Feature Guide.
Blogr supports LaTeX math expressions via MathJax 3. Math rendering is opt-in — add the following to your blogr.toml:
[math]
enabled = true
Use standard LaTeX delimiters in your Markdown:
$E = mc^{2}$ renders as inline math$$\sum_{i=1}^{n} i$$ renders as a centered block equationBlogr's markdown parser converts $...$ to \(...\) and $$...$$ to \[...\], which MathJax then renders client-side.
Blogr comes with 8 built-in themes designed for different purposes:
Blog Themes:
Personal Website Themes:
For detailed theme information, customization options, and setup instructions, see the Themes Guide.
Blogr includes a comprehensive email newsletter system that allows you to collect subscribers, manage them through an approval interface, and send newsletters based on your blog posts or custom content.
Features:
For detailed newsletter setup, configuration, and usage, see the Newsletter System Guide.
GitHub Pages (recommended)
Set up GitHub token:
export GITHUB_TOKEN=your_token
Get a token at https://github.com/settings/tokens (needs repo and workflow scopes)
Deploy:
blogr deploy
Your blog will be available at https://yourusername.github.io/repository
Custom Domains
blogr config domain set yourdomain.comManual Deployment
blogr build
# Copy contents of `dist/` folder to your web server
Build from source:
git clone https://github.com/bahdotsh/blogr.git
cd blogr
cargo build --release
Run tests:
cargo test
Code structure:
blogr-cli/ - Main CLI applicationblogr-themes/ - Theme systemContributions are welcome! See CONTRIBUTING.md for guidelines.
Areas to help:
New Features:
New Features:
blog link in social linkstitle and description from content.md instead of blogr.tomlImprovements:
Themes:
See blogr-themes/README.md for detailed theme changelog.
MIT License - see LICENSE for details.
Built with Rust 🦀
Rust
68.2%
HTML
17.7%
CSS
12.2%
JavaScript
1.6%
Write, edit, and publish your blog without ever leaving your terminal!
See the codeA fast, lightweight static site generator built in Rust for creating and managing blogs. Write in Markdown, preview with a built-in terminal editor, and deploy to GitHub Pages with a single command.

Get up and running in 5 minutes:
# 1. Install Blogr
cargo install blogr-cli
# 2. Create your blog
blogr init my-blog
cd my-blog
# 3. Create your first post
blogr new "Hello World"
# 4. Preview your blog
blogr serve
# Opens http://localhost:3000
# 5. Deploy to GitHub Pages
export GITHUB_TOKEN=your_github_token
blogr deploy
For a personal website instead of a blog:
blogr init --personal my-portfolio
Requirements:
Install from crates.io (recommended):
cargo install blogr-cli
Install from source:
git clone https://github.com/bahdotsh/blogr.git
cd blogr
cargo install --path blogr-cli
Two Site Types
Content Creation
Site Generation
Development
Deployment
Newsletter System (optional)
For detailed information about specific features, see the following documentation:
Project Management
blogr init my-blog # Create new blog
blogr init --personal my-portfolio # Create personal website
blogr project info # Show project details
Content Management
blogr new "My Post Title" # Create new post
blogr list # List all posts
blogr edit my-post-slug # Edit existing post
Development & Deployment
blogr serve # Start dev server
blogr build # Build static site
blogr deploy # Deploy to GitHub Pages
Configuration
blogr config edit # Interactive config editor
blogr theme set minimal-retro # Switch theme
When you create a new blog, Blogr generates this structure:
my-blog/
├── blogr.toml # Configuration file
├── posts/ # Markdown posts
│ ├── welcome.md # Sample post
│ └── about.md # About page
├── static/ # Static files (images, CSS, JS)
│ ├── images/
│ ├── css/
│ └── js/
└── .github/workflows/ # GitHub Actions (auto-generated)
└── deploy.yml
Key files:
blogr.toml - Your site configurationposts/ - All your blog posts in Markdownstatic/ - Images, custom CSS, and JavaScript files.github/workflows/ - Automatic deployment setupEdit blogr.toml to configure your site. Use blogr config edit for an interactive editor.
Basic Configuration:
[blog]
title = "My Blog"
author = "Your Name"
description = "My thoughts and ideas"
base_url = "https://yourusername.github.io/blog"
[theme]
name = "minimal-retro" # or "dark-minimal" for personal sites
[github]
username = "yourusername"
repository = "blog"
[site]
site_type = "blog" # or "personal" for portfolio sites
[math]
enabled = true # Enable MathJax for LaTeX math rendering
For detailed configuration options, see the Configuration Guide.
Posts use Markdown with YAML frontmatter:
---
title: "My Blog Post"
date: "2024-01-15"
author: "Your Name"
description: "Brief description"
tags: ["rust", "programming"]
status: "published"
slug: "my-blog-post"
---
# My Blog Post
Your content goes here in **Markdown**.
Frontmatter Fields:
title - Post title (required)date - Publication date (auto-generated if not provided)author - Author name (uses blog author if not provided)description - Post description for SEOtags - Array of tags for categorizationstatus - "published" or "draft"slug - URL slug (auto-generated from title if not provided)featured - Boolean, mark post as featured (default: false)external_url - URL for external posts (appears in listings but links externally)For personal mode (--personal), use content.md with frontmatter to define your site. See the Themes Guide for detailed examples.
Blogr includes a powerful client-side full-text search feature powered by MiniSearch. Search is enabled by default and works entirely in the browser without requiring a server.
Features:
/ to focus search)For detailed search configuration and troubleshooting, see the Search Feature Guide.
Blogr supports LaTeX math expressions via MathJax 3. Math rendering is opt-in — add the following to your blogr.toml:
[math]
enabled = true
Use standard LaTeX delimiters in your Markdown:
$E = mc^{2}$ renders as inline math$$\sum_{i=1}^{n} i$$ renders as a centered block equationBlogr's markdown parser converts $...$ to \(...\) and $$...$$ to \[...\], which MathJax then renders client-side.
Blogr comes with 8 built-in themes designed for different purposes:
Blog Themes:
Personal Website Themes:
For detailed theme information, customization options, and setup instructions, see the Themes Guide.
Blogr includes a comprehensive email newsletter system that allows you to collect subscribers, manage them through an approval interface, and send newsletters based on your blog posts or custom content.
Features:
For detailed newsletter setup, configuration, and usage, see the Newsletter System Guide.
GitHub Pages (recommended)
Set up GitHub token:
export GITHUB_TOKEN=your_token
Get a token at https://github.com/settings/tokens (needs repo and workflow scopes)
Deploy:
blogr deploy
Your blog will be available at https://yourusername.github.io/repository
Custom Domains
blogr config domain set yourdomain.comManual Deployment
blogr build
# Copy contents of `dist/` folder to your web server
Build from source:
git clone https://github.com/bahdotsh/blogr.git
cd blogr
cargo build --release
Run tests:
cargo test
Code structure:
blogr-cli/ - Main CLI applicationblogr-themes/ - Theme systemContributions are welcome! See CONTRIBUTING.md for guidelines.
Areas to help:
New Features:
New Features:
blog link in social linkstitle and description from content.md instead of blogr.tomlImprovements:
Themes:
See blogr-themes/README.md for detailed theme changelog.
MIT License - see LICENSE for details.
Built with Rust 🦀
Rust
68.2%
HTML
17.7%
CSS
12.2%
JavaScript
1.6%