├── .gitignore
├── README.md
├── index.html
├── index.js
├── package.json
└── style.css
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .*.swp
3 | bundle.js
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # hyperpad
2 |
3 | > A peer-to-peer collaborative text editor for humans and communities.
4 |
5 | ## What is it?
6 |
7 | Hyperpad is a free, open source, peer-to-peer text editor for people and their
8 | communities. Authors control who gets access, and data is hosted by the peers
9 | who are interested in it.
10 |
11 | ## Current Status
12 |
13 | I've paused work on the web client in favour of building out an Electron-based
14 | native client, [hyperpad-desktop](https://github.com/noffle/hyperpad-desktop).
15 | This lets me dodge some difficult problems around web tech (indexed-db
16 | performance; webrtc) and focus on making the core
17 | [hyper-string](https://github.com/noffle/hyper-string) primitive robust and
18 | durable.
19 |
20 | ## Why another collaborative editor?
21 |
22 | Some of the most popular collaborative document editors today include [Google
23 | Docs](https://www.google.com/docs/about/) and [Etherpad](http://etherpad.org/).
24 |
25 | Google Docs gets the fundamental piece right: real-time text editing. However,
26 | all of your data is stored by and readable by Google, Inc. It is closed source
27 | proprietary software.
28 |
29 | Etherpad takes this a step further in multiple directions: it is [open
30 | source](https://github.com/ether/etherpad-lite), and can be deployed by anyone
31 | on any server. This lets any individual or group run etherpad and keep ownership
32 | and privacy to their data.
33 |
34 | Etherpad is most of the way there, but Hyperpad goes the rest of the way in two
35 | crucial aspects:
36 |
37 | ### 1. No servers required
38 |
39 | In peer-to-peer networks, all users are equal.
40 |
41 | Nobody needs the monetary resources and technical know-how to run a server.
42 |
43 | Unlike centralized services, you own each pad you create. Turn on encryption,
44 | and your data becomes unreadable to anyone but those you grant access to. There
45 | are no service providers to go out of business and lose your data.
46 |
47 | Everything is client-side HTML and Javascript: you can just save the Hyperpad
48 | website and run it locally on your computer, and it will function just fine!
49 |
50 | ### 2. Works great offline
51 |
52 | Not everybody in the world is online. Among those who are, many do not have
53 | consistent, broadband connections. People-respecting software must work
54 | excellently offline; no exceptions.
55 |
56 | Forgetting this is the *The Silicon Valley Privilege* (TODO: link to article).
57 |
58 | Hyperpad uses an *eventually consistent* data structure called
59 | [hyperlog](https://github.com/mafintosh/hyperlog), which operates happily
60 | offline and will sync with other users whenever a network connection is
61 | available.
62 |
63 | ## How does it work?
64 |
65 | Hyperpad relies on the browser itself for storing documents, and powerful
66 | peer-to-peer primitives like
67 | [WebRTC](https://developer.mozilla.org/en-US/docs/Web/Guide/API/WebRTC) and
68 | [hyperlog](https://github.com/mafintosh/hyperlog) to organize and transfer
69 | documents to those with access.
70 |
71 | The act of having a document open in your browser immediately lets a user act
72 | as a host for that document's data, sharing it in real-time with others with
73 | others. In the case that a user is offline, they can still freely make edits
74 | locally, which will propagate to others storing the document when they
75 | re-establish a network connection.
76 |
77 | Hyperpad is built in a modular fashion atop a set of do-one-thing-well modules:
78 |
79 | - [hyper-textarea](https://github.com/noffle/hyper-textarea): back a textarea
80 | with a hyper-string for conflict-free p2p replication
81 | - [hyper-string](https://github.com/noffle/hyper-string): a conflict-free p2p
82 | string data structure
83 | - [textarea-op-stream](https://github.com/noffle/textarea-op-stream): readable
84 | stream of a textarea's inserts and deletes
85 | - lots of great modules from [mafintosh](https://github.com/mafintosh/):
86 | [hyperlog](https://github.com/mafintosh/hyperlog),
87 | [signalhub](https://github.com/mafintosh/signalhub), and others!
88 |
89 | ## Coming Soon(tm)
90 |
91 | - [hyperpad-desktop](https://github.com/noffle/hyperpad-desktop)
92 | - ~Faster operations (batching in the `hyper-string` layer)~
93 | - Encryption (with separate read/write privileges)
94 | - Secure app delivery (maybe [hyperboot](https://github.com/substack/hyperboot))
95 |
96 | ## License
97 |
98 | [ISC](https://en.wikipedia.org/wiki/ISC_license)
99 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |