folea is a keyboard-driven, minimalist note manager for Typst
notes. It is a read/navigation shell for a plain directory of .typ files: open a vault,
search, jump, browse links, and read rendered Typst.
folea does not edit notes in-app. The open editor command (<C-e> by default) opens the
current note in an external editor such as VS Code, Neovim, or whatever you prefer.
![]() |
![]() |
![]() |
![]() |
Press Ctrl+n to create a note beside the current one, or use % in the file tree to create it at
the selected location. Folea adds .typ automatically and lets you start empty or choose a template
from <vault>/_templates/*.typ. Create and edit template files in your external editor, and manage
them from the command palette.
Notes render in-app and update when their source, imports, or includes change. Compile errors keep
the last successful rendering visible while showing diagnostics. Ctrl+p lists recent notes and
searches vault contents, / searches the current note, and full-vault search is in the command
palette.
Link notes with native Typst syntax such as #link("other.typ")[Other]; Folea follows these inside
the vault.
Press b to browse backlinks and outgoing #link, #import, and #include references, or o to
jump through the heading outline.
Use Vim-style keys to scroll, jump, and zoom. Press s for caret navigation over rendered text;
visual mode selects text for copying, while Enter or gd follows a link.
Folea is under active development. GitHub Releases are manually cut from
mainand are not signed.
Package managers are the recommended installation method. Development packages are built from the
develop branch and may contain unstable or incomplete changes. Package identifiers retain their
-dev or -git suffix, but the installed application and command are always lowercase folea.
Check the exact source commit with folea --build-info.
Windows
Install with Scoop. The package builds an exact develop commit locally:
scoop bucket add folea https://github.com/ivanovanatoliy/scoop-folea
scoop install folea-devmacOS
Install the app with Homebrew. The cask builds an exact develop commit locally:
brew install --cask ivanovanatoliy/folea/folea-devThe app uses an ad-hoc signature rather than an Apple Developer certificate or notarization.
Linux
Arch Linux, Manjaro, and EndeavourOS (AUR):
yay -S folea-gitDebian, Ubuntu, and Linux Mint (APT):
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://ivanovanatoliy.github.io/folea/repo-signing-key.asc \
| sudo tee /etc/apt/keyrings/folea-packages.asc >/dev/null
curl -fsSL https://ivanovanatoliy.github.io/folea/apt/folea.sources \
| sudo tee /etc/apt/sources.list.d/folea.sources >/dev/null
sudo apt update
sudo apt install folea-devFedora (DNF):
sudo curl -fsSL https://ivanovanatoliy.github.io/folea/rpm/folea.repo \
-o /etc/yum.repos.d/folea.repo
sudo dnf install folea-devClone the develop branch, then build and install Folea for the current user:
npm install
npm run app:installThe install script builds the unpacked app and registers it with the OS. To remove it:
npm run app:uninstallGlobal config lives in Electron's userData directory:
- Linux:
~/.config/folea/ - macOS:
~/Library/Application Support/folea/ - Windows:
%APPDATA%/folea/
Vault-local prefs may override global prefs key by key from <vault>/.folea/prefs.config.
prefs.config:
search.vaultCaseSensitive = false
search.inFileCaseSensitive = false
theme = darkeditor.command opens the current note when you press <C-e>. It defaults to VS Code
(code --reuse-window). %FILE% is replaced with the note path; FOLEA_EDITOR_CMD env var
overrides it at runtime.
VS Code (default)
editor.command = code --reuse-window %FILE%Neovim
editor.command = kitty -e nvim --listen %SOCK% %FILE%%SOCK% is replaced with a vault-scoped socket path. With --listen, folea reuses an
already-open nvim session — subsequent editor.open calls switch the buffer instead of opening
a new window. Omit %SOCK% if you don't need session reuse.
keys.config:
document.scrollHalfDown <C-f>
view.toggleTree t
editor.open e
The command ID is the same ID shown in the command palette.
Default Key Bindings
All bindings are remappable via keys.config. The command ID shown in the palette is the
key used for remapping.
| Key | Action |
|---|---|
j / k |
Scroll down / up |
h / l |
Scroll left / right |
Ctrl+d / Ctrl+u |
Scroll half page down / up |
gg / G |
Jump to top / bottom |
n / N |
Next / previous search match |
: |
Command palette |
/ |
In-file search |
Ctrl+p |
Quick open note |
Ctrl+b |
Toggle file tree |
o |
Document outline |
b |
Links panel |
s |
Enter caret mode |
Ctrl+e |
Open current note in editor |
= |
Fit page width |
+ / - |
Zoom in / out |
| Key | Action |
|---|---|
j / k |
Move down / up |
l / h |
Expand / collapse |
gg / G |
First / last item |
/ |
Filter tree |
Enter |
Open selected note |
| Key | Action |
|---|---|
h / j / k / l |
Move caret |
{ / } |
Previous / next paragraph |
gg / G |
Document start / end |
v |
Enter visual selection |
y |
Yank selection (in visual mode) |
Enter / gd |
Follow link under caret |
m<x> |
Set mark x |
'<x> |
Jump to mark x |
npm install
npm run dev
npm run typecheck
npm run lint
npm test
npm run test:e2e
npm run rebuildnpm run test:e2e launches Electron through Playwright.
See Contributing before opening a pull request.
Apache-2.0. Bundled third-party components are attributed in NOTICE.



