Revw
April 4, 2026 · View on GitHub
A vim-like TUI for managing notes and resources.

Features
- Vim-like terminal user interface
- Clipboard integration
- Clean card-based interface
- Toggle between View mode and raw Edit mode
Format
Outside
External resources and references:
- Name: Title or identifier of the resource
- Context: Description or notes about the resource
- URL: Web address or link
- Percentage: Score or progress indicator, sortable for ordering
Inside
Internal notes or thoughts with timestamps:
- Date: Timestamp of the entry, sortable for ordering
- Context: notes or thoughts
Markdown Format
## OUTSIDE
### Rust Programming Language
A systems programming language focused on safety, speed, and concurrency.
**URL:** https://www.rust-lang.org/
**Percentage:** 100%
## INSIDE
### 2025-01-01 00:00:00
Finally learned how to use cargo! Running 'cargo new my_project' creates such a clean project structure.
JSON Format
{
"outside": [
{
"name": "Rust Programming Language",
"context": "A systems programming language focused on safety, speed, and concurrency.",
"url": "https://www.rust-lang.org/",
"percentage": 100
}
],
"inside": [
{
"date": "2025-01-01 00:00:00",
"context": "Finally learned how to use cargo! Running 'cargo new my_project' creates such a clean project structure."
}
]
}
Install
cargo install --git https://github.com/rlelf/revw.git --locked
Or install a specific version:
cargo install --git https://github.com/rlelf/revw.git --tag v0.x.x --locked
Or download from Releases
Usage
Notes and resources Management
Track learning resources, books, articles, and tools you're exploring.
Learning diary
Document your daily learning progress with timestamped notes.
LLM-Assisted Workflows
Revw integrates seamlessly with AI assistants:
Workflow 1: LLM generates → You review
- Ask an LLM to generate a reading list or resource collection
- Paste the Markdown or JSON into Revw (
:v,:vi,:vo,:vai,:vao) - Browse and organize visually
Workflow 2: You create → LLM assists
- Maintain your notes in Revw's clean interface
- Copy sections to clipboard (
:c,:ci,:co) - Share with LLM for analysis, summarization, or questions
Command Line Options
Basic Usage:
# View help
revw --help
# Show version
revw --version
# Start without file
revw
# View mode
revw file.md
revw file.json
# Edit mode
revw --edit file.md
revw --edit file.json
File Operations:
# Stdout and stdin
revw --stdout file.md # file → stdout
revw --stdout file.json # file → stdout
revw --stdout --inside file.md # Output only INSIDE section
revw --stdout --outside file.md # Output only OUTSIDE section
cat file.md | revw --stdout # stdin → stdout
cat file.json | revw --stdout # stdin → stdout
cat file.md | revw --stdout --inside # stdin → INSIDE only
cat file.md | revw --stdout --outside # stdin → OUTSIDE only
# Format conversion (JSON ↔ Markdown)
revw --stdout --json file.md # Markdown → JSON
revw --stdout --markdown file.json # JSON → Markdown
cat file.md | revw --stdout --json # stdin Markdown → JSON
cat file.json | revw --stdout --markdown # stdin JSON → Markdown
# Filter entries
revw --stdout --filter pattern file.md # Filter and output to stdout
revw --stdout --filter pattern file.json
revw --stdout --filter pattern --inside file.md
revw --stdout --filter pattern --outside file.json
revw --stdout --filter pattern --context 100 file.md # Show 100 chars around match in context
revw --stdout --filter pattern --context 100 file.json
# Order entries, writes in-place
revw --order file.md # Order by percentage then name
revw --order file.json
revw --order-percentage file.md # Order by percentage only
revw --order-name file.json # Order by name only
revw --order-random file.md # Order randomly
# Append entries from stdin (JSON or Markdown) into file, writes in-place
cat new_entries.md | revw --append file.md # Append both inside and outside
cat new_entries.json | revw --append file.json
cat new_entries.md | revw --append --inside file.md # Append inside only
cat new_entries.json | revw --append --outside file.json # Append outside only
# Delete entries by field, writes in-place
revw --delete-outside-name "pattern" file.md
revw --delete-outside-context "pattern" file.json
revw --delete-inside-date "pattern" file.md
revw --delete-inside-context "pattern" file.json
# Token count
revw --token file.md # Show token counts for all formats
revw --token file.json
cat file.md | revw --token # Token count from stdin
cat file.json | revw --token
Controls
View Mode
Navigation:
j/kor↑/↓select card (or mouse wheel)h/lorf/bscroll card contentggselect first cardGselect last card:gijump to first INSIDE entry:gojump to first OUTSIDE entry/search forwardn/Nnext/prev match (jumps to card):nohclear search highlighting
Editing:
Enteropen edit overlay for selected card:aiadd new INSIDE entry (jumps to it):aoadd new OUTSIDE entry (jumps to it):dddelete selected entry (entire object):yyduplicate selected entry (entire object):oorder entries (by percentage then name) and auto-save:oporder by percentage only and auto-save:onorder by name only and auto-save:ororder randomly and auto-save:f patternfilter entries by pattern
Visual Mode (multi-card selection):
venter Visual modej/kextend selection:cccopy selected cards (rendered format):ccjcopy selected cards (JSON format):ccmcopy selected cards (Markdown format):dcdelete selected cardsEscorCtrl+[exit Visual mode
Copy/Paste:
:ccopy all rendered content (with OUTSIDE/INSIDE headers):cicopy INSIDE section only:cocopy OUTSIDE section only:cjcopy all content (JSON format):cmcopy all content (Markdown format):cucopy URL from selected card:vpaste file path or JSON content:vupaste URL from clipboard to selected card:vipaste INSIDE from clipboard (overwrite):vopaste OUTSIDE from clipboard (overwrite):vapaste both INSIDE and OUTSIDE from clipboard (append):vaipaste INSIDE from clipboard (append):vaopaste OUTSIDE from clipboard (append):xiclear INSIDE section:xoclear OUTSIDE section
Filter:
:f patternfilter entries by pattern:nofclear filter
Settings:
:set numberor:set nuenable line numbers (Edit mode):set nonumberor:set nonudisable line numbers:set relativenumberor:set rnuenable relative line numbers (Edit mode):set norelativenumberor:set nornudisable relative line numbers:set card=Nset max visible cards (1-10, default: 5):set border=roundeduse rounded border style (default):set border=plainuse plain border style:set extensionshow file extensions in explorer (default):set noextensionhide file extensions in explorer:set jsonset format to JSON (for unnamed files):set markdownset format to Markdown (for unnamed files)
Other:
rtoggle View/Edit mode:Lexploreor:Lexor:lxtoggle file explorer (left):outlineor:oltoggle card outline panel (right)Ctrl+w wcycle between windows (explorer → content → outline)Ctrl+w hmove to explorer (left)Ctrl+w lmove to outline (right)Ctrl+w j/kmove to file (center):xclear content:hor?toggle help modeqorEscquit
File Explorer:
j/kor↑/↓navigate files/directoriesh/lor←/→scroll left/right (for long filenames)gg/Gjump to first/last entry/search files by namen/Nnext/prev search matchgopreview entryEnteropen file (JSON only) or expand/collapse directoryqclose explorer
Outline Panel:
j/kor↑/↓navigate entriesh/lor←/→scroll left/right (for long entry names)/search entriesn/Nnext/prev search matchgg/Gjump to first/last entrygopreview entryEnterjump to entry and release focusqclose outline
Explorer File Operations (when explorer has focus):
Enteroroopen file or navigate into directory:acreate new file in current directory (supports .json, .md):dcreate new directory:mrename/move selected file/directory (supports relative paths like./folder/file.json, or justnewname.json):dddelete selected file (confirms with yes/no):yycopy selected file (prompts for new filename)
Edit Overlay
Field Selection Mode (default):
j/kor↑/↓navigate between fieldsEnterenter Normal mode (renders\nas newlines, allows navigation)ienter Insert mode (renders\nas newlines, allows editing)wsave changesEscorqcancel
Normal Mode (after pressing Enter):
- Renders
\nas actual newlines for multi-line viewing h/j/k/lor arrow keys navigateggjump to start,Gjump to endw/b/eword navigation0/$start/end of linex/Xdelete characterienter Insert modeEscorCtrl+[exit to field selection mode
Insert Mode (after pressing i):
- Renders
\nas actual newlines for multi-line editing - Type to edit text
↑/↓/←/→move cursorEnterinsert literal newline (\n)Backspacedelete character (including\n)EscorCtrl+[exit to field selection mode
Edit Mode
Navigation:
h/j/k/lor arrow keys - move cursorwnext word startenext word endbprevious word start0move to start of line$move to end of lineggjump to topGjump to bottom:gijump to first INSIDE entry:gojump to first OUTSIDE entry- Mouse wheel - scroll (drag disabled)
Editing:
ienter insert modexdelete character at cursorXdelete character before cursordddelete current lineyyyank (copy) current lineppaste yanked line after current lineEscorCtrl+[exit insert mode:dddelete current entry (entire object):yyduplicate current entry (entire object)uundoCtrl+rredog-undog+redo
Search:
/search forwardn/Nnext/prev match:nohclear search highlighting
Commands:
:aiadd INSIDE entry:aoadd OUTSIDE entry:oorder entries (by percentage then name):oporder by percentage only:onorder by name only:ororder randomly:dddelete current entry (entire object):yyduplicate current entry (entire object):ccopy all content:cicopy INSIDE section (JSON format):cocopy OUTSIDE section (JSON format):cjcopy all content (JSON format):cmcopy all content (Markdown format):vpaste from clipboard:vipaste INSIDE from clipboard (overwrite):vopaste OUTSIDE from clipboard (overwrite):vapaste both INSIDE and OUTSIDE from clipboard (append):vaipaste INSIDE from clipboard (append):vaopaste OUTSIDE from clipboard (append):xclear all content:xiclear INSIDE section:xoclear OUTSIDE section:nofclear filter:wsave:wqsave and quit:qquit:ereload file:artoggle auto-reload (default: on):markdownexport current file to Markdown format (same folder, .md extension):jsonexport current file to JSON format (same folder, .json extension):Lexploreor:Lexor:lxtoggle file explorer:outlineor:oltoggle card outline viewCtrl+w wcycle between explorer and file windowCtrl+w hmove to explorer window (left)Ctrl+w lmove to file window (right):hor?help
Settings:
:set numberor:set nuenable line numbers:set nonumberor:set nonudisable line numbers:set relativenumberor:set rnuenable relative line numbers:set norelativenumberor:set nornudisable relative line numbers:set card=Nset max visible cards (1-10, default: 5):set border=roundeduse rounded border style (default):set border=plainuse plain border style:set extensionshow file extensions in explorer (default):set noextensionhide file extensions in explorer:set jsonset format to JSON (for unnamed files):set markdownset format to Markdown (for unnamed files)
Substitute:
:s/foo/bar/substitute first occurrence in current line:s/foo/bar/gsubstitute all occurrences in current line:%s/foo/bar/substitute first occurrence in all lines:%s/foo/bar/gsubstitute all occurrences in all lines
Configuration
Revw can be configured using a .revwrc file in your home directory (~/.revwrc).
Configuration Options
Line Numbers:
set number # Enable line numbers (Edit mode)
set nonumber # Disable line numbers (default)
set relativenumber # Enable relative line numbers (Edit mode)
set norelativenumber # Disable relative line numbers (default)
Max Visible Cards:
set card=5 # Set max visible cards (1-10, default: 5)
Border Style:
set border=rounded # Use rounded border style (default)
set border=plain # Use plain border style
File Extensions:
set extension # Show file extensions in explorer (default)
set noextension # Hide file extensions in explorer
Color Schemes:
colorscheme Default # Default color scheme
You can also change the color scheme at runtime using :colorscheme <name>.
Available themes: Default, Morning, Evening, Pablo, Ron, Blue
Example .revwrc
# Example configuration
colorscheme Default
set number
set card=5
Changelog
See CHANGELOG for version history and changes.
License
MIT