An open source, lightweight, fast, terminal-based markdown research tool built with Rust.
- Rust 1.70+ (run
rustup updateto update) - A terminal emulator (for inline image preview: iTerm2, Kitty, WezTerm, Ghostty, or Sixel-compatible terminal)
cargo install ekphosgit clone https://github.com/hanebox/ekphos.git
cd ekphos
docker build -t ekphos-ssh .
docker compose up -dand after the container is up, you can SSH into the machine with the following command
ssh ekphos@your-docker-container-ip
git clone https://github.com/hanebox/ekphos.git
cd ekphos
make
sudo make installcargo install ekphos| Flag | Description |
|---|---|
-h, --help |
Print help information |
-v, --version |
Print version |
-c, --config |
Print config file path |
-d, --dir |
Print notes directory |
sudo make uninstallcargo uninstall ekphosConfiguration is stored in ~/.config/ekphos/config.toml.
# ~/.config/ekphos/config.toml
notes_dir = "~/Documents/ekphos"
welcome_shown = false
theme = "catppuccin-mocha"| Setting | Description | Default |
|---|---|---|
notes_dir |
Directory where notes are stored | ~/Documents/ekphos |
welcome_shown |
Show welcome dialog on startup | true |
theme |
Theme name (without .toml extension) | catppuccin-mocha |
Note: This configuration format requires v0.3.0 or later. Earlier versions have a broken config system, please upgrade to v0.3.0 to enjoy proper configuration and theming support.
Themes are stored in ~/.config/ekphos/themes/ and use the Alacritty color scheme format.
catppuccin-mocha(default)
Create a .toml file in the themes directory using the Alacritty color format:
# ~/.config/ekphos/themes/mytheme.toml
[colors.primary]
background = "#1e1e2e"
foreground = "#cdd6f4"
[colors.cursor]
text = "#1e1e2e"
cursor = "#f5e0dc"
[colors.selection]
text = "#1e1e2e"
background = "#f5e0dc"
[colors.normal]
black = "#45475a"
red = "#f38ba8"
green = "#a6e3a1"
yellow = "#f9e2af"
blue = "#89b4fa"
magenta = "#f5c2e7"
cyan = "#94e2d5"
white = "#bac2de"
[colors.bright]
black = "#585b70"
red = "#f38ba8"
green = "#a6e3a1"
yellow = "#f9e2af"
blue = "#89b4fa"
magenta = "#f5c2e7"
cyan = "#94e2d5"
white = "#a6adc8"Then set in config:
theme = "mytheme"Ekphos is fully compatible with Alacritty Themes. To use any Alacritty theme:
- Browse themes at https://github.com/alacritty/alacritty-theme/tree/master/themes
- Copy the theme file (e.g.,
dracula.toml) to your themes directory:# Example: Download Dracula theme curl -o ~/.config/ekphos/themes/dracula.toml \ https://raw.githubusercontent.com/alacritty/alacritty-theme/master/themes/dracula.toml
- Set the theme in your config using the filename (without
.toml):# ~/.config/ekphos/config.toml theme = "dracula"
Theme naming convention:
| Theme File | Config Setting |
|---|---|
~/.config/ekphos/themes/dracula.toml |
theme = "dracula" |
~/.config/ekphos/themes/gruvbox_dark.toml |
theme = "gruvbox_dark" |
~/.config/ekphos/themes/tokyo-night.toml |
theme = "tokyo-night" |
Note: Alacritty theme compatibility requires v0.3.0 or later. Earlier versions have a broken theming system.
Ekphos has three panels:
- Sidebar (left): List of notes
- Content (center): Note content with markdown rendering
- Outline (right): Auto-generated headings for quick navigation
Use Tab or Shift+Tab to switch between panels.
- Press
nto create a new note - Enter the note name
- Press
Enterto confirm
Notes are stored as .md files in your configured notes directory.
- Select the note in the sidebar
- Press
rto rename - Edit the note name (pre-filled with current name)
- Press
Enterto confirm orEscto cancel
- Select the note in the sidebar
- Press
dto delete - Confirm with
yor cancel withn
- Select a note in the sidebar
- Press
eto enter edit mode - Edit using vim keybindings
- Press
Ctrl+sto save - Press
Escto exit edit mode
| Key | Action |
|---|---|
i |
Insert mode |
a |
Insert after cursor |
A |
Insert at end of line |
I |
Insert at start of line |
o |
New line below |
O |
New line above |
v |
Visual mode |
j/k |
Move cursor up/down |
h/l/w/b |
Move by word |
0/$ |
Line start/end |
g/G |
Top/bottom of file |
x |
Delete character |
d |
Delete selection |
y |
Yank (copy) selection |
p |
Paste |
u |
Undo |
Ctrl+r |
Redo |
Press v in normal mode to enter visual mode for text selection.
| Key | Action |
|---|---|
h/l |
Extend selection |
w/b |
Extend by word |
y |
Yank selection |
d/x |
Delete selection |
Esc |
Cancel |
| Syntax | Rendered As |
|---|---|
# Heading |
◆ HEADING (blue) |
## Heading |
■ Heading (green) |
### Heading |
▸ Heading (yellow) |
#### Heading |
› Heading (mauve) |
##### Heading |
Heading (teal) |
###### Heading |
Heading (subtle) |
- item |
• item |
 |
Inline image |
Use standard markdown image syntax:


Supported formats: PNG, JPEG, GIF, WebP, BMP
- Navigate to the image line in content view
- Press
Enteroroto open in system viewer
For inline image preview, use a compatible terminal:
- iTerm2 (macOS)
- Kitty
- WezTerm
- Sixel-enabled terminals
The outline panel shows all headings in your note:
- Press
Tabto focus the outline - Use
j/kto navigate headings - Press
Enterto jump to that heading
| Key | Action |
|---|---|
j/k |
Navigate up/down |
Tab |
Switch focus |
/ |
Search notes (in sidebar) |
n |
New note |
r |
Rename note |
d |
Delete note |
e |
Edit mode |
Esc |
Exit edit mode / Cancel |
Ctrl+s |
Save |
Enter |
Open image / Jump to heading |
? |
Show help |
q |
Quit |
Ekphos is open source and contributions are welcome.
git clone https://github.com/hanebox/ekphos.git
cd ekphos
make runmain- Development branchrelease- Stable release branch
- Fork the repository
- Create a feature branch from
main - Make your changes
- Submit a PR to the
mainbranch
This project is in an early development stage, so there will be frequent unexpected breaking changes throughout the pre-release, but things should remain usable throughout this stage.
We don't have socials yet, but things are open for discussion, go create a discussion in this repo for how socials should be done
MIT