A minimal personal wiki written in Go Lang
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Óscar M. Lage 8b70447e2a Update TODO 1 year ago
bin Add: Bin directory 1 year ago
model Add: Page version list 1 year ago
server Add: Page version list 1 year ago
templates Add: Page version list 1 year ago
CONTRIBUTING.md Add: CONTRIBUTING file 1 year ago
Makefile WIP: Generate changelog 1 year ago
README.md Organize docs 1 year ago
TODO.md Update TODO 1 year ago
go.mod Add: Bluemonday + Backfriday support 1 year ago
go.sum Add: Bluemonday + Backfriday support 1 year ago
main.go Add: version flag (-v) 1 year ago

README.md

Wikingo

A minimal personal wiki written in Go Lang

Features

  • Markdown -> HTML
  • Basic HTML (with Water CSS, for example)
    • requires serving static content
  • One level pages (e.g. http://host/PageName/)
    • view version (default latest)
      • old version -> restore
      • delete
    • edit
    • list history (changes -> view version)
  • Normalize URLs
    • e.g. reidrect page/ -> page

Stretch goals

  1. List pages
  • optionally filter by tag
  • pagination
  1. Search
  • query into title (e.g. PageName), tags
  • full text?
  • n results, pagination not needed
  1. Auth for protected pages
  • edit, restore
  1. Atom feed for updated pages (last n)
  2. Detect the page has changed before post
  • show warning

Stack

  • Storage: sqlite with GORM
    • easy queries
    • struct -> tables
    • auto-migrations
  • HTTP server: Echo
    • easy to use
    • routes
    • static content
    • middleware (e.g. auth, remove trailing slash)
  • Templates
  • Markdown -> HTML: Blackfriday

Routes

Method URL Notes
GET / alias for WikiHome
GET /:page(/:version)? version is optional, defaults to "latest"
GET /:page/edit protected
POST /:page/edit protected
GET /:page/history
POST /:page/restore/:version protected
DELETE /:page/:version protected
GET /list(/:tag)? tag is optional, stretch goal
POST /search stretch goal
GET /atom.xml stretch goal

:page in format CamelCase (starts uppercase)
:version is numeric
:tag is string

Model: Page

  • Page name
  • version
  • change description
  • created on
  • updated on
  • tags (e.g. tag1:tag2:tag3)
  • body

(thanks reidrac, MrReidrac)