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 2 months ago) | |
| Current version: | 0.2.2 | |
| 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.2 (2026-10-22)
Compatible with Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x.
Fixes¶
- Wiki: after a save made from another form of the same page (typically "Edit this section", also the API), opening the editor showed a shared draft that predated that save instead of the saved text, so the section edit was visible on the page but missing in edit mode (reported by Damduck Yu). Drafts of issue descriptions and wiki pages are now dropped when the record moved on without a collaborative save and nobody holds the draft any more; editors still writing keep theirs (Redmine's conflict check covers their save).
- The plain-textarea session that the Monaco Editor plugin replaces on page load left its presence row behind for 45 seconds, which kept abandoned drafts alive for that long.
Full changelog: https://github.com/jperelli/redmine_realtime_editor/blob/main/CHANGELOG.md
0.2.1 (2026-10-12)
Compatible with Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x.
- Fixes a bug reported by Damduck Yu in a rating of this plugin (thank you!): in the Monaco Editor plugin's fullscreen mode the collaborative session was silently dropped after a few seconds, so everything typed or applied from the table builder while in fullscreen stayed local and was overwritten by the shared text when leaving fullscreen. Cause: the check used to detect hidden editors relied on offsetParent, which is also null for position: fixed elements such as Monaco's fullscreen wrapper.
Upgrade: git pull in the plugin directory and restart Redmine, no migration needed.
Release notes: https://github.com/jperelli/redmine_realtime_editor/releases/tag/v0.2.1
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.