deco docs
GitHub

deco

A lightweight, VS Code-compatible text editor written in Rust. One page per feature, each of them showing an animation generated from the editor’s own renderer.

A lightweight VS Code-compatible editor in Rust. This directory is the detailed reference; the top-level README provides an overview and lists missing features.

Page What it covers
Editing Motion, selection, line and block comments, multiple cursors, undo
Tabs Several documents, one per tab; splitting; what a tab keeps
Chrome The side bar and the panel: ctrl+b, ctrl+j, where the space comes from, and where the keyboard is
The file tree Walking the workspace, opening files, and what it costs to open a big one
Git The branch, changed-line marks, side-by-side diffs, and a view that stages and commits — by running the binary rather than linking a library
Syntax highlighting Scopes, languages, choosing one, and why not tree-sitter
Find and replace ctrl+f, ctrl+h, F3, the multi-cursor find keys, and replacing across the workspace
Running commands The command palette, quick open, go to symbol, search in files, go to line
Language servers Diagnostics, hover, definition, references, completion, symbols, semantic tokens, formatting, rename, code actions
Configuration settings.json, keybindings.json, colour themes, and where they are read from
Extensions The capability model, and why an extension gets less power here than in VS Code
Remote SSH, container and WSL authorities, and which parts are implemented
Testing Unit tests, end-to-end scenarios, and what each one is for
Roadmap What VS Code has that deco does not, the plan for each, and what is worth building because deco is not Electron

About the animations

Every animation in these pages is generated from deco’s own renderer. None are screen recordings or hand-drawn:

$ cargo xtask docs            # regenerate them
$ cargo xtask docs --check    # fail if they no longer match the code

deco_tui::render calculates a frame from an editor session and terminal size, allowing layout checks without an attached terminal. Scenarios in xtask/src/docs.rs send key chords through Session and capture the renderer’s output. CI runs --check to detect differences between generated animations and the committed files.

The animations are animated SVG rather than GIF. SVG is text, so changes can be diffed and reviewed in a pull request, and generation needs no encoder dependency or embedded bitmap font. GitHub renders the animation in Markdown.

The caption under each frame is the key that was pressed to produce it.

About this site

These pages are also published at sabas0ba.github.io/deco. GitHub Pages builds the site directly from this directory, so the site and the Markdown on GitHub have the same content.

The theme is stored in this directory rather than in a gem, in _layouts/default.html, _data/nav.yml and assets/css/deco.css. The palette uses deco’s default themes: Default Dark Modern for the dark variant and Default Light Modern for the light variant, both taken from crates/deco-theme/src/defaults.rs. The page layout follows the editor layout, with a bar at the top and bottom and an explorer on the left. The site uses only plugins that GitHub Pages enables by default, so there is no separate build or deploy step.

$ cd docs && bundle install
$ bundle exec jekyll serve    # preview the site at http://127.0.0.1:4000/deco/

Edit this page on GitHub