Collaboration Module
Overview
You can use the hot-pluggable module @opensumi/ide-collaboration
to implement real-time multi-person collaborative editing for the editor part of your IDE.
Platform Support
The module currently only supports the Cloud IDE scenario of Browser + Node.
How to use
The use of this module is very simple, just add this module to browser side and node side of your IDE.
// on browser side
renderApp({
modules: [...CommonBrowserModules, CollaborationModule],
wsPath: 'your-ws-path-here',
// on node side
startServer({
modules: [...CommonNodeModules, CollaborationModule],
And then register your user information to CollaborationModuleContribution
.
export interface CollaborationModuleContribution {
info: UserInfo;
}
export interface UserInfo {
id: string; // unique id
nickname: string; // will be displayed on live cursor
}
Here is a simple contribution to this module.
import {
CollaborationModuleContribution,
UserInfo
} from '@opensumi/ide-collaboration';
import { Domain } from '@opensumi/ide-core-common';
@Domain(CollaborationModuleContribution)
export class SampleContribution implements CollaborationModuleContribution {
info: UserInfo = {
id: 'your id',
nickname: 'your name'
};
}
Currently collaborative communication goes through TCP port 12345. URL(except port) of the collaborative communication is the same as your IDE server's wsPath defined in AppConfig
. Please check and configure your server's firewall settings.
Limitations
Currently, the collaborative editing module is an early version. Moreover, since the current design of OpenSumi considers the one-to-one architecture of client (Browser)/server (Node), this module still has many limitations.
- Co-editing functions outside the IDE editor (such as terminal) are not supported
- Does not support handling external modifications to workspace files (like
git pull
, where file content was modified with other software instead of an editor) - Does not support front-end-only and Electron platform
- Does not support cross-file modification within the IDE (such as variable renaming, a kind of refactoring using the vscode plugin)