Warning
Volt is in early development and issues are to be expected. Please feel free to report bugs and issues in the Issues section.
volt is a greenfield native text editor project built in Rust. The long-term direction is an Emacs-inspired, 4coder-style editor with a Rust core, a compiled user extension library, and native rendering.
crates/volt- process entry point and startup bootstrap for thevoltexecutablecrates/editor-core- shared runtime and editor domain conceptscrates/editor-buffer- text storage and editing enginecrates/editor-render- rendering abstractions and viewport drawingcrates/editor-sdl- SDL3 platform and windowing integrationcrates/editor-theme- theme token registry and palette resolutioncrates/editor-syntax- tree-sitter orchestrationcrates/editor-jobs- async jobs and compilation runnerscrates/editor-terminal- builtin terminal bufferscrates/editor-lsp- language server integrationcrates/editor-dap- debug adapter integrationcrates/editor-git- magit-style git workflowscrates/editor-fs- workspace file system servicescrates/editor-picker- fuzzy picker and list UI abstractionsuser/sdk- the only stable ABI crate shared between the host and the compiled user librarycrates/editor-plugin-host- plugin hosting and loading servicesuser- compiled user extension library and packagesxtask- developer automation commands
cargo xtask fmt- format the workspacecargo xtask fmt-check- verify formatting in CIcargo xtask check- runcargo check --workspacecargo xtask clippy- run clippy with warnings deniedcargo xtask test- run workspace testscargo xtask ci- run formatting, check, clippy, and tests
To build the editor binary in debug mode:
cargo build -p voltFor a release build:
cargo build -p volt --releaseThe executable is written to target/debug/volt or target/release/volt
(volt.exe on Windows).
The compiled user customization layer lives in the volt-user crate and is built as both
an rlib and a shared library.
To build it in debug mode:
cargo build -p volt-userFor a release build:
cargo build -p volt-user --releaseThe shared library is written next to the volt binary:
- Linux:
target/<profile>/libuser.so - macOS:
target/<profile>/libuser.dylib - Windows:
target/<profile>/user.dll
cargo build -p volt -p volt-userFor a release build:
cargo build -p volt -p volt-user --releaseTo build the local bundle layout used by releases, build both crates together:
cargo build -p volt -p volt-user --releaseAfter that, target/release/ contains:
volt/volt.exe- the compiled user shared library
assets/- a copied
user/tree that can be rebuilt standalone
The volt binary now prefers the shared library that lives next to the executable, so the
release-style rebuild workflow is:
- build
voltandvolt-user - edit files under
user/ - rebuild just the user library with
cargo build -p volt-user --release - replace the shared library next to
volt
If you want to rebuild the copied standalone user tree that was staged into the release folder, you can also run:
cd target/release/user
cargo build --release -p volt-userYou can also point the binary at a specific user library with VOLT_USER_LIBRARY=/path/to/libuser.so
(or the platform equivalent file name).
On Linux, building the SDL/browser-enabled application requires the GTK/WebKit development
packages used in CI. If you hit pkg-config errors for glib-2.0, gtk, or webkit2gtk,
install the same packages as the release workflow, for example:
sudo apt-get install -y pkg-config libgtk-3-dev libwebkit2gtk-4.1-devThe repository now has a validated multi-crate foundation that covers the major architecture slices requested for the editor:
- a Cargo workspace with
xtaskautomation and CI wiring - an
editor-coreruntime with theWindow -> Workspace -> Pane/Popup -> Buffermodel - service, command, hook, and keymap registries
- an
abi_stable-shaped compileduserlibrary with auto-loaded packages - an SDL3 shell demo using SDL_ttf (FreeType-backed) with split panes, auto-loaded
user/*packages, Vim-style defaults, searchable pickers, user-defined statusline segments, workspace management, and the current SDL canvas renderer - a rope-backed
editor-bufferengine with cursor movement, range edits, undo/redo, streaming file reads, and large-buffer coverage - an
editor-pickerfuzzy list engine used by the command palette flow editor-jobsandeditor-terminalfoundations for async command execution, compile-style runs, and terminal transcriptseditor-lspandeditor-dapregistries for Rust server/adapter session plans- an
editor-syntaxregistry with tree-sitter language registration and Rust capture-to-theme-token mappings fromuser/lang/rust.rs - an
editor-themeregistry with themes loaded fromuser/themes/*.toml editor-fsandeditor-gitmodels for oil-style directory buffers and magit-style status parsing- the SDL shell prefers a system-installed Berkeley Mono Nerd Font when present, with cross-platform monospace fallbacks otherwise, and now always loads the bundled icon fonts from
crates/volt/assets/font
You can run the current shell and bootstrap demos with:
cargo run -p volt
cargo run -p volt -- --shell-demo
cargo run -p volt -- --shell-hidden
cargo run -p volt -- --profile-typing
cargo run -p volt -- --bootstrap-demo
The default launch path opens the visible SDL3 shell on the stable SDL canvas path. The hidden smoke-test path prints the selected backend/renderer so you can verify shell startup. --profile-typing keeps per-frame input timing samples in memory and writes a typing profile log on exit so you can inspect which stages are slow while typing. The bootstrap demo prints a startup summary showing the currently wired picker, job, terminal, LSP, DAP, theme, directory, git, and syntax subsystems.
Inside the SDL shell, the default user package wiring now gives you:
- Vim-style normal/insert mode controls from
user/vim.rs :andF3for the command pickerF4for the buffer pickerF5to toggle the docked popup windowF6for a searchable keybinding pickerF7for the theme pickerCtrl-n,Ctrl-p, andEnterto navigate and run picker entries- a per-buffer statusline composed from
user/statusline.rs workspace.new,workspace.switch,workspace.delete, andworkspace.list-filescommands backed byuser/workspace.rs
Theme files live under user/themes/*.toml and support UI options like font, font size, and
cursor/picker roundness. Bundled icon fonts are loaded automatically at startup and are no longer
