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 (26 days ago) | |
| Current version: | 0.2.0 | |
| Compatible with: | Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x | |
| User ratings: |
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.
- Works with the Monaco Editor plugin too (since 0.2.0): when it replaces a textarea, the session binds to the Monaco model instead, with remote carets and selections as Monaco decorations, and users on Monaco co-edit with users on the plain textarea.
- 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.2.0 (2026-09-11)
Compatible with Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x.
- Support for the Monaco Editor plugin: when it replaces a textarea, the realtime session binds to the Monaco model instead (remote edits applied as model edits, remote carets and selections as Monaco decorations, read-only lock after a shared comment is posted). Users on Monaco and users on the plain textarea co-edit the same text.
- Undo/redo in Monaco (shortcuts, command palette, API) only revert your own edits, never the other users' text.
Support for Monaco was suggested by Damduck Yu in a rating of this plugin. Thank you!
Release notes: https://github.com/jperelli/redmine_realtime_editor/releases/tag/v0.2.0
0.1.0 (2026-09-09)
Compatible with Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x.