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.

  1. Install the extension from the marketplace (or build it from source).
  2. Run Citet: Sign in from the command palette and authorize the device.
  3. Run Citet: Open project to 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.

  1. Install the plugin with your usual Lua plugin manager (lazy.nvim, packer, etc.).
  2. Run :CitetSignIn. The plugin opens the device-flow URL in your browser and stores the resulting token locally.
  3. Run :CitetOpen to 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.