supabase/realtime

Broadcast, Presence, and Postgres Changes via WebSockets

7,631

stars

2,996

commits

Elixir

primary language

Sep 11, 2026

updated

supabase.com/realtime
cdc
change-data-capture
crdt
distributed-systems
elixir
phoenix
phoenix-framework
postgres
postgresql
pubsub
realtime
Browse cluster: PostgreSQL and Supabase tooling

README


Supabase Logo

Supabase Realtime

Send ephemeral messages, track and synchronize shared state, and listen to Postgres changes all over WebSockets.
Examples · Request Features · Report Bugs

Status

GitHub License Coverage Status

Featuresv1v2Status
Postgres ChangesGA
BroadcastGA
PresenceGA

This repository focuses on version 2 but you can still access the previous version's code and Docker image. For the latest Docker images go to https://hub.docker.com/r/supabase/realtime.

The codebase is under heavy development and the documentation is constantly evolving. Give it a try and let us know what you think by creating an issue. Watch releases of this repo to get notified of updates. And give us a star if you like it!

Overview

What is this?

This is a server built with Elixir using the Phoenix Framework that enables the following functionality:

  • Broadcast: Send ephemeral messages from client to clients with low latency.
  • Presence: Track and synchronize shared state between clients.
  • Postgres Changes: Listen to Postgres database changes and send them to authorized clients.

For a more detailed overview head over to Realtime guides.

Does this server guarantee message delivery?

The server does not guarantee that every message will be delivered to your clients so keep that in mind as you're using Realtime.

Quick start

You can check out the Supabase UI Library Realtime components and the repository of the multiplayer.dev demo app.

Developers

Start with DEVELOPERS.md for local setup, mise tasks, and example workflows.

Once your environment is up and running, check out the following docs to customize the server and troubleshooting:

Postgres compatibility

supabase/postgres versionRoleStatus
< 14-Not officially supported.
14.xsupabase_adminRequires superuser: log_min_messages can only be set by a superuser; supautils doesn't expose per-parameter delegation on this version. On <= 14.5, realtime.broadcast_changes(...) called from a trigger via PERFORM is unsupported.
15.x < 15.14.1.018supabase_adminRequires superuser: supautils.policy_grants on realtime.subscription is missing until supabase/postgres@1b916920.
15.x >= 15.14.1.018, 16.x, 17.xsupabase_adminRequires superuser to run migrations, no superuser needed for tenant grants. Policies are managed by supautils.

Contributing

See CONTRIBUTING.md

Code of Conduct

See supabase/CODE_OF_CONDUCT.md

License

This repo is licensed under Apache 2.0.

Credits

Contributors

(top 30 of 49)

abc3

634 commits

filipecabaco

512 commits

chasers

426 commits

w3b6x9

422 commits

supabase/realtime

Broadcast, Presence, and Postgres Changes via WebSockets

7,631

stars

2,996

commits

Elixir

primary language

Sep 11, 2026

updated

supabase.com/realtime
cdc
change-data-capture
crdt
distributed-systems
elixir
phoenix
phoenix-framework
postgres
postgresql
pubsub
realtime
Browse cluster: PostgreSQL and Supabase tooling

README


Supabase Logo

Supabase Realtime

Send ephemeral messages, track and synchronize shared state, and listen to Postgres changes all over WebSockets.
Examples · Request Features · Report Bugs

Status

GitHub License Coverage Status

Featuresv1v2Status
Postgres ChangesGA
BroadcastGA
PresenceGA

This repository focuses on version 2 but you can still access the previous version's code and Docker image. For the latest Docker images go to https://hub.docker.com/r/supabase/realtime.

The codebase is under heavy development and the documentation is constantly evolving. Give it a try and let us know what you think by creating an issue. Watch releases of this repo to get notified of updates. And give us a star if you like it!

Overview

What is this?

This is a server built with Elixir using the Phoenix Framework that enables the following functionality:

  • Broadcast: Send ephemeral messages from client to clients with low latency.
  • Presence: Track and synchronize shared state between clients.
  • Postgres Changes: Listen to Postgres database changes and send them to authorized clients.

For a more detailed overview head over to Realtime guides.

Does this server guarantee message delivery?

The server does not guarantee that every message will be delivered to your clients so keep that in mind as you're using Realtime.

Quick start

You can check out the Supabase UI Library Realtime components and the repository of the multiplayer.dev demo app.

Developers

Start with DEVELOPERS.md for local setup, mise tasks, and example workflows.

Once your environment is up and running, check out the following docs to customize the server and troubleshooting:

Postgres compatibility

supabase/postgres versionRoleStatus
< 14-Not officially supported.
14.xsupabase_adminRequires superuser: log_min_messages can only be set by a superuser; supautils doesn't expose per-parameter delegation on this version. On <= 14.5, realtime.broadcast_changes(...) called from a trigger via PERFORM is unsupported.
15.x < 15.14.1.018supabase_adminRequires superuser: supautils.policy_grants on realtime.subscription is missing until supabase/postgres@1b916920.
15.x >= 15.14.1.018, 16.x, 17.xsupabase_adminRequires superuser to run migrations, no superuser needed for tenant grants. Policies are managed by supautils.

Contributing

See CONTRIBUTING.md

Code of Conduct

See supabase/CODE_OF_CONDUCT.md

License

This repo is licensed under Apache 2.0.

Credits

Contributors

(top 30 of 49)

abc3

634 commits

filipecabaco

512 commits

chasers

426 commits

w3b6x9

422 commits

Languages

Elixir

89.8%

PLpgSQL

4.1%

TypeScript

3.1%

HTML

1.4%