A fast, modern, flat-file wiki written in Go.
Built for simplicity and performance with Markdown. No database, zero maintenance.
No database. No bloat. Just Markdown, simplicity, and power.
If you're running Wiki-Go without SSL/HTTPS and experiencing login issues, you need to set allow_insecure_cookies: true
in your config.yaml
file and restart Wiki-Go. This is because:
- By default, Wiki-Go sets the "Secure" flag on cookies for security
- Browsers reject "Secure" cookies on non-HTTPS connections
- This prevents login from working properly on HTTP-only setups
Security Note: Only use this setting in development or in trusted internal networks. For public-facing wikis, always use HTTPS.
- βοΈ Full Markdown editing with emoji, Mermaid diagrams, and LaTeX math
- π Smart full-text search with highlighting and advanced filters
- π Hierarchical page structure with version history
- π₯ User management, access control, and private wiki mode
- π¬ Comments with moderation and markdown support
- β‘ Instant setup via Docker or prebuilt binaries
- π§© Custom logos, banners, shortcodes, and more
Perfect for internal documentation, personal knowledge bases, or team wikis.
- Markdown Support: Write content using Markdown syntax for rich formatting
- Emoji Shortcodes: Use emoji shortcodes like
:smile:
in your Markdown content - File Attachments: Upload and manage images and documents (supports jpg, jpeg, png, gif, svg, txt, log, csv, zip, pdf, docx, xlsx, pptx, mp4)
- Hierarchical Organization: Organize content in nested directories
- Version History: Track changes with full revision history and restore previous versions
- Document Management: Create, edit, and delete documents with a user-friendly interface
- Comments System: Enable discussions on documents with a full-featured commenting system
- Markdown in Comments: Format comments using the same Markdown syntax as in documents
- Comment Moderation: Administrators can delete inappropriate comments
- Disable Comments: Option to disable comments system-wide through the wiki settings
- Full-Text Search: Powerful search functionality with support for:
- Exact phrase matching (using quotes)
- Inclusion/exclusion of terms
- Highlighted search results
- Breadcrumb Navigation: Clear path visualization for easy navigation
- Sidebar Navigation: Quick access to document hierarchy
- Responsive Design: Works on desktop and mobile devices
- Dark/Light Theme: Toggle between dark and light modes
- Code Syntax Highlighting: Support for multiple programming languages
- Math Rendering: LaTeX math formula support via MathJax
- Diagrams: Mermaid diagram integration for creating flowcharts, sequence diagrams, etc.
- User Management: Create and manage users with different permission levels
- Admin Panel: Configure wiki settings through a web interface
- Statistics: Track document metrics and site usage
- Custom Shortcodes: Extend markdown with special shortcodes like
:::stats recenter=5:::
for additional functionality - Media Embedding: Embed images, videos, and other media in your documents
- Print Friendly: Optimized printing support for documentation
- API Access: RESTful API for programmatic access to wiki content
You can try out Wiki-Go using the live demo below. The demo site resets every hour, and all uploaded or edited content will be wiped automatically.
- π URL: https://wikigo.leomoon.com
- π€ User:
admin
- π Password:
demo123
# Pull the latest image
docker pull leomoonstudios/wiki-go
# Run with default configuration
docker run -d \
--name wiki-go \
-p 8080:8080 \
-v "$(pwd)/data:/wiki/data" \
leomoonstudios/wiki-go
Use the supplied docker-compose-http.yml
:
docker-compose -f docker-compose-http.yml up -d
This starts Wiki-Go on http://localhost:8080. Ideal when you terminate TLS at a reverse-proxy (Nginx/Traefik/Caddy). Remember to set allow_insecure_cookies: true
in data/config.yaml
if the proxyβ>container hop is plain HTTP.
Nginx reverse-proxy configuration (click to expand)
server {
listen 80;
server_name wiki.example.com;
# Redirect all HTTP to HTTPS (assuming you use Let's Encrypt on 443)
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name wiki.example.com;
ssl_certificate /etc/letsencrypt/live/wiki.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wiki.example.com/privkey.pem;
# --- proxy to Wiki-Go container running on HTTP (port 8080) ---
location / {
proxy_pass http://wiki-go:8080;
# Recommended headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
Compose example for the Nginx service:
nginx:
image: nginx:alpine
container_name: wiki-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- /etc/letsencrypt:/etc/letsencrypt:ro
depends_on:
- wiki-go
# Place certificate + key in ./ssl/
mkdir -p ssl
docker-compose -f docker-compose-ssl.yml up -d
docker-compose-ssl.yml
maps host port 443 β container port 443 and mounts your certificate/key. Enable TLS in the application config (see below).
In data/config.yaml
set:
server:
host: 0.0.0.0
port: 443 # container listens on 443
allow_insecure_cookies: false
ssl: true # enable built-in HTTPS
ssl_cert: /path/to/certificate.crt
ssl_key: /path/to/private.key
If ssl: false
(default) the app serves plain HTTP on port
(8080 by default) and you can run it behind a reverse proxy instead.
The Docker image published by GitHub exposes both 8080 and 443 so you can choose either scenario at runtime.
Download the latest release for your platform from the GitHub Releases page.
# Run the application
./wiki-go # or wiki-go.exe on Windows
Requirements:
- Go 1.21 or later
- Git
# Clone the repository
git clone https://github.com/leomoon-studios/wiki-go.git
cd wiki-go
# Build the binary
go build -o wiki-go
# Run the application
./wiki-go # or wiki-go.exe on Windows
Configuration is stored in data/config.yaml
and will be created automatically on first run with default values. You can modify this file to customize your wiki:
server:
host: 0.0.0.0
port: 8080
# When set to true, allows cookies to be sent over non-HTTPS connections.
# WARNING: Only enable this in trusted environments like a homelab
# where HTTPS is not available. This reduces security by allowing
# cookies to be transmitted in plain text.
allow_insecure_cookies: true
wiki:
root_dir: data
documents_dir: documents
title: "π Wiki-Go"
owner: wiki.example.com
notice: Copyright 2025 Β© All rights reserved.
timezone: America/Vancouver
private: false
disable_comments: false
max_versions: 10
# Maximum file upload size in MB
max_upload_size: 10
# Default language for the wiki interface (en, es, etc.)
language: en
users:
- username: admin
password: <bcrypt-hashed-password>
is_admin: true
LeoMoon Wiki-Go comes with default favicons, but you can easily replace them with your own:
-
To use custom favicons, place your files in the
data/static/
directory with the following names:favicon.ico
- Standard favicon format (used by older browsers)favicon.png
- PNG format faviconfavicon.svg
- SVG format favicon (recommended for best quality at all sizes)
-
The application will automatically detect and use your custom favicon files without requiring a restart.
SVG format is recommended for favicons as it scales well to different sizes while maintaining crisp quality.
You can add a custom logo to display in the sidebar above your wiki title:
-
Create a logo file in one of the supported formats:
logo.svg
- SVG format (recommended for best quality)logo.png
- PNG format (alternative option)
-
Place the logo file in the
data/static/
directory. -
The logo will automatically appear in the sidebar above your wiki title.
Notes:
- The logo is displayed at 120Γ120 pixels, but will maintain its aspect ratio
- SVG format is recommended for the best appearance at all screen sizes
- No configuration changes or application restart needed
- If no logo file is present, only the wiki title will be displayed
- If both logo.svg and logo.png exist, logo.svg will be used
You can add a banner image that will appear at the top of all documents:
-
Create a banner image in one of the supported formats:
banner.png
- PNG format (recommended for best quality)banner.jpg
- JPG format (alternative option)
-
Place the banner file in the
data/static/
directory. -
The banner will automatically appear at the top of all document content.
Notes:
- The banner is displayed with responsive width and a maximum height of 250px
- The banner maintains its aspect ratio while fitting different screen sizes
- No configuration changes or application restart needed
- To remove the banner, simply delete the file from the
data/static/
directory - If both banner.png and banner.jpg exist, banner.png will be used
LeoMoon Wiki-Go includes a user management system with different permission levels:
- Admin users: Can create, edit, and delete content, manage users, and change settings
- Regular users: Can view content (when in private mode)
The default admin credentials are:
- Username:
admin
- Password:
admin
It's recommended to change these credentials immediately after first login.
- Authentication: User authentication with secure password hashing
- Private Mode: Optional private wiki mode requiring login
- Admin Controls: Separate admin privileges for content management
- Log in with admin credentials
- Use the "New" button to create a new document
- Write content using Markdown syntax
- Save your document
LeoMoon Wiki-Go allows you to organize content in a hierarchical structure:
- Create directories to group related documents
- Use the move/rename feature to reorganize content when in edit mode
- Navigate through your content using the sidebar or breadcrumbs
You can attach files to any document:
- Navigate to the document and enter edit mode
- Click the "Attachments"
- Upload files using the upload button
- Use "Files" tab to insert links to files in your document
The commenting system allows users to provide feedback and engage in discussions:
- Navigate to any document
- Scroll to the comments section at the bottom
- Authenticated users can add comments using Markdown syntax
- Administrators can delete any comments
- Comments can be disabled system-wide through the admin settings panel
- Backend: Go (Golang)
- Frontend: HTML, CSS, JavaScript
- Editor: CodeMirror5 for Markdown editing
- Syntax Highlighting: Prism.js
- Diagrams: Mermaid.js
- Math Rendering: MathJax
- Simple Configuration: Easy YAML-based configuration
- File-Based Storage: Documents stored as Markdown files
- Lightweight & Fast: Built for performance
- No External Database: Self-contained with file-based storage
Wiki-Go uses a simple flat-file structure to store all content:
data/
βββ config.yaml # Main configuration file for Wiki-Go
βββ documents/ # Regular wiki documents
β βββ path/
β βββ to/
β βββ doc-name/ # Document directory named "doc-name"
β βββ document.md # The actual markdown content for "doc-name"
β
βββ versions/ # Version history storage
β βββ documents/ # Regular document versions
β β βββ path/
β β βββ to/
β β βββ doc-name/ # Timestamped version backup
β β βββ YYYYMMDDhhmmss.md
β βββ pages/ # Special pages versions
β βββ home/ # Timestamped homepage backup
β βββ YYYYMMDDhhmmss.md
β
βββ pages/ # Special pages (system pages)
β βββ home/ # Homepage (landing page)
β βββ document.md # Homepage content
β
βββ comments/ # Document comments
β βββ path/
β βββ to/
β βββ doc-name/ # Timestamped comments for "doc-name"
β βββ YYYYMMDDhhmmss_[user].md
β
βββ static/ # Static assets and customization
βββ banner.png # Global banner on all pages (optional, preferred)
βββ banner.jpg # Global banner on all pages (optional)
βββ favicon.ico # Standard favicon (optional)
βββ favicon.svg # SVG format favicon (optional, preferred)
βββ favicon.png # PNG format favicon (optional)
βββ langs/ # Translation files copied by wiki-go at startup
The flat-file structure makes it easy to back up, version control, or manipulate wiki content outside the application if needed. All content is stored as plain Markdown files, and version history follows a simple timestamped file naming convention. File attachments are stored alongside the document.md file in the same directory, making it straightforward to manage document content and its associated files together.
LeoMoon Wiki-Go is designed to be simple to deploy and use while providing powerful features for knowledge management. It's perfect for team documentation, personal knowledge bases, and collaborative projects.