% gwit: Human-scale Distributed Web over Git
% Ivan Vilata (Degauss) [ivan@selidor.net](mailto:ivan@selidor.net)
% Wireless Battle Mesh v15, 2023-05-11 (Calafou)

<!-- pandoc -t slidy -s -o gwit-slides.html gwit-slides.md -->

# 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

<https://gwit.site/>

# 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

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

* `alt` sections in `gwit.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](https://git.sr.ht/~ivilata/gwit-spec)
* Mailing list: [https://lists.sr.ht/~ivilata/gwit-spec](https://lists.sr.ht/~ivilata/gwit-spec)

Thanks! 👋