VSCode codemp plugin -- code multiplexer
Find a file
alemi 38911bdc31 feat: reworked cursor handle mechanism
instead of storing cursors it just streams them as they happen. instead
of just getting cursors from the controller, now you also send your
operations into it, mimicking more the behavior used for text ops
2023-07-04 22:54:25 +02:00
client feat: added core codemp commands for text sync 2023-07-04 01:05:05 +02:00
proto feat: very crude cursor implementation 2023-04-12 03:29:42 +02:00
server feat: actually report true accepted status 2023-07-02 03:19:00 +02:00
src feat: reworked cursor handle mechanism 2023-07-04 22:54:25 +02:00
.editorconfig feat: initial rust bindings for vscode client 2023-07-02 23:58:25 +02:00
.gitignore build: improved buildscript and bundle, added cmds 2023-07-04 01:02:50 +02:00
.rustfmt.toml build: initial commit with tonic stubs 2022-07-10 19:01:56 +02:00
build.rs chore: dramatically simplified everything 2023-04-07 03:10:45 +02:00
Cargo.toml feat: initial rust bindings for vscode client 2023-07-02 23:58:25 +02:00
LICENSE chore: added AGPL license 2022-09-29 12:01:11 +02:00
README.md Added a very basic README 2022-09-14 12:13:48 +02:00

codemp

This project is heavily inspired by Microsoft Live Share plugin for Visual Studio (Code). While the functionality is incredibly good, I often find issues or glitches which slow me down, and being locked to only use Visual Studio products is limiting. I decided to write my own solution, and to make it open source, so that any editor can integrate it with a plugin.

Design

Client/Server

While initially a P2P system seemed interesting, I don't think it would easily scale with many users (due to having to integrate many changes on each client). I decided to build a client/server architecture, with a central "Workspace" managed by the server application and multiple clients connecting to it. Each client will only have to care about keeping itself in sync with the server (remembering local-only changes and acknowledged changes), leaving the task of keeping track of differences to the server.

Plugins

This software will probably be distribuited as a standalone binary that editors can use to connect to a "Workspace". A dynamic library object might also be a choice. Each editor plugin must be responsible of mapping codemp functionality to actual editor capabilities, bridging codemp client to the editor itself. The client should be able to handle a session autonomously.

Text Synchronization

A non destructive way to sync changes across clients is necessary. I initially explored CRDTs, but implementation seemed complex with little extra benefits from "more traditional" approaches (Operational Transforms). This has to be investigated more.

Roadmap

  • Initial design choices
  • Simple GRPC server with tonic
  • Simple neovim client with RPC/msgpack
  • Implementing core protocol routes
  • Simple neovim client capable of displaying other person cursor
  • Implement OTs / CRTDs for sharing file deltas
  • More clients (VSCode? JetBrains IDEs?)
  • LSP functionality bridged to guests from host?
  • Full remote development suite by keeping the project repo on a server?