calki 🧮 📝
A terminal-based Markdown note-taking tool and interactive math sheet calculator with local wiki-style link navigation.
calki combines real-time document-based calculations with the inter-linked organization of a personal wiki, all inside a fast, Vim-friendly terminal interface.

🚀 Key Features
-
Interactive Math Sheets: Real-time evaluation of mathematical equations. Write assignments or expressions, end them with
=>, and watch them calculate instantly when you exit Insert mode.
-
Inline Math Evaluation: Run calculations right inside your sentences using backticks:
`10m * 5m =>`. -
Dimensional & Currency Analysis: Supports physical units (length, speed, data size, temperature, time) and live-updated currency conversion (fetched via a background thread to prevent startup latency).

-
Wiki Link Navigation: Create double-bracket links like
[[Project Goals]]to connect notes. PressEnteron a link in Normal mode to jump to it, andBackspaceorCtrl-oto navigate back. -
Todo List Checkboxes: Press
tin Normal mode while hovering over any list line to toggle the checkbox state[ ]<->[x], or convert a plain list bullet into a checkbox item automatically. -
Custom Functions: Define custom functions directly in your notes (e.g.
f(x) = x^2 + 2*x) and use them elsewhere in the same file. They are also displayed under the Variables panel. -
Triple-Panel Layout:
- Left Panel (Wiki Map): View references and incoming backlinks for the current note.
- Center Panel (Editor): Full-featured editor powered by
edtuiwith Vim motion bindings. - Right Panel (Variables Inspector): View active variable scopes and mathematical evaluations.
-
Persistent Session & Customization: Automatically saves your panel layout, cursor position, and preferences in
~/.config/calki/config.json. -
Automatic Version Checking: Checks for new updates on launch from GitHub in a non-blocking background thread and provides an option to skip/ignore warnings for the current update.
🛠️ Installation & Updating
Prerequisites
To compile and run calki, you will need the Rust toolchain installed on your machine. If you do not have it, install it via rustup:
|
Build from Source
-
Clone the repository:
-
Build the release binary:
-
(Optional) Install the binary to your Cargo binary path:
-
Run
calki:If installed via cargo path:
Or run the release binary directly:
🔄 How to Update
When calki alerts you on launch that a new version is available, you can pull the latest changes and rebuild it with:
-
Navigate to your cloned
calkidirectory: -
Pull the latest commits from the main branch:
-
Rebuild the release binary and reinstall:
# or reinstall globally via:
⌨️ Keybindings & Navigation
calki uses Vim-like modal editing. You can navigate the editor using standard Vim motions (h, j, k, l, w, b, etc.). Repeat multipliers are supported for repeatable motions (e.g., 5j moves 5 lines down, 12w jumps forward 12 words, and 3x deletes 3 characters).
Panel Controls
| Key | Action |
|---|---|
F2 |
Toggle Left Panel (Wiki Map) |
F3 |
Toggle Right Panel (Variables Inspector) |
Ctrl-h / Shift-H |
Move focus to the panel on the left |
Ctrl-l / Shift-L |
Move focus to the panel on the right |
Help & Reference Modals
| Key | Action |
|---|---|
F1 |
Toggle the unified Help & Math Function Guide |
Wiki Navigation (Normal Mode)
| Key | Action |
|---|---|
Enter |
Follow [[Wiki Link]] under the cursor / Create note |
Backspace or Ctrl-o |
Go back to the previous note in history |
Editor Actions
| Key (Mode) | Action |
|---|---|
t (Normal) |
Toggle todo item checkbox [ ] <=> [x] / Convert plain list bullet to todo checkbox |
Enter (Visual) |
Wrap the highlighted selection in a [[Wiki Link]] |
⚙️ Configuration
calki stores configuration files in your OS-appropriate configuration directory (typically ~/.config/calki/ on Linux/macOS).
The config.json file supports customization of the following options:
scrolloff(integer, default:5): The number of lines to keep visible above and below the cursor when scrolling.mouse_focus_on_hover(boolean, default:true): Iftrue, panel focus changes automatically when hovering the mouse pointer. Iffalse, mouse click is required to focus a panel.expand_variables_on_select(boolean, default:false): Iftrue, the variables panel will dynamically expand to show full variable names/values when it is selected/focused.line_numbers(string, default:"None"): Line numbering mode inside the editor. Supported options are"None","Absolute", and"Relative".
Example configuration file (~/.config/calki/config.json):
📄 License
This project is licensed under the GPL v3 License. See the LICENSE file for details.