makeplane / makeplane/plane

[feature]: Realtime work-item updates over the live server (auto-refresh boards/lists without manual reload)

Open
#9,779 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
59.6k
Forks
5.8k
Avg merge
1d 22h
Merged PRs (30d)
49

Description

  • I have searched the existing issues
Summary

Broadcast work-item change events over the existing live (collaboration) server, so that every open board / list / calendar view soft-refreshes automatically when another user (or an API client) creates, updates, drags, archives or deletes a work item — no manual browser refresh needed.

Why should this be worked on?

Plane is built for agile teamwork, but today every work-item view is fetch-on-mount: the kanban/list store fetches once when the page mounts and never revalidates. Concretely:

  • User A drags a card to Done; user B's screen keeps showing it under Todo until B manually reloads the page.
  • Changes made through the public v1 API (CI bots, integrations) are invisible to everyone watching the board.
  • Stale groupings silently mislead stand-ups and triage sessions.

The infrastructure for real-time already ships with CE: apps/live (Hocuspocus + Redis broadcast) powers collaborative page editing. Extending the same channel pattern to work-item events gives instant, multi-instance-safe sync without introducing a second realtime stack:

  1. The API emits a lightweight event (project / work item / change type / actor — no work-item data in the payload) after each change, from the single choke point that already records issue activity.
  2. The live server relays it to a per-project broadcast channel (issue-events:<project_id>) over the existing Redis extension.
  3. Web clients subscribed to that channel ignore their own events, debounce bursts, and soft-refetch the current view with its existing pagination (no loader flash, scroll position kept).

Clients that don't configure the feature see zero change: the whole path is disabled unless an internal shared key is set on both the API and the live server.

Working implementation

A complete, self-contained implementation is attached as a PR: it covers drag & drop re-ordering/state changes, detail edits, creation, bulk delete, archiving, cycle/module membership changes and API-token-driven updates, and has been running on a self-hosted CE deployment.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the attached implementation and the existing apps/live Hocuspocus and Redis broadcast path. Trace the API change-event choke point and the subscribed board, list, and calendar clients. Done means supported work-item changes trigger debounced soft-refreshes across project views while preserving pagination and scroll position, with the shared-key feature gate disabled by default.

Written by the indexing model from the issue text.

Assessment

Tech stack
react, redis, typescript
Domain
api, backend, distributed-systems, frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.