Outside the browser

Editor integrations

VS Code and Neovim can edit local project files while sharing changes and presence with browser collaborators. You need an account on the same Citet instance and project access.

Build from source

The integrations currently ship in the Citet repository. Use Bun to install and build, and Node.js 22.12 or later for the Neovim runtime. VS Code requires version 1.90 or later; use Neovim 0.10 or later.

git clone https://github.com/backmatter/citet.git
cd citet
bun install
bun run --cwd apps/vscode build
bun run --cwd apps/nvim build

VS Code

From the repository root, open a development window with the built extension:

code --extensionDevelopmentPath="$PWD/apps/vscode"

If your operator provides a VSIX, use Extensions → Install from VSIX instead.

  1. Set citet.serverUrl in VS Code settings to your university's Citet URL.
  2. Run Citet: Login. Check the device code in your browser and approve it using the intended account.
  3. Run Citet: Open Project Locally, choose a project and destination folder, then open its main LaTeX file.
  4. Edit a line and confirm it appears in the browser. Use your normal save command for the local file. Run Citet: Compile and Citet: Open PDF.

Neovim

For lazy.nvim, use a local plugin entry pointing to your checkout. Replace the path and server URL:

{
  dir = "/path/to/citet/apps/nvim",
  name = "citet.nvim",
  build = "bun run build",
  opts = { server_url = "https://citet.your-university.example", auto_attach = true },
  config = function(_, opts) require("citet").setup(opts) end,
}
  1. Run :CitetLogin and approve the displayed code in your browser.
  2. Run :CitetProjects, then :CitetCloneProject to choose a local destination.
  3. Use :CitetOpenProjectFile to open source, edit, and save with :write.
  4. Run :CitetCompile and :CitetOpenPdf. The PDF opens in your browser.

The plugin starts its own local runtime. You do not need to start another Citet server. Local bindings are stored in .citet/config.json.

Login and recovery

Device approval gives the editor access under your current project roles. Review and revoke sessions in Account settings. Use Citet: Logout or :CitetLogout on a device you no longer use.

If files do not update, check the server URL, login status, project access, and realtime connection. Run Citet: Refresh Project or :CitetRefreshProject after remote file changes. A second local host may wait for the first host to release ownership of the same folder.

If synchronization pauses, keep the buffer and any recovery copy. Compare them with current shared source before restoring edits. Do not replace the whole shared file with an old local copy. Neovim Save As creates a detached local copy.

Saved confirms that shared edits reached durable storage. Offline drafts remain on that device until synchronization succeeds; local storage is not a project backup.