aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: e316d77cec56e40d86d014e0bb8dc8e3b6372bf1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Kela

A new federation protocol. Kela combines the best ideas from email, IPFS, BitTorrent, ActivityPub, Nostr, and Yggdrasil


## Motivations

The web sucks, and no one knows how to fix it. The most successful decentralized web protocol, ActivityPub (or blockchains, if they actually worked), suffers from many problems, such as not being able to easily move accounts between servers, making it vulnerable to server shutdowns.


## Ideals

Kela strives for these ideals:
- **Simple**: Many decentralized web protocols are horrendously complex (I'm looking at you, Urbit!). Kela is simple and can be taught to someone in 30 minutes.
- **Powerful**:
- **Fast**: Kela uses aggressive caching and minimizes the number of hops between user-to-user connections when possible.
- **Secure**:


## Identity

ActivityPub uses usernames plus the instance URL (for instance, `billiam@example.com`) as identifiers. This ties your identity strongly to a server, but it's actually not necessary. In Kela, each user is still associated with one (or more) servers, but public keys are identifiers. Each user has a public and private key, and when you want to find a user's server, you query a [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table) formed by all servers. This returns a string containing their server's URL, signed with that user's private key to prevent tampering.

Your account can be associated with multiple servers, and your data is replicated between them. To prevent sync conflicts, you designate one server as your main server, which is a single source of truth that replicates data to all your other servers.

Because public keys are annoying to read and type, Kela uses a friendly [petname](http://www.skyhunter.com/marcs/petnames/IntroPetNames.html) [system](https://spritelyproject.org/news/petname-systems.html) so users can assign human-readable names to public keys.


## Applications

You can tunnel HTTP (no TLS needed!) over Kela to host websites.


## Storage

Kela is also a decentralized storage system. You can store data on your server, and it will be replicated between them.


## Issues

Coupling identity closely to public keys makes verifying message integrity easy. However, if your private key leaks, you are screwed.


## History

A [few core ideas](https://social.exozy.me/@ta180m/108201791226634267) for Kela were braindumped by [Anthony Wang](https://a.exozy.me) on the fediverse in April 2022 and written down in a [repository](https://git.exozy.me/a/Kela/src/commit/a2561afe554382ae4ba9fcd9beb276497127dc3c). A few months later, Anthony Wang and [Alek Westover](https://awestover.github.io) developed a very basic [prototype](https://git.exozy.me/a/HackMIT) during [HackMIT 2022](https://hackmit.org). The name "Kela" comes from spelling "Alek" backwards.