Outside the browser
Editor integrations
Citet's collaborative editor is not the only way in. The same project can be edited from VSCode or Neovim through integrations that share a common client library, so local edits appear in the browser in real time and vice versa.
How they share a session
Both integrations talk to the same Hocuspocus WebSocket server as the web client. They authenticate with a short-lived token from your Citet account and subscribe to the project's Yjs document. Local edits and remote edits go through the same CRDT pipeline, so there are no separate sync semantics for "browser users" vs. "editor users".
The shared client lives in @citet/editor-core. It handles login, project listing, file metadata, and the realtime sync loop. Both integrations are thin wrappers on top of it.
VSCode
The VSCode extension is in apps/vscode. It runs in-process and calls @citet/editor-core directly — there is no separate local daemon to manage.
- Install the extension from the marketplace (or build it from source).
- Run
Citet: Sign infrom the command palette and authorize the device. - Run
Citet: Open projectto pick a project from your workspace. Files open as virtual VSCode documents that stay synced with the project.
Compile, error markers, and presence work the same as in the browser. Comments are readable but most reviewing flows are still easier in the web editor.
Neovim
Neovim cannot run JavaScript natively, so the integration in apps/nvim ships a small Bun host that bridges the editor to @citet/editor-core. The host is managed by the plugin and starts on demand.
- Install the plugin with your usual Lua plugin manager (lazy.nvim, packer, etc.).
- Run
:CitetSignIn. The plugin opens the device-flow URL in your browser and stores the resulting token locally. - Run
:CitetOpento pick a project; files open as scratch buffers that are synced back to the project.
Standard LSP and completion plugins keep working — the integration only handles sync, not editing. SyncTeX and compile commands are exposed as Vim commands that mirror the web editor's actions.
Authentication
Both integrations use a device-flow grant: the editor shows a short URL and a code, you approve it in the browser, and the editor receives a refresh token. Tokens are stored per-machine and can be revoked from your account settings on the web.
Working alongside browser users
Browser and editor users share presence — you can see who is editing what regardless of the client. Most teams end up with a mix: people who prefer keyboard-driven workflows stay in their editor, while reviewers and casual editors use the web.