Skip to content

jlelse/GoBlog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,115 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoBlog

GoBlog is a single-user, multi-blog platform written in Go. One binary, SQLite database, minimal dependencies. IndieWeb (IndieAuth, Micropub, Webmention) and ActivityPub support for Fediverse integration.

Philosophy

  • Opt-in features: most features disabled by default, enable only what you need
  • Markdown-first: write in Markdown with optional YAML front matter
  • No themes: customize through configuration, plugins, and custom CSS
  • Docker-friendly: designed to run in containers with simple volume mounts
  • Full ownership: your content, your database, your server

Quick Start

Docker (Recommended)

Create a docker-compose.yml:

services:
  goblog:
    container_name: goblog
    image: ghcr.io/jlelse/goblog:latest
    restart: unless-stopped
    volumes:
      - ./config:/app/config
      - ./data:/app/data
    ports:
      - "8080:8080"
    environment:
      - TZ=Europe/Berlin

Create minimal config at ./config/config.yml:

server:
  publicAddress: http://localhost:8080

Start:

docker-compose up -d

Build from Source

git clone https://github.com/jlelse/GoBlog.git
cd GoBlog
go build -tags=linux,libsqlite3,sqlite_fts5,gomailnotpl -o GoBlog
mkdir -p config data
echo 'server:
  publicAddress: http://localhost:8080' > config/config.yml
./GoBlog --config ./config/config.yml

First Steps

  1. Check the logs: On first startup, GoBlog generates a random password:
    Generated initial password for first-time setup. username=admin password=AbCdEfGhIjKlMnOpQrSt
    
  2. Open your browser: http://localhost:8080
  3. Log in: /login with username admin and the generated password
  4. Change your password: Go to /settings
  5. Create a post: Go to /editor

Alternatively, set credentials before first run:

./GoBlog --config ./config/config.yml setup --username admin --password "your-secure-password"

Data Storage

All data lives in the data directory:

  • data/db.sqlite: SQLite database
  • data/media/: Uploaded media (served at /m/)
  • data/profileImage: Profile image

Backup the data directory regularly.


Documentation

  • Configuration: YAML configuration, HTTPS, Docker, data storage
  • Settings UI: Blog, user, and security settings configurable via the web UI
  • Features: Writing posts, editor, comments, reactions, search, media, feeds, and more
  • IndieWeb & Fediverse: IndieAuth, Webmention, ActivityPub, Bluesky
  • Plugins: Plugin system, built-in plugins, creating custom plugins
  • CLI Commands: Server, setup, health check, export, follower management
  • Advanced Topics: Hooks, redirects, multiple blogs, performance tuning, troubleshooting
  • Testing: Test suite, integration tests, benchmarks

Key Features

Core

  • Markdown posts with YAML front matter
  • Multiple blogs under one installation
  • Sections, taxonomies, and custom path templates
  • Web editor with live preview and formatting toolbar
  • Media uploads with optional image optimization (imgproxy)
  • Full-text search (SQLite FTS5)
  • RSS, Atom, and JSON feeds
  • XML sitemap and robots.txt

IndieWeb & Fediverse

  • IndieAuth: Use your blog as your identity
  • Micropub: Create/update/delete posts via API
  • Webmention: Send and receive webmentions automatically
  • ActivityPub: Publish to Mastodon, Pleroma, and other Fediverse platforms
  • Bluesky/ATProto: Post links to Bluesky

Optional Features (Opt-in)

Feature Description
Comments Via Webmention or ActivityPub
Reactions Emoji reactions on posts
Search Full-text search (SQLite FTS5)
Photos Gallery of all posts with images
Map Posts with locations/GPX tracks on a map
Blogroll Display blogs you follow via OPML
Statistics Posts per year and monthly chart
Random Post Redirect to a random post
On This Day Posts from this day in previous years
Contact Form SMTP-based contact form
Text-to-Speech Google Cloud TTS or Mistral audio generation
Notifications Ntfy, Telegram, or Matrix push notifications
Short URLs Custom short domain for compact links
Image Optimization Automatic AVIF/JPEG/PNG variants via imgproxy
Tor Hidden Service .onion address
IndexNow Notify search engines of new content
Private Mode Login-only access
Announcement Banner Site-wide banner for announcements

Built-in: RSS, Atom, JSON feeds, XML sitemap, robots.txt, microformats2 markup.


Configuration

Configuration is done via a YAML file (default: ./config/config.yml).

server:
  publicAddress: http://localhost:8080

All other settings have sensible defaults. See example-config.yml for the full reference and docs/configuration.md for detailed explanations.

Blog title, description, sections, and many other settings are configured via the Settings UI (/settings), not YAML.


Plugins

GoBlog has a runtime plugin system (based on Yaegi). See docs/plugins.md for full details.

Built-in plugins: Custom CSS, Syndication Links, Webrings, AI Summary, AI Image Captions, Snow Animation, AI Bot Block, Image Tooltips, Telegram Bot, MCP Server.


Administration

Quick Reference

Path Purpose
/login, /logout Authentication
/settings User and blog settings
/editor Post editor
/webmention Manage webmentions
/comment Manage comments
/notifications View notifications
/reload Reload router

CLI Commands

./GoBlog --config ./config/config.yml                              # Start server
./GoBlog --config ./config/config.yml setup --username admin --password "pass"  # Setup credentials
./GoBlog --config ./config/config.yml healthcheck                  # Health check
./GoBlog --config ./config/config.yml check --ignore-403           # Check external links
./GoBlog --config ./config/config.yml export ./exported            # Export posts

See docs/cli.md for full reference.


Getting Help


License

MIT License. See LICENSE for details.

About

Simple blogging system written in Go

Topics

Resources

License

Stars

276 stars

Watchers

7 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors