Project

General

Profile

Plugins Directory » Redmine Realtime Editor

Author: Julian Perelli
Website: https://github.com/jperelli/redmine_realtime_editor
Code repository: https://github.com/jperelli/redmine_realtime_editor.git
Registered on: 2026-09-09 (about 6 hours ago)
Current version: 0.1.0
Compatible with: Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x
User ratings:   (0)

Google-Docs style real-time co-editing of issues, comments and wiki pages, with no extra infrastructure: no websocket server, no extra port, no reverse proxy change. The browsers synchronize through Redmine itself over plain HTTP polling (optional long polling).

Features

  • Shared text: issue description, new comment, editing an existing comment, wiki pages (including section editing). Every keystroke shows up in the other browsers within a second; texts converge with a CRDT (Yjs), no "last write wins".
  • Shared issue fields: everything else in the issue edit form (status, priority, assignee, dates, % done, custom fields...). Remote changes are applied to the native controls with a "changed by Alice" mark and survive Redmine's own form refresh on status/tracker change.
  • Remote carets and selections drawn over Redmine's own textarea, one colour per user with a name label. Toolbar, preview, attachments and drag-and-drop keep working.
  • Presence bar under each shared field: who else is editing, who is typing, live/offline state.
  • New comments are private by default (you only see who is writing one); optionally shared to co-write a single comment.
  • Saving from a co-edited form does not trigger Redmine's "updated by another user" conflict for the other editors; changes made elsewhere (API, bulk edit) still do.
  • No new permissions: you can co-edit exactly the fields you can already edit. Drafts expire a configurable time after everybody leaves.
  • No cron, no background job, no websocket, no extra process. Three small tables. The Yjs bundle is committed, so Node.js is not needed to install.

How it works

Each tab runs a Yjs document bound to the field. Edits become small binary updates POSTed to a normal Redmine controller, which authorizes them with Redmine's own visibility/edit checks, appends them to an ordered log and returns what the tab has not seen yet plus who else is there. Tabs poll every second while somebody else is editing, every 3 seconds when alone, every 20 seconds in background tabs (all configurable). The server never interprets the Yjs payload.

Settings under Administration > Plugins > Redmine Realtime Editor. License: MIT.

Installation notes

cd /path/to/redmine/plugins
git clone https://github.com/jperelli/redmine_realtime_editor.git
cd /path/to/redmine
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Restart Redmine. Open an issue in two browsers, click Edit in both and start typing. No Node.js needed: the Yjs bundle is committed.

Changelog

0.1.0 (2026-09-09)

Compatible with Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x.