A lightweight code editor for developers who want a fast, keyboard-first editor without an IDE around it.
Roxanne is a native desktop code editor written in Rust with iced. An IDE wants a project before it opens a file and runs that project's code to understand it, while a plain text editor knows nothing about code. Roxanne opens any file without a project, highlights eight languages with tree-sitter, and asks rust-analyzer about Rust code only when you use an LSP action.
Status: early development, not ready for everyday use. CI builds and tests Roxanne on Linux at every change and checks it against Rust 1.90; the release workflow builds the Linux, Windows and macOS binaries, which have not seen daily use yet. Language server support is experimental and covers Rust only, through rust-analyzer: hover and go to definition.
- No project needed. Type a path and open the file. A
.roxanne.tomlin a folder adds project settings, but nothing requires one. - Opening a folder runs nothing. A project's settings can never load a plugin or start a program. rust-analyzer starts only when you ask for an LSP action, with build scripts and proc macros turned off.
- Saves you can trust. Every save replaces the file in one rename, keeps its permissions and symlinks, and reloading never discards unsaved edits.
- Keyboard first. Menus, a command palette and shortcuts you can rebind, with keymap profiles and an optional vim-like normal mode.
- Tabs, undo and redo, and multiple cursors.
- Syntax highlighting with tree-sitter for Rust, C, Go, JavaScript, JSON, Markdown, Python and TOML.
- Find and replace in the open file, with regular expressions and capture groups, and find in files across the workspace.
- A file tree, a command palette, go to line, a minimap, word wrap and a diagnostics panel for unbalanced brackets and unterminated strings.
- Experimental Language Server Protocol support for Rust: hover and go to
definition through
rust-analyzerfrom yourPATH, started for the Cargo workspace of the file you ask about and answering in the background. It runs with build scripts, proc macros andcargo checkturned off, but a project's ownrust-analyzer.toml, Cargo configuration andrust-toolchain.tomlstill change what it runs: use the LSP actions only on code you trust. See Language server. - Preferences, opened by clicking Roxanne in the top-left corner: the
Colony themes and accents, text size, high contrast, the OpenDyslexic font,
reduced motion, English or French, and the editor's own options. A change
applies at once and is saved in your
config.toml, or in the profile that sets it. - TOML configuration with keymap profiles and live reload, and built-in and native plugins for the status bar.
- Safe saving: the text goes to a temporary file next to the real one, which replaces it in a single rename. When another program changes an open file, Roxanne asks before reloading it.
Search for Roxanne in Colony and install it. Updates arrive through the launcher.
Grab the asset for your platform from the latest release:
| Platform | Asset |
|---|---|
| Linux | roxanne-linux |
| Windows | roxanne-windows.exe |
| macOS (Apple Silicon) | roxanne-macos |
| macOS (Intel) | roxanne-macos-x86 |
chmod +x roxanne-linux && ./roxanne-linuxroxanne --version prints the installed version.
git clone https://github.com/Project-Colony/Roxanne.git
cd Roxanne
cargo build --release
./target/release/roxanneRequires Rust 1.90 or newer, from rustup.
Full documentation is in docs/. Start at docs/README.md.
The documentation is also available in French. English is canonical: when a translation disagrees with it, the English file is right.
- Français - README · index · installation · usage · configuration · plugins · troubleshooting · overview · architecture · editor core · rendering · performance · testing · contributing · code of conduct
Each translation carries the hash of the English file it was made from, and CI
fails when the English moves ahead; see scripts/i18n-check.sh.
docs/i18n/fr/ mirrors the repository root, so docs/i18n/fr/docs/guide/usage.md
is the French docs/guide/usage.md, and a link between two translated pages is
the same as the link between their English originals.
Every release asset is signed by the Project Colony organisation in CI, never on a developer machine. Next to each asset on the release page:
| File | What it is |
|---|---|
<asset>.sig |
an ed25519 signature over the asset, made with the organisation's release key |
<asset>.meta |
three lines binding the asset to its file name, its sha256 and the release version |
<asset>.meta.sig |
an ed25519 signature over the .meta |
The private key is an organisation secret, used only by the shared sign-and-publish workflow in a job that builds nothing; the jobs that compile Roxanne never see it. Colony checks all three files before it installs or updates Roxanne, and refuses a release older than the one installed. To check a download yourself with OpenSSL 3 (the same commands work for every asset):
cat > colony-release.pub <<'KEY'
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEARNjg3Nn8H6/aBg1unwGjkUTcrdTxERNefVaqU8cFu0s=
-----END PUBLIC KEY-----
KEY
a=roxanne-linux
openssl pkeyutl -verify -pubin -inkey colony-release.pub -rawin -in "$a" -sigfile "$a.sig"
openssl pkeyutl -verify -pubin -inkey colony-release.pub -rawin -in "$a.meta" -sigfile "$a.meta.sig"
cat "$a.meta" # version=<tag>, asset=<file name>, sha256=<digest>
sha256sum "$a" # the digest must equal the sha256 lineHow releases are built, signed and published: design/releases.md.
Roxanne sends no telemetry, no analytics and no crash reports, and opens no network connection of its own.
| Data | Stored or sent | Where, and why |
|---|---|---|
| Settings | stored | config.toml and the profiles in profiles/, in Colony/Roxanne/ under your config directory (~/.config/Colony/Roxanne/ on Linux). Roxanne reads them, and the Preferences page writes each setting you change into config.toml, or into the profile that sets it. |
| Older settings | read, copied | config.toml and profiles/ from ~/.config/roxanne/, copied once into Colony/Roxanne/ when that has no config.toml yet. A .migrated-from-legacy-config file there marks the copy as done. The old folder is never changed. |
| Project settings | read | the first .roxanne.toml found in the working directory or one of its parents |
| Your files | stored | where you save them. A save writes a temporary file next to the file and renames it over the file, which keeps its permissions, and a symlink stays a link. |
| Text of the open file | sent to rust-analyzer | only when you use an LSP action on a saved Rust file. rust-analyzer is started from your PATH, or as the program set in Preferences ([lsp] in your own config.toml), and runs on this machine with build scripts and proc macros turned off. It runs cargo metadata, so Cargo or rustup can download the project's dependencies or toolchain. |
| Text and name of the open file | sent to native plugins | only the plugins listed in your own config.toml or a profile it selects. They run with your rights, and Roxanne does not limit what they do with it. |
This program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it.
Roxanne is licensed under the GNU General Public License v3.0 or later.
Roxanne embeds the Colony fonts through colony-ui: JetBrainsMono Nerd Font, OpenDyslexic and Font Awesome 6 Free, each under the SIL Open Font License 1.1.