GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - jlelse/GoBlog: Simple blogging system written in Go

BranchesTags
Open more actions menu

Latest commit

 

History

1,177 Commits
1,177 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
.vscode
.vscode
 
 
dbmigrations
dbmigrations
 
 
docs
docs
 
 
hlsjs
hlsjs
 
 
leaflet
leaflet
 
 
logo
logo
 
 
original-assets
original-assets
 
 
pkgs
pkgs
 
 
plugins
plugins
 
 
strings
strings
 
 
templates/assets
templates/assets
 
 
testdata
testdata
 
 
.gitignore
.gitignore
 
 
.golangci.yml
.golangci.yml
 
 
AGENTS.md
AGENTS.md
 
 
Dockerfile
Dockerfile
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
acme.go
acme.go
 
 
acme_integration_test.go
acme_integration_test.go
 
 
acme_test.go
acme_test.go
 
 
activityPub.go
activityPub.go
 
 
activityPubRemoteFollow.go
activityPubRemoteFollow.go
 
 
activityPubSending.go
activityPubSending.go
 
 
activityPubTools.go
activityPubTools.go
 
 
activityPubTools_test.go
activityPubTools_test.go
 
 
activityPub_integration_test.go
activityPub_integration_test.go
 
 
activityPub_test.go
activityPub_test.go
 
 
activityStreams.go
activityStreams.go
 
 
activityStreams_test.go
activityStreams_test.go
 
 
altAddress_test.go
altAddress_test.go
 
 
app.go
app.go
 
 
atproto.go
atproto.go
 
 
authDb.go
authDb.go
 
 
authDb_test.go
authDb_test.go
 
 
authentication.go
authentication.go
 
 
authentication_test.go
authentication_test.go
 
 
blogroll.go
blogroll.go
 
 
blogroll_test.go
blogroll_test.go
 
 
blogstats.go
blogstats.go
 
 
blogstats_test.go
blogstats_test.go
 
 
bundle-assets.sh
bundle-assets.sh
 
 
bundleHashes.go
bundleHashes.go
 
 
cache.go
cache.go
 
 
cacheRecorder.go
cacheRecorder.go
 
 
cache_test.go
cache_test.go
 
 
captcha.go
captcha.go
 
 
captcha_test.go
captcha_test.go
 
 
check.go
check.go
 
 
checkMajorUpdates.sh
checkMajorUpdates.sh
 
 
check_test.go
check_test.go
 
 
comments.go
comments.go
 
 
commentsAdmin.go
commentsAdmin.go
 
 
commentsEditor.go
commentsEditor.go
 
 
commentsEditor_test.go
commentsEditor_test.go
 
 
comments_test.go
comments_test.go
 
 
config.go
config.go
 
 
config_test.go
config_test.go
 
 
contact.go
contact.go
 
 
contact_test.go
contact_test.go
 
 
cors.go
cors.go
 
 
database.go
database.go
 
 
databaseHooks.go
databaseHooks.go
 
 
databaseMigrations.go
databaseMigrations.go
 
 
database_test.go
database_test.go
 
 
docker-compose.dev.yml
docker-compose.dev.yml
 
 
editor.go
editor.go
 
 
editorFiles.go
editorFiles.go
 
 
editorLinks.go
editorLinks.go
 
 
editorLinks_test.go
editorLinks_test.go
 
 
editorWebsocket.go
editorWebsocket.go
 
 
editorWebsocket_test.go
editorWebsocket_test.go
 
 
editor_test.go
editor_test.go
 
 
errors.go
errors.go
 
 
errors_test.go
errors_test.go
 
 
example-config.yml
example-config.yml
 
 
export.go
export.go
 
 
export_test.go
export_test.go
 
 
externalVideo.go
externalVideo.go
 
 
externalVideo_test.go
externalVideo_test.go
 
 
feeds.go
feeds.go
 
 
feeds_test.go
feeds_test.go
 
 
geo.go
geo.go
 
 
geoMap.go
geoMap.go
 
 
geoTiles.go
geoTiles.go
 
 
geoTiles_test.go
geoTiles_test.go
 
 
geoTrack.go
geoTrack.go
 
 
geoTrack_test.go
geoTrack_test.go
 
 
geo_test.go
geo_test.go
 
 
go.mod
go.mod
 
 
go.sum
go.sum
 
 
healthcheck.go
healthcheck.go
 
 
healthcheck_test.go
healthcheck_test.go
 
 
hooks.go
hooks.go
 
 
http.go
http.go
 
 
httpClient.go
httpClient.go
 
 
httpClient_test.go
httpClient_test.go
 
 
httpFs.go
httpFs.go
 
 
httpFs_test.go
httpFs_test.go
 
 

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
  • Login with username/password and 2FA (TOTP), WebAuthn (passkeys), or OIDC (OpenID Connect)

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, SocialSpec, 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

  • Repository: github.com/jlelse/GoBlog
  • Example config: example-config.yml
  • Matrix chat: GoBlog Matrix room
  • Issues: Report bugs on GitHub

License

MIT License. See LICENSE for details.

About

Simple blogging system written in Go

goblog.app

Topics

blogcmsgogolang

Resources

Readme
MIT license
Activity

Stars

283 stars

Watchers

7 watching

Forks

34 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.