Otterly
Open a folder of Markdown notes and get to work. Otterly gives you a clean editor, quick search, and links between notes. The files stay on your computer.
Download
Get the latest Otterly release for macOS, Windows, or Linux. No account is needed.
| Platform | Package to choose |
| ------------------------------ | ------------------------------------------------------------------ |
| macOS (Apple Silicon or Intel) | .dmg for your Mac |
| Windows x64 | setup.exe or .msi, or portable.zip (no install) |
| Linux x64 | .AppImage or .deb |
| Arch Linux x86_64 | AUR package |
Windows portable zip
Unzip it anywhere and run otterly.exe. Everything in the editor works the same as the installed app. Three things differ:
- Updates: a portable copy does not update itself. Download the newest zip and replace
otterly.exe. Keepportable.txtnext to it, because the app reads that file to know it is portable. - File association: nothing is registered with Windows, so use "Open with" > "Choose another app" > "Choose an app on your PC" and pick
otterly.exe. - Settings and the vault list still live in your app data folder (
%APPDATA%\com.otterly.app), not next to the exe. Installed and portable copies share them.
See it in action
Visit the Otterly site for a short tour of the desktop app and a closer look at its features.
Why Otterly
Most note apps ask you to choose between polished UX and file ownership.
Otterly is for people who want both:
- a privacy-focused note-taking app
- a local-first Markdown editor
- an Obsidian alternative that stays close to plain files
- a desktop notes app that does not require plugin hunting to feel usable
Open Markdown Files With Otterly
Otterly can open any .md file, not just notes in a vault. The file opens in its own window. Edits save back to the same file, with its line endings kept. Find in file (Cmd/Ctrl+F), source mode, zoom, and F1 help work there too. Right-click the path in the status bar to copy the Markdown or the path, or to show the file in your file manager.
To make Otterly the default app for Markdown:
- macOS: Select a
.mdfile in Finder, press Cmd+I, pick Otterly under "Open with", and click "Change All". - Windows: Right-click a
.mdfile, choose "Open with" > "Choose another app", pick Otterly, and tick "Always use this app". - Linux: Right-click a
.mdfile in your file manager, open its properties, and set Otterly as the default for "Markdown". From a terminal:xdg-mime default otterly.desktop text/markdown. The desktop file name depends on how you installed Otterly.
Several Windows
- New Window opens another Otterly window on the vault picker. On macOS use the Dock menu or File > New Window (Shift+Cmd+N). The command palette has New Window too. On Windows and Linux, starting Otterly again also opens one.
- In the vault picker and the vault switcher, the window button on a row (or Cmd/Ctrl+Enter on the highlighted row) opens that vault in a new window. Clicking the row opens it in this window.
- A vault is open in one window at a time. Opening a vault that another window has brings that window to the front. Settings, themes and hotkeys are shared by all windows.
Vim Mode
Turn it on in Settings, under Vim. Notes and text files then use Vim keys: hjkl, w b e, 0 $, gg G, d c y with motions and text objects, dd yy p, v V and Ctrl-v, u and Ctrl-r, / search, i a o O, registers, macros, counts, and .. The status bar shows the mode, the keys of a command you are still typing, and the register of a macro you are recording. Normal and visual mode draw a block cursor. Code blocks and tables show their Markdown source while the cursor is inside them, so Vim edits the whole file.
It follows real Vim. The few places where it does not are listed in the package design (packages/markdown_editor/DESIGN.md).
uundoes one typed command or one insert session, like Vim. A macro, a map and.are one step each.:wsaves,:qcloses the tab (it asks first when there are unsaved changes), and:wqdoes both. On a new note,:wqopens the save dialog and keeps the tab open."+yand"+puse the system clipboard.set clipboard=unnamedin your vimrc uses it for every yank and put.oandOcontinue a list, task or quote, like Enter does in insert mode.- Search ignores case unless the pattern has a capital letter.
l keeps moving right.
Key maps and options go in a vimrc file next to settings.json, at . That is ~/Library/Application Support/com.otterly.app/otterly/vimrc on macOS. Settings, under Vim, shows the path. "Open vimrc" there creates it with examples and opens it in its own window. A window reloads it when you come back to it.
let mapleader = " "
imap jk <Esc>
nnoremap Y y$
nnoremap <leader>w :w<CR>
set clipboard=unnamed
set timeoutlen=500
You get map, nmap, vmap, xmap, imap, omap, their noremap and unmap forms (and Vim's short names, such as nn and ino), let mapleader, and set. A vimrc pasted from terminal Vim works: Vimscript (if, function, autocmd, Plug), plugin maps (, ), command-line maps, and settings this editor has no use for (syntax on, set number, set smarttab, set textwidth=80) are skipped, and Settings lists them apart from the lines that really failed.
Build From Source
Prerequisites
- Node.js 20+
- pnpm
- Rust toolchain
- Platform-specific build tools from Tauri prerequisites
Run
pnpm install
pnpm tauri dev
Build
pnpm tauri build
Contributing
Otterly uses a ports-and-adapters architecture so the business logic stays testable and the UI remains replaceable.
- Architecture: docs/architecture.md
- Reusable Markdown editor: packages/markdown_editor (CodeMirror 6, no Svelte or Tauri dependency; not published yet)
- Editor acceptance contract: docs/markdown_editor_behavior_spec.md
- Coding guidelines: devlog/coding_guidelines.md
- Validation:
pnpm check
pnpm lint
pnpm test
cd src-tauri && cargo check
pnpm format
Star History
License
MIT. See LICENSE.