gwit: Human-scale Distributed Web over Git

Ivan Vilata (Degauss)

Wireless Battle Mesh v15, 2023-05-11 (Calafou)

Some problems with the Web

A better Web

Some alternatives to the Web

We need simpler solutions!

“Use git.”

“[…] we have been denying ourselves super powers for years simply by continuing to distribute our content in a fashion which makes it really impractical to grab sites wholesale, even though the bandwidth and disk space required to do this (for simple text files, anyway) has long been easy to come by.”

– Solderpunk, Low budget P2P content distribution with git

Enter gwit

gwit = Git (with PGP commit signatures) + URI format

https://gwit.site/

Lightweight decentralization

URI examples

gwit://0x0123456789ABCDEF0123456789ABCDEFFEDCBA98/posts.html#latest
gwit://⁣│⁣Carol's blog⁣│⁣/test/page.gmi
gwit://⁣┊☞⁣Bob's site⁣⇒⁣Meet Carol⁣┊⁣/gemlog/
gwit://0x0123456789ABCDEF0123456789ABCDEFFEDCBA98:9c359d88d4882d17d673a7fb89c9af8349a4fb7c/breaking-news.gmi

Easy publication

  1. Put site files in a Git repo
  2. Create PGP key for site, put in the repo
  3. Add optional config file
  4. Sign commits with the site key
  5. Publish the repo anywhere

Support existing static Web & Gemini sites.

Be forgiving with author changing mind.

Example gwit.ini

[site]
name = Foo Bar
title = Foo Bar: the Bar for all your Foos
title-fr = Le Bar de Foo : le Bar pour tous vos Foos
desc = "It's the Foo Bar!\n\nFind your best Foos here."
desc-fr = "C'est le Bar de Foo !\n\nTrouvez vos meilleurs Foos ici."
license = CC-BY
root = output
index = index.gmi
remote = https://git.example.net/foo/bar-site.git
branch = gemini-output

[remote "hut-mirror"]
url = https://hut.example.org/foo-mirror/bar-site

[alt "gemini"]
base = gemini://foo.example.net/bar-site/

[link "Someone's site"]
key = 0x0123456789ABCDEF0123456789ABCDEFFEDCBA98
remote = https://hub.example.com/someone/my-gwit-site.git
branch = published

Web/Gemini to gwit

[site]
key = 0xFEDCBA98765432100123456789ABCDEF76543210
remote = https://git.example.net/foo/bar-site.git
branch = gemini-output

Lightweight reading

(Docs and other tools missing too.)

Deliberation welcome!

Help shape the thing:

Thanks! 👋