Skip to content

Commit 68a2d9d

Browse files
committed
Add READMEs with documentation links to all published packages
1 parent 3c1d8d9 commit 68a2d9d

7 files changed

Lines changed: 338 additions & 5 deletions

File tree

.yarn/versions/1ad9f877.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
releases:
2+
"@pitter-patter/collab-client": patch
3+
"@pitter-patter/presence-client": patch
4+
5+
declined:
6+
- "@pitter-patter/collab-server"
7+
- "@pitter-patter/comments-client"
8+
- "@pitter-patter/comments-server"
9+
- "@pitter-patter/presence-server"
10+
- "@pitter-patter/refs"
11+
- "@pitter-patter/version-history-client"

README.md

Lines changed: 105 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,109 @@
1-
# Pitter Patter
1+
<p align="center">
2+
<a href="https://pitter-patter.dev/"><img src="https://raw.githubusercontent.com/handlewithcarecollective/pitter-patter/refs/heads/main/readme-assets/pitter-patter-logo.png" alt="" height="75"/></a>
3+
</p>
24

3-
A React ProseMirror toolkit that works _with_ you.
5+
<h1 align="center">Pitter Patter</h1>
6+
7+
<p align="center">
8+
<strong>An open source collaborative rich editing toolkit.</strong>
9+
</p>
10+
11+
## What is Pitter Patter?
12+
13+
Pitter Patter is an open source collaborative rich text editing toolkit, built with React and
14+
ProseMirror.
15+
16+
## Who builds it?
17+
18+
That would be us, [Handle with Care](https://handlewithcare.dev/). We’re a cooperatively owned
19+
product development collective. That means that we don’t have employees or managers — we’re all
20+
equal owners and have equal decision-making power.
21+
22+
We’re funded in two ways:
23+
24+
1. Companies pay us to help them with their collaborative rich text editors, or other complex
25+
software.
26+
2. Sponsors contribute money to directly support the development of Pitter Patter and our other open
27+
source software.
28+
29+
## What is it?
30+
31+
Pitter Patter is a suite of open source libraries for building collaborative rich text editors with
32+
React and ProseMirror. We see it as our job to provide turnkey solutions for the hard parts of rich
33+
text editing — like collaboration, presence, and version history — so that you can focus on building
34+
the editor experience that your users need.
35+
36+
## Why does it exist?
37+
38+
We spend a lot of time thinking about and working on rich text editors. In particular, we spend a
39+
lot of time helping companies solve the same problems over and over again. There are usually great
40+
primitives available for these common building blocks
41+
([`prosemirror-collab-commit`](https://github.com/stepwisehq/prosemirror-collab-commit) for
42+
collaboration, [unified.js](https://github.com/unifiedjs/unified) for Markdown, etc.), but putting
43+
them together correctly to build a functioning text editor can be challenging.
44+
45+
There are other solutions, like [Tiptap](https://tiptap.dev/) and
46+
[Remirror](https://www.remirror.io/), but we think that they’ve made some suboptimal choices that
47+
force product developers to make unnecessary compromises.
48+
49+
1. Both attempt to use React portals and effect hooks to integrate with ProseMirror, which
50+
[lead to irreconcilable state tearing](https://handlewithcare.dev/blog/why_i_rebuilt_prosemirror_view/),
51+
due to fundamental differences in how React and ProseMirror View handle view reconciliation.
52+
2. Both attempt to use [Yjs](https://github.com/yjs/yjs) via
53+
[`y-prosemirror`](https://github.com/yjs/y-prosemirror) for collaboration. We think that Yjs’s
54+
CRDT implementation is
55+
[ill-suited for rich text editing](https://www.moment.dev/blog/lies-i-was-told-pt-2).
56+
3. Both attempt to hide ProseMirror’s underlying APIs, under the guise of simplicity and
57+
abstraction. We think that ProseMirror, low-level though it is, is roughly the correct level of
58+
abstraction for a domain as complex as rich text editing. Attempts to abstract it away inevitably
59+
lead to _more_ complexity, as the abstractions leak frequently and require constant manual
60+
integration with the lower level solutions.
61+
62+
We think we can do better. And more importantly perhaps, we think that you _deserve_ better!
63+
64+
## Philosophy
65+
66+
### Don’t hide ProseMirror
67+
68+
ProseMirror is an outstanding rich text editing framework. Nearly anything that you can imagine
69+
doing with a rich text editor can be accomplished with ProseMirror. Rich text editing is also a very
70+
complex domain, requiring a very large number of decisions to be made per feature.
71+
72+
We think that better primitives built with ProseMirror can take us farther than abstractions that
73+
attempt to hide away ProseMirror’s internals.
74+
75+
### Collaboration should be simple to implement _and_ simple to debug
76+
77+
ProseMirror has first-party collaboration, in the form of
78+
[`prosemirror-collab`](https://code.haverbeke.berlin/prosemirror/prosemirror-collab). Because it
79+
just sends steps over the wire, and relies on a single, server-side ordering of operations for
80+
conflict resolution, it is very simple to debug. But it is very challenging to implement correctly,
81+
and there is very little in the way of guidance or documentation for doing so.
82+
83+
Yjs provides third-party collaboration, in the form of
84+
[`y-prosemirror`](https://github.com/yjs/y-prosemirror). Because it is built on Yjs, which has many
85+
robust adapters for various protocols and servers, it is very easy to implement. However, because it
86+
operates on Yjs’s XML-based Y-doc format, it is very challenging to inspect and debug if something
87+
goes wrong.
88+
89+
Pitter Patter’s collaboration, presence, and version history libraries are based on
90+
[`prosemirror-collab-commit`](https://github.com/stepwisehq/prosemirror-collab-commit). Like
91+
`prosemirror-collab`, `prosemirror-collab-commit` uses ProseMirror steps as the primary data
92+
structure for conflict resolution. But Pitter Patter Collab provides actual guidance and
93+
implementation that make it easy to set up a full-stack collaborative editing application, and hard
94+
to shoot yourself in the foot.
95+
96+
### Correctness is worth it
97+
98+
After trying every other option over the course of several years, we eventually decided that the
99+
only way to correctly integrate React and ProseMirror was to
100+
[reimplement ProseMirror View’s renderer from scratch directly in React](https://handlewithcare.dev/blog/why_i_rebuilt_prosemirror_view/).
101+
This was itself a massive effort, but the result, in the end, is a React/ProseMirror integration
102+
that doesn’t suffer from state tearing and allows developers to use React idioms like context as
103+
they normally would, without caveats or compromises. We don’t put side effects in React render
104+
functions or ProseMirror plugin apply functions, we don’t use effects to synchronize state with
105+
props. We want to enable you to build rich text editors that your users can trust, and that means
106+
that we need to build libraries that _you_ can trust.
4107

5108
<!-- NOTE: This section is autogenerated. Do not manually edit.-->
6109
<!--sponsorsstart-->

packages/collab-client/README.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,51 @@
1-
# collab-client
1+
<p align="center">
2+
<a href="https://pitter-patter.dev/"><img src="https://raw.githubusercontent.com/handlewithcarecollective/pitter-patter/refs/heads/main/readme-assets/pitter-patter-logo.png" alt="" height="75"/></a>
3+
</p>
4+
5+
<h3 align="center">Pitter Patter</h3>
6+
7+
<p align="center">
8+
<strong>An open source collaborative rich editing toolkit.</strong>
9+
</p>
10+
11+
<!-- TODO: Add a demo gif -->
12+
<!-- <p align="center"> -->
13+
<!-- <img src="https://assets.trpc.io/www/v10/v10-dark-landscape.gif" alt="Demo" /> -->
14+
<!-- </p> -->
15+
16+
# `@pitter-patter/collab-client`
17+
18+
> Pitter Patter Collab client. Fast, simple collaborative editing.
19+
20+
## Documentation
21+
22+
Full documentation for `@pitter-patter/collab-client` can be found
23+
[here](https://pitter-patter.dev/docs/collab/overview).
24+
25+
## Installation
26+
27+
```bash
28+
# npm
29+
npm install @pitter-patter/collab-client \
30+
prosemirror-model \
31+
prosemirror-state \
32+
prosemirror-transform
33+
34+
# Yarn
35+
yarn add @pitter-patter/collab-client \
36+
prosemirror-model \
37+
prosemirror-state \
38+
prosemirror-transform
39+
40+
# pnpm
41+
pnpm add @pitter-patter/collab-client \
42+
prosemirror-model \
43+
prosemirror-state \
44+
prosemirror-transform
45+
46+
# Bun
47+
bun add @pitter-patter/collab-client \
48+
prosemirror-model \
49+
prosemirror-state \
50+
prosemirror-transform
51+
```

packages/collab-server/README.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,51 @@
1-
# collab-server
1+
<p align="center">
2+
<a href="https://pitter-patter.dev/"><img src="https://raw.githubusercontent.com/handlewithcarecollective/pitter-patter/refs/heads/main/readme-assets/pitter-patter-logo.png" alt="" height="75"/></a>
3+
</p>
4+
5+
<h3 align="center">Pitter Patter</h3>
6+
7+
<p align="center">
8+
<strong>An open source collaborative rich editing toolkit.</strong>
9+
</p>
10+
11+
<!-- TODO: Add a demo gif -->
12+
<!-- <p align="center"> -->
13+
<!-- <img src="https://assets.trpc.io/www/v10/v10-dark-landscape.gif" alt="Demo" /> -->
14+
<!-- </p> -->
15+
16+
# `@pitter-patter/collab-server`
17+
18+
> Pitter Patter Collab server. Fast, simple collaborative editing.
19+
20+
## Documentation
21+
22+
Full documentation for `@pitter-patter/collab-server` can be found
23+
[here](https://pitter-patter.dev/docs/collab/overview).
24+
25+
## Installation
26+
27+
```bash
28+
# npm
29+
npm install @pitter-patter/collab-server \
30+
prosemirror-model \
31+
prosemirror-state \
32+
prosemirror-transform
33+
34+
# Yarn
35+
yarn add @pitter-patter/collab-server \
36+
prosemirror-model \
37+
prosemirror-state \
38+
prosemirror-transform
39+
40+
# pnpm
41+
pnpm add @pitter-patter/collab-server \
42+
prosemirror-model \
43+
prosemirror-state \
44+
prosemirror-transform
45+
46+
# Bun
47+
bun add @pitter-patter/collab-server \
48+
prosemirror-model \
49+
prosemirror-state \
50+
prosemirror-transform
51+
```

packages/presence-client/README.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,55 @@
1+
<p align="center">
2+
<a href="https://pitter-patter.dev/"><img src="https://raw.githubusercontent.com/handlewithcarecollective/pitter-patter/refs/heads/main/readme-assets/pitter-patter-logo.png" alt="" height="75"/></a>
3+
</p>
4+
5+
<h3 align="center">Pitter Patter</h3>
6+
7+
<p align="center">
8+
<strong>An open source collaborative rich editing toolkit.</strong>
9+
</p>
10+
11+
<!-- TODO: Add a demo gif -->
12+
<!-- <p align="center"> -->
13+
<!-- <img src="https://assets.trpc.io/www/v10/v10-dark-landscape.gif" alt="Demo" /> -->
14+
<!-- </p> -->
15+
116
# `@pitter-patter/presence-client`
17+
18+
> Pitter Patter Presence client. Fast, simple live presence indicators.
19+
20+
## Documentation
21+
22+
Full documentation for `@pitter-patter/presence-client` can be found
23+
[here](https://pitter-patter.dev/docs/collab/overview).
24+
25+
## Installation
26+
27+
```bash
28+
# npm
29+
npm install @pitter-patter/presence-client \
30+
prosemirror-model \
31+
prosemirror-state \
32+
prosemirror-transform \
33+
prosemirror-view
34+
35+
# Yarn
36+
yarn add @pitter-patter/presence-client \
37+
prosemirror-model \
38+
prosemirror-state \
39+
prosemirror-transform \
40+
prosemirror-view
41+
42+
# pnpm
43+
pnpm add @pitter-patter/presence-client \
44+
prosemirror-model \
45+
prosemirror-state \
46+
prosemirror-transform \
47+
prosemirror-view
48+
49+
# Bun
50+
bun add @pitter-patter/presence-client \
51+
prosemirror-model \
52+
prosemirror-state \
53+
prosemirror-transform \
54+
prosemirror-view
55+
```

packages/presence-server/README.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,36 @@
1+
<p align="center">
2+
<a href="https://pitter-patter.dev/"><img src="https://raw.githubusercontent.com/handlewithcarecollective/pitter-patter/refs/heads/main/readme-assets/pitter-patter-logo.png" alt="" height="75"/></a>
3+
</p>
4+
5+
<h3 align="center">Pitter Patter</h3>
6+
7+
<p align="center">
8+
<strong>An open source collaborative rich editing toolkit.</strong>
9+
</p>
10+
11+
<!-- TODO: Add a demo gif -->
12+
<!-- <p align="center"> -->
13+
<!-- <img src="https://assets.trpc.io/www/v10/v10-dark-landscape.gif" alt="Demo" /> -->
14+
<!-- </p> -->
15+
116
# `@pitter-patter/presence-server`
17+
18+
> Pitter Patter presence server. Fast, simple live presence indicators.
19+
20+
## Documentation
21+
22+
Full documentation for `@pitter-patter/presence-server` can be found
23+
[here](https://pitter-patter.dev/docs/presence/overview).
24+
25+
## Installation
26+
27+
```bash
28+
# npm
29+
npm install @pitter-patter/presence-server
30+
# Yarn
31+
yarn add @pitter-patter/presence-server
32+
# pnpm
33+
pnpm add @pitter-patter/presence-server
34+
# Bun
35+
bun add @pitter-patter/presence-server
36+
```

packages/refs/README.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,31 @@
1-
# `@pitter-patter/presence-client`
1+
<p align="center">
2+
<a href="https://pitter-patter.dev/"><img src="https://raw.githubusercontent.com/handlewithcarecollective/pitter-patter/refs/heads/main/readme-assets/pitter-patter-logo.png" alt="" height="75"/></a>
3+
</p>
4+
5+
<h3 align="center">Pitter Patter</h3>
6+
7+
<p align="center">
8+
<strong>An open source collaborative rich editing toolkit.</strong>
9+
</p>
10+
11+
<!-- TODO: Add a demo gif -->
12+
<!-- <p align="center"> -->
13+
<!-- <img src="https://assets.trpc.io/www/v10/v10-dark-landscape.gif" alt="Demo" /> -->
14+
<!-- </p> -->
15+
16+
# `@pitter-patter/refs`
17+
18+
> Pitter Patter ref utils.
19+
20+
## Installation
21+
22+
```bash
23+
# npm
24+
npm install @pitter-patter/refs
25+
# Yarn
26+
yarn add @pitter-patter/refs
27+
# pnpm
28+
pnpm add @pitter-patter/refs
29+
# Bun
30+
bun add @pitter-patter/refs
31+
```

0 commit comments

Comments
 (0)