Ehwaz is a native code editor built in Rust with Slint. https://github.com/rdenadai/ehwaz
Find a file
2026-02-25 11:16:52 +00:00
.cargo feat: improve editor, search, themes, and terminal UX 2026-02-17 00:52:50 -03:00
benches Implement second-pass CODE_REVIEW improvements 2026-02-20 00:52:50 -03:00
queries feat: improve LSP UX and cursor ligature handling 2026-02-18 18:56:49 -03:00
src feat: Improvements on highlight 2026-02-25 08:12:09 -03:00
static Update recents and explorer projects 2026-02-07 10:41:01 -03:00
tests feat: Improvements on highlight 2026-02-25 08:12:09 -03:00
ui feat: Bunch of improvements 2026-02-23 23:01:47 -03:00
vendor/tree-sitter-toml Add syntax highlighting for more formats 2026-02-07 11:37:22 -03:00
.gitignore chore: expand tests and update docs 2026-02-24 20:56:13 -03:00
build.rs feat: Improvements on terminal and tree sitter highlight 2026-02-20 20:17:38 -03:00
Cargo.lock Implement second-pass CODE_REVIEW improvements 2026-02-20 00:52:50 -03:00
Cargo.toml feat: Few improvements 2026-02-20 16:33:47 -03:00
CODE_REVIEW.md Update docs, roadmap, and tools panel background installs 2026-02-19 21:51:48 -03:00
installer.sh feat: Improvements on highlight 2026-02-25 08:12:09 -03:00
README.md Update README.md 2026-02-25 11:16:52 +00:00
RULES.md feat: bunch of changes 2026-02-10 21:22:55 -03:00

Ehwaz Logo

Ehwaz

Ehwaz is a native code editor built in Rust with Slint. It focuses on speed, split-pane editing, strong keyboard workflows, and local-first tooling.

Current version: 0.0.4

Quick start

1) Prerequisites

  • Rust stable toolchain (install with rustup)
  • Optional: ffplay (from FFmpeg) for Markdown audio/video playback

Install FFmpeg:

  • Debian/Ubuntu: sudo apt install ffmpeg
  • Fedora: sudo dnf install ffmpeg
  • Arch: sudo pacman -S ffmpeg
  • macOS (Homebrew): brew install ffmpeg

2) Build and run

cargo build
cargo run

3) Install locally on Linux (optional)

cargo build --release
./installer.sh install

To update an existing local install:

cargo build --release
./installer.sh update

If the launcher icon was cached by your desktop, run ./installer.sh update again to rewrite the desktop entry with the full icon path.

Useful development commands:

cargo test
cargo test --test buffer
cargo test --test parser
cargo test --test markdown
cargo bench --no-run

Integration tests are grouped by domain under tests/ (buffer, parser, markdown). Private implementation-focused unit tests may still remain colocated in src/ modules.

What you can do in Ehwaz

  • Edit multiple files with tab reordering and close actions.
  • Split the editor into left/right panes and drag tabs across panes.
  • Use project/file search and replace with optional regex mode.
  • Work with Markdown preview (including tables, code blocks, and media links).
  • Use command palette actions for navigation, snippets, theme switching, and tool setup.
  • Install and update LSP servers and formatters into local Ehwaz tool directories.
  • Use syntax highlighting, code folding, bracket matching, indentation highlights, and ruler support.

Supported languages

Ehwaz currently includes syntax support and language tooling flows for:

  • Rust
  • Python
  • JavaScript / TypeScript
  • Vue
  • HTML / CSS
  • JSON / YAML / XML / TOML
  • Dockerfile
  • Bash
  • Markdown
  • OCaml

First-time usage flow

  1. Open Ehwaz with cargo run.
  2. Open a project folder (Alt+F).
  3. Open files in the explorer.
  4. Open command palette (Ctrl+P) and test:
    • file search
    • @symbol navigation in the active file
    • :line navigation
  5. Open search (Ctrl+F) or replace (Ctrl+H).
  6. Split tabs with View -> Split Left or View -> Split Right.
  7. Open tools panel from the View menu to manage themes, formatters, and LSPs.

Keyboard shortcuts

File and UI

Shortcut Action
Ctrl+N New file
Alt+O Open file
Alt+F Open folder
Ctrl+S Save file
Ctrl+W Close active tab
Ctrl+T Toggle terminal panel
Ctrl+K Open configuration file
Ctrl++ / Ctrl+= Increase UI/editor font size
Ctrl+- Decrease UI/editor font size

Editing

Shortcut Action
Ctrl+Z Undo
Ctrl+Shift+Z / Ctrl+Y Redo
Ctrl+X Cut (selection, or current line if no selection)
Ctrl+C Copy (selection, or current line if no selection)
Ctrl+V Paste
Tab Indent at cursor by tab size
Shift+Tab Outdent current line by tab size
Ctrl+A Select all
Ctrl+D Duplicate line
Ctrl+Shift+K Delete line
Ctrl+Enter Insert line below
Ctrl+Shift+Enter Insert line above
Ctrl+] Indent
Ctrl+[ Outdent
Ctrl+/ Toggle line comment
Alt+Shift+R Format document (external formatter)

Navigation and tools

Shortcut Action
Ctrl+P Open command palette
Ctrl+P, then @query Symbol navigation in active file
Alt+G, then :<line> Go to line
Ctrl+F Open search panel
Ctrl+H Open replace panel
Alt+Shift+H LSP hover
Alt+Shift+C LSP completion hints
Alt+Shift+D LSP go-to-definition

Configuration

Ehwaz creates settings.json on first launch. Missing fields fall back to defaults.

Settings file location

OS Path
Linux ~/.config/ehwaz/settings.json
macOS ~/Library/Application Support/ehwaz/settings.json
Windows %APPDATA%\ehwaz\settings.json

Common settings

{
  "font_family": "monospace",
  "font_size": 14.0,
  "line_height": 22.0,
  "letter_spacing": 0.0,
  "cursor_width": "thin",
  "tab_size": 4,
  "max_column": 120,
  "ruler_color": "#3a3a3a",
  "ruler_width": 1.0,
  "theme": "One Dark Pro",
  "format_on_save": false,
  "bracket_matching_highlight": true,
  "indentation_rainbow_highlight": true,
  "window_width": 1200,
  "window_height": 800
}

Persistent UI/session data

Ehwaz stores recent files, explorer roots, and split-pane tab state in storage.json in the same config directory:

  • Linux: ~/.config/ehwaz/storage.json
  • macOS: ~/Library/Application Support/ehwaz/storage.json
  • Windows: %APPDATA%\ehwaz\storage.json

If you are starting from defaults, these are usually the most useful values to review first:

Setting Why it matters
font_size Controls editor and panel readability
line_height Improves text scanning comfort
tab_size Keeps indentation style consistent across files
max_column Enables a visual line-length guide
theme Improves contrast and visual comfort
format_on_save Automates formatting on save when tools are installed

Themes

Built-in themes (22):

  • One Dark Pro
  • Dracula
  • Monokai Pro
  • Tokyo Night
  • Ayu Dark
  • GitHub Dark
  • Night Owl
  • Cobalt2
  • Hagalaz
  • Nauthiz
  • Eihwaz
  • Algiz
  • Catppuccin Mocha
  • Catppuccin Macchiato
  • Catppuccin Frappe
  • Catppuccin Latte
  • One Light
  • Solarized Light
  • Sowilo
  • Dagaz
  • Berkano
  • Ingwaz

LSP and formatter management

Ehwaz can install/update tools through command palette and tools panel actions. Installed tools live inside Ehwaz-owned local directories:

  • LSP: ~/.config/ehwaz/lsp (Linux)
  • Formatters: ~/.config/ehwaz/formatters (Linux)

Install logs are written under each toolchain's logs/ directory.

Examples from command palette:

  • LSP: Install/Update rust-analyzer (Rust)
  • LSP: Install/Update pyright (Python)
  • Formatter: Install/Update rustfmt (Rust)
  • Formatter: Install/Update prettier (TypeScript)

Useful command palette queries:

  • @name to jump to symbols in the active file
  • :120 to jump to line 120
  • theme to quickly switch color themes
  • lsp / formatter to find tool actions quickly

Project structure (high level)

src/
  main.rs                app startup and wiring
  app.rs                 core AppState and editor model
  config.rs              settings and storage management
  command_palette.rs     command palette logic
  lsp_sync.rs            LSP sync and UI updates
  formatting.rs          formatter integration
  tools_panel.rs         tools panel actions and data
  ui/handlers/           keyboard/mouse/file/tab/explorer handlers
ui/
  main.slint             window composition
  editor.slint           editor component
  search_panel.slint     search/replace UI
  tools_panel.slint      themes/formatter/LSP panel UI
  terminal_pane.slint    terminal and output panel UI
tests/
  buffer.rs              buffer domain integration suite entrypoint
  parser.rs              parser domain integration suite entrypoint
  markdown.rs            markdown domain integration suite entrypoint

Troubleshooting

  • If media controls fail in Markdown preview, check ffplay -version.
  • If LSP/formatter install fails, inspect logs in:
    • ~/.config/ehwaz/lsp/logs/
    • ~/.config/ehwaz/formatters/logs/
  • If UI font size becomes too large/small, edit font_size in settings.json.
  • If syntax highlighting looks stale after heavy edits, save and reopen the file to force a clean refresh.

License

MIT — https://git.rdenadai.dev/rdenadai/ehwaz