Running it yourself
This page exists because the alternative to paying us has to be a real path, documented as carefully as the one that takes your money. Otherwise the open half is decoration.
You can do it today
The wire is y-websocket's protocol, not ours. The reference server is MIT, it is on npm, and it serves the same documents to the same clients:
npx @y/websocket-server --port 1234Then the only thing that changes in your application is the URL:
const provider = new WebsocketProvider(
'ws://your-own-host:1234',
'design-notes',
doc,
);That is the whole migration. No export, no conversion, no rewrite, because there was never a format of ours to get out of.
What the reference server does not do
It holds documents in memory unless you give it a persistence module, it has no notion of customers or tokens, and it does not share a room between processes, so it is one machine until you put work in. For a team, an internal tool, or anything where one box is honestly enough, that is fine and it is free.
What the Quoin server adds
- Documents in Postgres, so a restart is not an outage and a room survives the last person leaving.
- Redis between processes, so a room works when your traffic lands on two machines rather than one. This is the part that quietly does not work until it suddenly matters.
- Signed room tokens, read-only connections, and a project namespace a key cannot cross.
- Counters in the format Prometheus reads, including the one that catches two processes that have stopped hearing each other while both still report healthy.
- Seams for persistence, fanout, authorization and metering that all do nothing by default, so none of the above costs you anything if you do not want it.
It is MIT. It is not published yet: the repository is private while the service finds its feet, and the package is not on npm. That is a real limitation and worth saying plainly rather than burying, which is also why the paragraph above it is about a server you can run this afternoon.
What operating it costs
The install is the easy part, and it is not what the hosted service sells. What it sells is everything after: a socket layer that survives a deploy, a Postgres you back up and have practised restoring, a Redis that is somebody's problem when it fills, watching whether rooms are being saved, and being the person who finds out at three in the morning that they are not.
If that work is interesting to you, or cheap for you, you should do it yourself and we would rather you did than resented us. If it is neither, that is what the pricing page is for.
Either way, you keep the document
Every document here exports as plain Yjs state, which loads into any Yjs document with one call and does not mention us. Migrating covers moving in and moving out.