Attachment 'gwit-slides.html'
Downloadgwit: Human-scale Distributed Web over Git
Ivan Vilata (Degauss) ivan@selidor.net
Wireless Battle Mesh v15, 2023-05-11 (Calafou)
Some problems with the Web
- Online dependency
- Inefficient
- Increasingly complex
- A privacy nightmare
- Bloated and hostile
- Centralized and centralizing
- Unreliable content
- Fragile
A better Web
- Human-scale
- Privacy-respecting
- Offline support
- Lightweight
- Decentralized/distributed
- Authenticated content
- Long term-proof
Some alternatives to the Web
- Smolnet: simple, still online
- Decentralized Web: resilient, quite complex
- Web3: dubious incentives & resource-hungry
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
- For lightweight sites
- Minimalist
- From Git: distributed, replicated, authenticated
- Full-history site replication on access
- Offline browsing when possible
- Git ubiquity + site replication: long-term access
Lightweight decentralization
- Petnames for sites (Spritely-style)
- Site recommendations
- Host & transport independence
- Dumb HTTP server, Git forge, sneakernet, P2P…
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
- Put site files in a Git repo
- Create PGP key for site, put in the repo
- Add optional config file
- Sign commits with the site key
- 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
alt
sections ingwit.ini
/.well-known/gwit.ini
(RFC8615)
[site]
key = 0xFEDCBA98765432100123456789ABCDEF76543210
remote = https://git.example.net/foo/bar-site.git
branch = gemini-output
Lightweight reading
- Key: secure site retrieval/update
- Key: familiar Web-like navigation
- No clients yet! (soon)
(Docs and other tools missing too.)
Deliberation welcome!
Help shape the thing:
- gwit spec: https://git.sr.ht/~ivilata/gwit-spec
- Mailing list: https://lists.sr.ht/~ivilata/gwit-spec
Thanks! 👋