| .cargo | ||
| benches | ||
| queries | ||
| src | ||
| static | ||
| tests | ||
| ui | ||
| vendor/tree-sitter-toml | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CODE_REVIEW.md | ||
| installer.sh | ||
| README.md | ||
| RULES.md | ||
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
- Open Ehwaz with
cargo run. - Open a project folder (
Alt+F). - Open files in the explorer.
- Open command palette (
Ctrl+P) and test:- file search
@symbolnavigation in the active file:linenavigation
- Open search (
Ctrl+F) or replace (Ctrl+H). - Split tabs with View -> Split Left or View -> Split Right.
- 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
Recommended first-run settings
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:
@nameto jump to symbols in the active file:120to jump to line 120themeto quickly switch color themeslsp/formatterto 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_sizeinsettings.json. - If syntax highlighting looks stale after heavy edits, save and reopen the file to force a clean refresh.