FireSync - A Yjs backend with users, permissions, etc using Postgres

Hi everyone :wave:

I wanted to share an early release of FireSync with you: GitHub - firesync-org/firesync: Batteries-included platform for building real-time collaboration apps.

FireSync aims to be a ‘complete’ backend for hosting Yjs docs and building a collaborative app. The goal is to give everything you might need for your app, but let you pick and choose which bits you want to use (like Supabase, if you know that). It’s meant to be a ‘batteries included’ framework, which I think is a different design principle from the collection of existing standalone providers.

At the moment, FireSync supports:

  • Storing the Yjs document data in Postgres
  • Scaling to multiple instances with Postgres NOTIFY/LISTEN
  • A websocket protocol that supports multiple Yjs docs over one connection
  • User registration & login or external auth
  • Role based access permissions per document (read, write, or admin)
  • An email based invite flow for adding users to documents

Some caveats on the above - only Google OAuth is supported for auth yet, using Postgres NOTIFY/LISTEN is a WIP while I test out all the edge cases of things going wrong, and it needs some SMTP plumbing to actually send emails!

I plan to continue to extend FireSync to add everything you’d need to build a fully featured app like Notion, Figma, etc, either alongside your own backend, or just using FireSync:

  • A full API for access FireSync server-to-server (it’s mainly client-to-server at the moment)
  • An API/client interface for browsing document histories (with authenticated user ids attached to Yjs client ids with timestamps)
  • A ‘suggestions’ or ‘track changes’ layer for proposing changes to Yjs docs, and either accepting or rejecting them
  • More comprehensive permissions, with groups and anonymous or token based access (for shareable links).
  • Notifications for changes
  • Comments attached to different bits of the doc

I hope some of these might be able to feed back into first class Yjs features, depending on how they work out!

I’ve worked on a couple of big real-time collaboration apps in my time (Overleaf[.com] and Ideaflip[.com]), and these are things that I’ve had to reinvent each time. I want to make it so you can just get these out of the box!

In the longer term, my aim is to offer a hosted cloud version of FireSync too, but the focus is on open source first.

I’d love to know what you think - please give it a look and/or a try, and let me know. If you’d like to build something with FireSync, please drop me an email at hello@firesync.live, and I’d love to help you! It’s early days, but I’m excited for where this could go.

2 Likes

Super cool! I think we all would wish for a more featured Yjs. The economics of doing so are a bit iffy, however.

Your feature-list is impressive but I have a suspecting feeling maybe too audacious for an initial prototype :smile:. Can’t comment on the architecture otherwise. If you’re interested in setting up a pnpm monorepo with Github CI, I can provide some boilerplate. IMO it’s the only sane way with changesets to author multiple npm packages / apps from a single git repo.

Absolutely! Best to view that feature list as me setting out a vision, not a short term roadmap.

1 Like