[HN Gopher] Supabase - Realtime: Multiplayer Edition
___________________________________________________________________
Supabase - Realtime: Multiplayer Edition
Author : samwillis
Score : 294 points
Date : 2022-08-18 14:45 UTC (8 hours ago)
(HTM) web link (supabase.com)
(TXT) w3m dump (supabase.com)
| moralestapia wrote:
| Great day for the backend :D
|
| Cool announcements for Pinecone, PlanetScale and Supabase.
| bebrws wrote:
| kabes wrote:
| Not directly related to the realtime server. But anybody that
| tried both Supabase and Hasura and can give their thoughts on how
| they compare?
| danielvaughn wrote:
| So I'm just at the tail end of a project where I'm attempting to
| build a collaborative text editor, and it's been absolute hell. I
| figured it would be a tricky problem, but I had no idea how far
| down the rabbit hole goes. I kept thinking, gosh, there's gotta
| be a backend service that bakes this in, if there isn't it would
| be a great business opportunity.
|
| I almost want to scrap all of my code and move it to Supabase.
| Congrats to the team on this launch, very cool.
|
| edit: actually, after thinking it through, I'm not clear on what
| Supabase is calling multiplayer. Presence is one thing, but when
| I think multiplayer, I'm thinking conflict resolution. Is this an
| OT/CRDT implementation? Or is it just presence?
| samwillis wrote:
| It's broadcast and presence they have released, both building
| blocks for multiplayer. It's unfortunate that HN rules meant a
| mods changed the title to the blog posts title. I had gone with
| a slightly edited (for length) sentence from the second
| paragraph as I thought it was clearer:
|
| _... general availability of Realtime 's multiplayer features,
| Broadcast and Presence._
| upupandup wrote:
| how does the pricing compare to liveblocks? was really offput
| by their pricing (charging $0.01 for every time a client
| connects)
| chasers wrote:
| Pricing is still tbd unfortunately. Currently every project
| gets these features with some limitations:
|
| - 25 concurrent channels
|
| - 25 channel joins per second
|
| - 200 concurrent connections
|
| - 100 broadcast messages per second avg over 60 seconds
| (not including db changes) (aka 6,000 per minute rolling)
|
| I think these are probably pretty close to where we'll land
| for free projects. They can be changed per project so if
| you (or anyone) needs a limit increased in the short term
| we can do that.
| stevenfabre wrote:
| Hi there,
|
| Im Steven, co-founder of Liveblocks. Thanks for your
| feedback on pricing. We try to have a fair pricing for
| everyone and for companies of all sizes.
|
| We're working on a new pricing that will make this much
| more affordable, even free in most cases.
|
| Would love to get your feedback on that if you're up for
| it?
|
| Thanks!
| mathgladiator wrote:
| I haven't documented it yet, but my serverless board game
| platform supports collaborative text editing. I'm using
| Codemirror 6 which has a very simple operational transform
| scheme, and I baked Codemirror's OT scheme into my back-end. It
| works great, but this was because I had all the realtime stuff
| sorted out (connection management, multiplexing, etc...)
|
| https://www.adama-platform.com/
| tekacs wrote:
| One thing that... might be useful depending on what exactly
| you're building here is https://hocuspocus.dev, which is an
| incredibly easy to use server for Y.js.
|
| It's written by the team behind https://tiptap.dev, which is an
| amazing WYSIWYG text editor, but HocusPocus does a great job of
| syncing state of a variety of WYSIWYG editors out of the box.
| Getting the server running is a couple of minutes worth of work
| and scaling it is quite easy.
|
| In addition to editor state, it also has built-in support for
| 'Awareness' (info on current users), as well as any other Y.js
| datatype, including other things with a bridge into Y.js.
| zvsmith wrote:
| +1 for tiptap, and yjs, used both to build
| https://www.buildmemo.com 's collaborative editor. Did not
| use hocuspocus but found it trivial to implement our own node
| ws backend.
| wahnfrieden wrote:
| Just fyi your page has text headline cutoff issues on
| iPhone X
| danielvaughn wrote:
| How are you persisting the data? Are you storing them as
| ydocs?
| qwertox wrote:
| Related to this is also an example from ProseMirror (which
| TipTap uses as the editing component) [0][1]
|
| I'm not completely sure, but I think at ProseMirror they're
| using Yjs [2] for the collaborative editing part. If not,
| checking out Yjs is worth it in and of itself.
|
| > Yjs is a CRDT implementation that exposes its internal data
| structure as shared types. Shared types are common data types
| like Map or Array with superpowers: changes are automatically
| distributed to other peers and merged without merge
| conflicts.
|
| > Yjs is network agnostic (p2p!), supports many existing rich
| text editors, offline editing, version snapshots, undo/redo
| and shared cursors. It scales well with an unlimited number
| of users and is well suited for even large documents.
|
| > Conflict-free replicated data types (CRDT) for
| collaborative editing are an alternative approach to
| operational transformation (OT). [3]
|
| OT was what Google Wave was based on and I think current
| colab editing in Google Docs and other of their office
| products use this.
|
| [0] https://prosemirror.net/examples/collab/#edit-Example
|
| [1] https://marijnhaverbeke.nl/blog/collaborative-
| editing.html
|
| [2] https://github.com/yjs/yjs
|
| [3] https://github.com/yjs/yjs#Yjs-CRDT-Algorithm
| jahewson wrote:
| > I think at ProseMirror they're using Yjs
|
| No, ProseMirror has its own approach to sync.
|
| > OT was what Google Wave was based on and I think current
| colab editing in Google Docs and other of their office
| products use this.
|
| Yep.
| samwillis wrote:
| ProseMirror has its own OT system developed by its lead
| developer. However the developer behind Yjs has created
| Yjs bindings for it that are first class!
|
| The team behind TipTap (built on top of ProseMirror),
| created the Hocuspocus server backend for Yjs and
| collaborative text editing.
| TranquilMarmot wrote:
| We use tiptap/hocuspocus at Vowel (https://www.vowel.com/)
| for our collaborative notes editor. It's really slick!
| jahewson wrote:
| Ooh I like your product.
| danielvaughn wrote:
| Very nice. One of my hard requirements is that the data
| itself has to be persisted as a string.
|
| So I've had to implement a system where a new yDoc is
| created when the session begins, and then is converted back
| into a string when the session ends.
|
| Did you have to do anything similar? And if so was it easy
| with hocuspocus? I wasn't able to get a clear answer from
| the docs.
| tekacs wrote:
| Ha, that's good to know -- I've been enjoying using Vowel
| and was wondering what the in-call notes editor was powered
| by. Vowel is really slick too -- nice job! :)
| danielvaughn wrote:
| I'm using TipTap actually, but decided not to go with
| hocuspocus since it's in beta (at least that's how they
| position it).
|
| edit: also, I couldn't get a good look at their documentation
| outside of the paywall, so I have no idea how they implement
| the backend. It's important, because I need to persist my
| documents as html strings, not as y docs.
| tekacs wrote:
| Just so you know, I've used it since the early part of this
| year and found it to be robust and fully-featured (most
| functionality comes from Y.js after all), but definitely
| defer to them on how ready they consider it. :)
| ZeroCool2u wrote:
| I think what you want is probably https://replicache.dev/
| wahnfrieden wrote:
| They take rent
| aboodman wrote:
| We'd like to ensure that Replicache continues to exist and
| that we can continue to support it. So yeah, we proudly
| charge for it.
| wahnfrieden wrote:
| It's just a fact to consider in tradeoffs. There are
| several economic models that support tool businesses, or
| returns for investors. Please don't take offense at
| noting which of those several valid approaches
| aboodman wrote:
| Not offended. Our team has a long history in open source
| and have seen both the triumphs and challenges over the
| years. It's very difficult to build a sustainable client-
| side open source tool without some other business off to
| the side that supports it (example: nextjs/vercel).
|
| I like the simplicity and clarity of just directly
| charging for the valuable thing. Nothing wrong with the
| other models, they just aren't for us.
| kiwicopple wrote:
| replicache has a great "Linear" example using Supabase:
| https://doc.replicache.dev/examples/repliear
| sureglymop wrote:
| How are you currently building the collaborative features?
| Using web sockets i imagine, right?
| danielvaughn wrote:
| yeah, websockets + yjs + y-prosemirror
| kabes wrote:
| That sounds like a stack that should be up for the job.
| Used these myself and found making a collaborative editer
| with those quite a breeze actually. What issues do you have
| with them? Or did it just take a long time before arriving
| at that combination?
| cpursley wrote:
| This is where Erlang/Elixir really shines.
|
| https://elixir-lang.org/blog/2020/11/17/real-time-collaborat...
|
| https://www.youtube.com/watch?v=HTB4mQyMAmg
|
| And supabase uses elixir to listen to database changes and push
| then over websockets.
| berjin wrote:
| Fluid Framework looks interesting. Since it's open source you
| can either use a cloud service (Azure Fluid Relay) or run it on
| Kubernetes with Routerlicious. https://fluidframework.com/
| kevsim wrote:
| Definitely feel your pain. We did a full OT implementation for
| our startup [0] and it was a beast. We based it on Slate.js
| which has a nice concept of operations that maps nicely to OT,
| but it was still a lot of work to get it working well (and
| there are still rough edges we try to improve all of the time).
| We did base it on Postgres in the backend so really looking
| forward to what the Supabase team comes up with going forward
| and seeing if they can help us delete some complex code :-)
|
| Happy to have a chat on collaborative editing anytime if that'd
| be helpful (email in profile).
|
| 0: https://kitemaker.co
| btown wrote:
| For a collaborative text editor, you need two things: (1) a
| full-stack system that maintains a running list of data events
| such that everyone sees everyone else's events eventually, and
| (2) frontend code that adapts that set of events, along with
| your text cursor position and current changes, into a cohesive
| view of a document at any moment in time.
|
| Supabase and Replicache can absolutely help with (1). But for
| (2) you will need OT or CRDT.
|
| https://docs.yjs.dev/getting-started/a-collaborative-editor is
| a good place to start - it uses Quill and CRDTs for (2) and can
| have a persistence layer built in (or custom written, to work
| on top of Supabase etc.) for (1).
| eduardosalaz wrote:
| Quill Deltas are a very interesting concept, I used Quill
| myself along with Supabase for realtime sharing (not
| collaboration) of text and it was almost a breeze.
| aboodman wrote:
| Several teams use yjs on top of Replicache, it's a real easy
| match.
| didip wrote:
| It seems like Elixir is the language of choice for building a
| large scale real time solution, then?
| tlarkworthy wrote:
| What happens over an unreliable network connection such as
| mobile?
| wenbo wrote:
| Wen Bo from the Supabase Realtime team here!
|
| Client will seek to continuously reconnect to the WebSocket
| when there's a connection issue and server must receive at
| least one heartbeat in a 60 second window; otherwise it will
| clean up the WebSocket connection.
|
| We built Supabase Realtime on top of Phoenix Channel, and along
| with our clients, handles unreliable network connections
| gracefully, including on mobile.
| tlarkworthy wrote:
| So you will lose messages.
|
| "Phoenix uses an at-most-once strategy when sending messages
| to clients. If the client is offline and misses the message,
| Phoenix won't resend it. Phoenix doesn't persist messages on
| the server. If the server restarts, unsent messages will be
| gone. If our application needs stronger guarantees around
| message delivery, we'll need to write that code ourselves.
| Common approaches involve persisting messages on the server
| and having clients request missing messages. For an example,
| see Chris McCord's Phoenix training: client code and server
| code."
|
| https://hexdocs.pm/phoenix/channels.html
|
| It will be impossible to build a reliable mobile experience
| on top of such shaky foundations.
| wenbo wrote:
| > So you will lose messages.
|
| This is true but you can store your messages inside your
| database and on reconnect you can fetch the messages you
| missed.
| tlarkworthy wrote:
| you need a queue to do that properly, do your users have
| to manage that queue?
| wenbo wrote:
| Yes, developers will have to do this themselves for now.
| wenbo wrote:
| I see that you worked on Firebase's Realtime database back in
| the day. How did your team handle such cases?
| tlarkworthy wrote:
| queues either end. Clients are given a session ID, server
| (and client) replays missing messages on reconnect. It's the
| only way to achieve causal consistency, which is what you
| need for a sane programming model
|
| https://observablehq.com/@tomlarkworthy/redis-backend-1
| wenbo wrote:
| Thanks, will take a look at your article!
| jayd16 wrote:
| Is server authroity and broadcast permissions handled or left as
| a task for the user? Can channels be locked down to a list of
| users? Can users be kicked from a channel? Is message
| spam/flooding/DDOSing users in a channel protected?
|
| Quickly skimming the docs, I don't see any examples of this.
|
| Server authority and some of this security can be added app level
| but I think the message throttling needs to be built in if its
| going to support any kind of pvp/untrusted peer scenario.
|
| Anyone know the story there?
| wenbo wrote:
| > Is server authroity and broadcast permissions handled or left
| as a task for the user? Can channels be locked down to a list
| of users?
|
| Broadcast permissions is currently not handled by the server
| and left to the developer to implement. We have discussed this
| internally and will prioritize Broadcast authorization
| accordingly because we've gotten feedback about this from a
| number of developers.
|
| > Can users be kicked from a channel?
|
| Not at the moment but again we've gotten feedback about this as
| well and will prioritize it.
|
| > Is message spam/flooding/DDOSing users in a channel
| protected?
|
| We have built rate limiting and other protections so bad actors
| don't affect the good in the cluster. A colleague of mine
| posted these limitations of Supabase Realtime to prevent abuse:
| https://news.ycombinator.com/item?id=32511586.
| majestic5762 wrote:
| I've been watching Supabase for a long time and wanted to try it
| out. I had the chance to use it in a couple of projects that I
| started, but I feared it will cause me problems down the road,
| and eventually I decided to build the backend services myself.
| I'm comfortable with NestJS which is not supported in Deno, and I
| felt that my productivity would've been harmed if I picked up
| Supabase. But definitely I have to build up confidence by
| starting a personal project. Is there anyone who uses Supabase in
| production? Do you have any feedback?
| abcdjdjd wrote:
| I don't get the advantage of using supabase or things like it.
| It feels like you are basically relying on a third party to do
| the work for you and you are paying them to do it.
|
| Doesn't seem portable at all. If you make your own code, you
| can move it wherever you want in whatever system you want. It
| seems like if you use this product, it will get you stuck in
| that environment and if you need to upgrade, then you are going
| to have to do the work later on anyways.
|
| What exactly is so great about this product? I'm not saying its
| bad, I'm just not fully understanding the advantages of using
| it?
|
| Why would someone want to use this over something like a
| framework for the backend (that is free) and a database they
| want and then host it wherever they want? I don't really get
| why someone who knows how to code would want to pay extra money
| to build a backend.
| erulabs wrote:
| Congrats to the Supabase team! Presence in general is a problem
| I'm tired of solving - so this will be a nice replacement for in-
| house solutions!
| krzyk wrote:
| What is supabase? The page doesn't have description that is
| easily accessible from mobile.
|
| All I know is that it has a real time server and multiplayer.
| Sounds like a game.
| kiwicopple wrote:
| From our homepage:
|
| > Supabase is an open source Firebase alternative. Start your
| project with a Postgres Database, Authentication, instant APIs,
| Realtime subscriptions and Storage.
|
| Our docs give details about the architecture for each project:
| https://supabase.com/docs/architecture
| rosmax_1337 wrote:
| This is intresting. I've been thinking about using the web for
| more multiplayer games for a while, and a tool like this is more
| or less exactly what I'm looking for. Noone wants to make
| netcode.
|
| (Comment also acts as a bookmark) :)
| shakezula wrote:
| multiplayer web is at a cool spot right now. I'm writing an app
| in graphQL / Go and it's been awesome for real-time player
| experiences.
| kolanos wrote:
| There's a "favorite" link you can use above to bookmark.
| samwillis wrote:
| This is really neat, I have been keeping an eye on Supabase, this
| (presence) is the feature that will finally push me to build a
| side project with it. I have one in mind.
|
| Anyone from Supabase here, do you have any plans to build in
| support for CRDT toolkits such as Yjs or AutoMerge for these
| features? It would make working with them so much easer if there
| was a plug and play backend.
|
| The one other thing I would love to see next from them is an
| offline sync product, so you could partially sync a users dataset
| to their device and save back any changes later (bonus points for
| then combing that with CRDTs). Maybe the WASM Postgres yesterday
| [0] could be a foundation for such a product.
|
| https://news.ycombinator.com/item?id=32498435
| Xeoncross wrote:
| Agree, I would love to see CRDT (or related) multiplayer
| resolution as that's a big time sink for a lot of new
| collaboration product ideas around dashboards, documents,
| spreadsheets, online games, mindmaps, and flows (like figma).
| danielvaughn wrote:
| Yeah this actually confused me a bit - at first I thought
| "multiplayer" meant CRDT, but now I'm not sure. I got really
| excited there for a bit, lol.
| kiwicopple wrote:
| > CRDT
|
| It's definitely something we'll support (we mention it briefly
| in the blog post). We'll extend this service so that it works
| well with WebRTC, and we have a few ideas for making it easy
| for development.
|
| > Maybe the WASM Postgres yesterday
|
| This was mind-blowing! Very cool what the crunchy team have
| done there. It would be awesome to replicate from a remote
| Postgres database to a "per-user" database to the browser. I
| think WASM support needs to improve before it can become
| generally useful for offline-sync, but the tech seems withing
| reach.
|
| We're working on various ideas for offline-sync, but the
| Realtime server will be central to whatever implementation we
| land on.
| samwillis wrote:
| Both of those sound super exiting!
|
| I previously experimented with building an offline syncing
| CRDT db using Pouch/CouchDB and combining it with Yjs for
| automatic conflict resolution. But Postgres would be so much
| better as the foundation. If only I had time it is something
| I would love to work on...
| kiwicopple wrote:
| perhaps we can help you find some time (contact details are
| in my profile)
| pcthrowaway wrote:
| Any idea if Realtime might support Postgres streaming
| replication in the future? We were incredibly excited to use
| Realtime with TimescaleDB, but couldn't get it working.
|
| I assumed it was related to
| https://docs.timescale.com/timescaledb/latest/how-to-
| guides/... (even though we were only running it single-node,
| my understanding is that Realtime works by tapping into the
| replication feed)
| kiwicopple wrote:
| Realtime uses logical replication, and from your link it
| looks like it should work with Timescale (although not
| recommended):
|
| > Using logical replication with TimescaleDB is not
| recommended, as it requires schema synchronization between
| the primary and replica nodes and replicating partition
| root tables, which are not currently supported.
|
| As long as logical replication is supported, this won't be
| an issue for Realtime because the purpose is to receive
| data changes (which come in a JSON format) and the end-user
| doesn't need to persist schema modifications.
|
| > but couldn't get it working
|
| If you send me some error logs, I can take a look or
| forward to one of the team.
|
| > support Postgres streaming replication
|
| This is the first time I've heard it requested - I don't
| think it's something we'd do unless there was a good reason
| and strong demand. If we were to do any work in this
| direction we'd prefer to try contribute DDL streaming to
| PostgreSQL's logical streaming. We've been thinking about
| this for a while (Michel has built metagration -
| https://github.com/michelp/metagration which has prompted a
| few ideas for core patches)
| pcthrowaway wrote:
| > If you send me some error logs, I can take a look or
| forward to one of the team.
|
| I really appreciate the offer. I don't have the logs
| handy unfortunately and haven't been interacting with the
| Timescale instance in a few months. If I move back to
| that side of things I most definitely will take you up on
| that.
|
| For what it's worth, I don't think the error was in
| running or connecting to Realtime; rather, I think what
| happened is there were duplicate, missing, or truncated
| messages. Thinking on it some more, I think TimescaleDB
| is using multiple tables under the hood for the tables
| they expose. Unfortunately, it's out of my depth of
| Postgres knowledge right now, so I can't tell you more
| lagrange77 wrote:
| > We're working on various ideas for offline-sync, but the
| Realtime server will be central to whatever implementation we
| land on.
|
| Are you also working on optimistic updates (which may be
| related to offline-sync)?
| kiwicopple wrote:
| I should have been more clear - when I say "working on", it
| means "debating internally what would be the best long-term
| strategy" (from a technical POV).
|
| But yes, optimistic updates is one of the requirements. In
| the meantime, if you need something great, I can recommend
| Replicache and WatermelonDB - both are excellent.
| lagrange77 wrote:
| > Replicache and WatermelonDB - both are excellent.
|
| Nice, thank you.
| kiwicopple wrote:
| hey hn, supabase ceo here
|
| we're excited about this release - it adds a few neat features to
| our Realtime server[0]. For those who don't read the post (it's
| quite long), our Realtime server was initially built for
| subscribing to Postgres changes via websockets. We've added
| Broadcast functionality (for "ephemeral" messages that don't need
| to be persisted to Postgres) and Presence (similar to Broadcasts,
| but it retains an eventually-consistent state between users).
|
| We were planning a larger write-up with all the technical details
| but it became a bit long. Some highlights:
|
| - Realtime is built with Elixir an Phoenix[1]
|
| - We've moved to a single, global cluster - We're using
| `Phoenix.Tracker` to globally distribute the Erlang PIDs of all
| of our Postgres connections. This guarantees there is only a
| single connection to each database.
|
| - We've implemented a "leaky-bucket" rate-limiter using Erlang's
| `:counters` module[3] for "per tenant" rate-limiting. We'll move
| this to a global rate-limiter in the future
|
| - We're currently seeing ~2000 concurrent connected users - it
| will be interesting to see what this spikes up to now that this
| is on HN
|
| It's still in heavy development, and we'll make sure to detail
| all the choices we take as we continue solve problems. A few of
| the Realtime team will be here answer questions - @chasers,
| @wenbo, @abc3erl.
|
| [0] Realtime: https://github.com/supabase/realtime
|
| [1] Phoenix Framework: https://www.phoenixframework.org/
|
| [2] rate limiter: https://en.wikipedia.org/wiki/Leaky_bucket
|
| [3] :counters: https://www.erlang.org/doc/man/counters.html
| fintechjock wrote:
| I have almost zero coding experience. Seriously, I've read a
| couple of books and I've taken a couple of MOOCs and that is
| about it. I've never 'launched' any project of my own, and I
| have zero front-end or back-end experience.
|
| I say that because I just used Supabase for the first time, and
| I was able to build and launch the Slack clone in ~15 minutes.
| Seriously cool. Thank you for sharing
| kiwicopple wrote:
| That's awesome. I've shared your comment with the team - they
| will really enjoy your feedback. Good luck building
| pixelbyindex wrote:
| Hi Supabase & Team
|
| What are the chances of an official C# library being in the
| works? I think this would greatly fill the needs for unity
| devs. I use firebase on almost all game backends because of how
| quickly I can get set up with auth and a db.
|
| I used supabase in my latest project and it served my needs but
| there were a few difficulties to overcome. The greatest
| shortcoming was the lack of real time support (C#), and I had
| to do everything via REST api.
|
| I am planning on publishing the game as OSS and making some
| learning videos about it
| kiwicopple wrote:
| They're unofficial, but @acupofjose has been working hard on
| some community C# libraries:
|
| https://github.com/supabase-community/#client-libraries
|
| They won't support the functionality we outline in our blog
| post yet (we are still figuring it out on our official JS
| libraries), but I'll send him your message.
|
| As an aside, if anyone is reading this and wants to help
| maintain the C# libraries, please reach out.
|
| [0] acupofjose: https://github.com/orgs/supabase-
| community/people/acupofjose
| guykdm wrote:
| Hey Kiwi, any chance of getting temporal.io style features for
| supabase edge functions? would love to have a one-stop-shop
| solution for all my real and not-real time needs.
| kiwicopple wrote:
| (I'm assuming you want a queue/workflow engine)
|
| Temporal has done an incredible job of ensuring there will be
| no side-effects (even with external systems), so I doubt
| we'll be able to do something as extensive as they have. That
| said, we will probably build a simple Postgres queue/workflow
| engine (similar to pgboss[0]). It will live in the Postgres
| database (as an extension), but will be nicely integrated
| with Edge Functions. We haven't started this yet, so I don't
| have any timelines.
|
| [0] pgboss: https://github.com/timgit/pg-boss
| joisig wrote:
| Take a look at Oban, it very well might fit the bill.
|
| https://github.com/sorentwo/oban
| kiwicopple wrote:
| we used Oban for a very early product (which we put on
| ice) called Supabase Workflows:
| https://supabase.com/blog/supabase-workflows
|
| The reason we paused it was the realisation that it's far
| more powerful to co-locate this sort of product with the
| data. In this case, Workflows would be more powerful as a
| Postgres extension - you can store the workflows into
| your database, create them using SQL, and the workflows
| would have direct access to your operational data. We'll
| probably re-write this using pgx[0] at some stage (if
| anyone is reading this and wants to attempt this, please
| reach out).
|
| [0] pgx: https://github.com/tcdi/pgx
| samokhvalov wrote:
| It would be great to see monitoring of this thing under load -
| I mean the Postgres part of it, how it's loaded, how many
| connections used, query analysis, etc.
| kiwicopple wrote:
| cool - we can include that in the next blog post
| cpursley wrote:
| Any chance of open sourcing the rate limiter bit for Elixir?
| chasers wrote:
| Yeah I plan to. Have some things to prep next week for
| ElixirConf but am going to get back to it after that.
| maxloh wrote:
| Isn't it open source? https://github.com/supabase/realtime
| cpursley wrote:
| As a stand-alone Elixir package.
| timwis wrote:
| Really exciting! I've been checking your blog every couple
| weeks waiting for this release.
|
| Does the global cluster architecture make it much harder to
| self-host supabase? Not that I plan to, but having the promise
| of portability is really important.
| ForrestN wrote:
| Love to see Barbz running/naming cool things!! Why be simple
| when you could be stunning???
| tandyman wrote:
| LOVE Supabase. Building a project over the last several months
| for a client and very excited to launch the beta soon. Thanks
| for all you are doing...very exciting stuff.
|
| Creating dev and staging environments is a feature that I am
| most looking forward to. Hopefully that is on the road map.
| jahewson wrote:
| Given that Phoenix.Tracker is eventually consistent, how does
| it guarantee that there's only one Postgres connection?
| chasers wrote:
| Yeah the database ultimately guarantees that. This lets us
| distribute the fact that a connection exists (in the form of
| a PID) so that we don't have to go back to the db on every
| connection request. This helps quite a bit in the case of a
| lot of connections coming in very quickly, especially when
| those connections are geographically far from the database or
| the database is under load from some other system.
|
| If no connection exists yet, you're right, two connections
| could try to establish themselves at the same time. In which
| case, whoever gets to the db first wins. But then the loser
| is still connected to PubSub, so they'll now start getting
| changes just the same.
| wiradikusuma wrote:
| Why would I use Supabase instead of Firebase since the latter is
| more mature and has richer ecosystem?
|
| [v] Can host myself
|
| [v] Can access from China (since Firebase is blocked)
|
| [v] ...anything else?
|
| (Btw they should put this in FAQ or something)
| jitl wrote:
| Postgres is more mature than Firebase
| digianarchist wrote:
| Firebase doesn't even have good search support and it's a
| Google product...
| gitgud wrote:
| That has always annoyed me, the one thing that _isn 't_
| integrated into Firebase...
| wenbo wrote:
| Wen Bo from the Supabase Realtime here!
|
| Also, every single person on the Supabase team actively does
| support so if you would like world class support than look no
| further!
| burggraf wrote:
| Supabase developer here. Coming from Firebase myself, the
| biggest driver for me can be summed up with: relational data.
| PostgreSQL rocks.
| mh- wrote:
| In case someone from Supabase sees this: there's something weird
| with the blog layout on iPhone. It goes really narrow. Main site
| renders fine.
| kiwicopple wrote:
| thanks - fix going out now
| prox wrote:
| Also there is no page on what Supabase is, flicking through a
| few pages I still have no idea!
| samwillis wrote:
| At the top their homepage (which admittedly doesn't have a
| link to it other than the logo):
|
| > Supabase is an open source Firebase alternative. Start your
| project with a Postgres Database, Authentication, instant
| APIs, Realtime subscriptions and Storage.
|
| https://supabase.com/
| prox wrote:
| Ah gotcha, not really obvious.
| [deleted]
| samwillis wrote:
| It's the embedded YouTube live video at the bottom of the post
| throwing the layout off.
| mildmustard wrote:
| Fixed :) thanks
| tiborsaas wrote:
| The demo page is broken on mobile: https://imgur.com/a/BoLErlH
|
| Android 11 | Chrome 104
| wenbo wrote:
| Thanks, the demo isn't mobile responsive quite yet.
| tsycho wrote:
| Are you planning to provide native iOS/Android APIs? Any ETA if
| yes?
| kiwicopple wrote:
| Yes, we are - but no ETA yet (sorry, we've been focused on the
| infrastructure).
|
| There are some community-developed libraries here:
| https://github.com/supabase-community. We sponsor developers to
| maintain these - at some point we'll hire someone to work full-
| time on these (and we'll start with iOS/Android)
| nabakin wrote:
| multiplayer.dev character limit is client-side fyi. Chat messages
| are encoded into HTML Entities so thankfully XSS doesn't seem
| possible
| wenbo wrote:
| Wen Bo from the Supabase Realtime team!
|
| Just want to confirm that we did put in place a client-side
| character limit.
| sidcool wrote:
| One author of the post has title of engineering while the other
| has title of engineers. Typo?
| kiwicopple wrote:
| thanks - fixed: https://github.com/supabase/supabase/pull/8492
| alberth wrote:
| Am I wrong in understanding that some of these capabilities
| sounds similar to what mnesia offers?
|
| https://www.erlang.org/doc/man/mnesia.html
| fsiefken wrote:
| I'm probably not the only one who thought this was about Supaplex
| https://supaplex.me/ - .a popular extended boulderdash clone -
| because of the term 'Multiplayer' before clicking the link. For
| those who didn't know, the dos game is now freeware and there is
| a reverse engineered open source multi-platform port. There is no
| multiplayer mod, yet.
| gavi wrote:
| I built backend for my typing app using supabase with row level
| security(RLS) and OAuth providers to track.
|
| https://typingkit.com
|
| Supabase + SvelteKit + Cloudflare
| cpursley wrote:
| It sounds like Supabase is pulling out the WAL listening bits
| into its own library?
|
| https://supabase.com/blog/supabase-realtime-multiplayer-gene...
|
| If so, y'all might want to look into: https://github.com/elixir-
| ecto/postgrex/blob/master/lib/post...
| wenbo wrote:
| Wen Bo from the Supabase Realtime team here!
|
| We actually use https://github.com/supabase/walrus to get the
| database changes and we're planning on moving to a Rust worker
| (https://github.com/supabase/walrus/tree/worker/worker) for
| better performance especially in the RLS-enabled use case.
|
| I promised Jose that I would check out
| Postgrex.ReplicationConnection and we might add it in to our
| Supabase Realtime some time in the future.
| kiwicopple wrote:
| The database listener in this version of Realtime uses Postgrex
| - it's great
| cpursley wrote:
| Super! Y'all are doing amazing things.
|
| Where can I see that in the code? Or is not quite out yet?
| wenbo wrote:
| We started developing Realtime: Multiplayer version many
| months ago in a private repo just to experiment with
| Phoenix's Broadcast and Presence and over time we just
| added to it.
|
| We plan to move all the code over to
| https://github.com/supabase/realtime in the next couple of
| weeks and you'll be able to see the code in its entirety.
| squeaky-clean wrote:
| FYI multiplayer.dev breaks the browser back button. At least on
| mobile safari. Is that a glitch in that demo specifically? Or is
| it a supabase realtime glitch?
| kiwicopple wrote:
| I imagine it's a glitch caused by the way the demo "redirects"
| a user to a room. Probably you hit back and then get redirected
| again. Sorry about that - it's not intentional. I'll let the
| team know.
| wenbo wrote:
| Wen Bo from the Realtime team here!
|
| That back button glitch is specific to the demo. We had to do a
| few redirects based on Presence sync and load balancing each
| room. I'm sure there's a better way of doing it and will seek
| to improve it when I update it. Sorry about that!
| squeaky-clean wrote:
| No worries, figured I'd mention it. Those redirect flows are
| really tricky.
| mmastrac wrote:
| What's the difference between Supabase open-source and the paid
| versions? Is that just around hosting?
|
| EDIT: Googling around yields a somewhat hostile discussion from
| last year: https://news.ycombinator.com/item?id=26637360
|
| ... but it looks like you _can_ self-host?
| https://supabase.com/docs/guides/hosting/docker
| kiwicopple wrote:
| Yes, you can self host and everything is open source (including
| the Dashboard[0]). Everything is either MIT, Apache2, or
| PostgreSQL licensed.
|
| > difference between Supabase open-source and the paid versions
|
| On the paid version we handle some of additional database
| management (like daily backups, PITR, etc). These are
| technically available for self-hosting too, because the
| database is just a Postgres database, but I point it out here
| because it's not something you'll get "out of the box" from the
| Docker setup.
|
| Our philosophy with open source is "offer everything" and then
| charge for usage. There aren't any features completely gated.
| Our Enterprise plan just adds additional SLAs and support
| packages for our cloud platform.
|
| In addition to the self-hosting docs you've linked, in our
| GitHub you can find the Docker files[0] and some community-
| developed self-hosting strategies [2]
|
| [0]https://supabase.com/blog/supabase-studio
|
| [1] docker:
| https://github.com/supabase/supabase/tree/master/docker
|
| [2] community: https://github.com/supabase-community/#self-
| hosting
| mmastrac wrote:
| Thanks, those docs seem pretty clear!
| atonse wrote:
| Didn't realize open source wasn't hobbled at all. Always
| assumed it would be missing features.
|
| Definitely trying you guys out now.
___________________________________________________________________
(page generated 2022-08-18 23:00 UTC)