Revw

April 4, 2026 · View on GitHub

License: MIT Repo Built With Ratatui

A vim-like TUI for managing notes and resources.

Revw

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

  1. Ask an LLM to generate a reading list or resource collection
  2. Paste the Markdown or JSON into Revw (:v, :vi, :vo, :vai, :vao)
  3. Browse and organize visually

Workflow 2: You create → LLM assists

  1. Maintain your notes in Revw's clean interface
  2. Copy sections to clipboard (:c, :ci, :co)
  3. 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/k or ↑/↓ select card (or mouse wheel)
  • h/l or f/b scroll card content
  • gg select first card
  • G select last card
  • :gi jump to first INSIDE entry
  • :go jump to first OUTSIDE entry
  • / search forward
  • n/N next/prev match (jumps to card)
  • :noh clear search highlighting

Editing:

  • Enter open edit overlay for selected card
  • :ai add new INSIDE entry (jumps to it)
  • :ao add new OUTSIDE entry (jumps to it)
  • :dd delete selected entry (entire object)
  • :yy duplicate selected entry (entire object)
  • :o order entries (by percentage then name) and auto-save
  • :op order by percentage only and auto-save
  • :on order by name only and auto-save
  • :or order randomly and auto-save
  • :f pattern filter entries by pattern

Visual Mode (multi-card selection):

  • v enter Visual mode
  • j/k extend selection
  • :cc copy selected cards (rendered format)
  • :ccj copy selected cards (JSON format)
  • :ccm copy selected cards (Markdown format)
  • :dc delete selected cards
  • Esc or Ctrl+[ exit Visual mode

Copy/Paste:

  • :c copy all rendered content (with OUTSIDE/INSIDE headers)
  • :ci copy INSIDE section only
  • :co copy OUTSIDE section only
  • :cj copy all content (JSON format)
  • :cm copy all content (Markdown format)
  • :cu copy URL from selected card
  • :v paste file path or JSON content
  • :vu paste URL from clipboard to selected card
  • :vi paste INSIDE from clipboard (overwrite)
  • :vo paste OUTSIDE from clipboard (overwrite)
  • :va paste both INSIDE and OUTSIDE from clipboard (append)
  • :vai paste INSIDE from clipboard (append)
  • :vao paste OUTSIDE from clipboard (append)
  • :xi clear INSIDE section
  • :xo clear OUTSIDE section

Filter:

  • :f pattern filter entries by pattern
  • :nof clear filter

Settings:

  • :set number or :set nu enable line numbers (Edit mode)
  • :set nonumber or :set nonu disable line numbers
  • :set relativenumber or :set rnu enable relative line numbers (Edit mode)
  • :set norelativenumber or :set nornu disable relative line numbers
  • :set card=N set max visible cards (1-10, default: 5)
  • :set border=rounded use rounded border style (default)
  • :set border=plain use plain border style
  • :set extension show file extensions in explorer (default)
  • :set noextension hide file extensions in explorer
  • :set json set format to JSON (for unnamed files)
  • :set markdown set format to Markdown (for unnamed files)

Other:

  • r toggle View/Edit mode
  • :Lexplore or :Lex or :lx toggle file explorer (left)
  • :outline or :ol toggle card outline panel (right)
  • Ctrl+w w cycle between windows (explorer → content → outline)
  • Ctrl+w h move to explorer (left)
  • Ctrl+w l move to outline (right)
  • Ctrl+w j/k move to file (center)
  • :x clear content
  • :h or ? toggle help mode
  • q or Esc quit

File Explorer:

  • j/k or ↑/↓ navigate files/directories
  • h/l or ←/→ scroll left/right (for long filenames)
  • gg/G jump to first/last entry
  • / search files by name
  • n/N next/prev search match
  • go preview entry
  • Enter open file (JSON only) or expand/collapse directory
  • q close explorer

Outline Panel:

  • j/k or ↑/↓ navigate entries
  • h/l or ←/→ scroll left/right (for long entry names)
  • / search entries
  • n/N next/prev search match
  • gg/G jump to first/last entry
  • go preview entry
  • Enter jump to entry and release focus
  • q close outline

Explorer File Operations (when explorer has focus):

  • Enter or o open file or navigate into directory
  • :a create new file in current directory (supports .json, .md)
  • :d create new directory
  • :m rename/move selected file/directory (supports relative paths like ./folder/file.json, or just newname.json)
  • :dd delete selected file (confirms with yes/no)
  • :yy copy selected file (prompts for new filename)

Edit Overlay

Field Selection Mode (default):

  • j/k or ↑/↓ navigate between fields
  • Enter enter Normal mode (renders \n as newlines, allows navigation)
  • i enter Insert mode (renders \n as newlines, allows editing)
  • w save changes
  • Esc or q cancel

Normal Mode (after pressing Enter):

  • Renders \n as actual newlines for multi-line viewing
  • h/j/k/l or arrow keys navigate
  • gg jump to start, G jump to end
  • w/b/e word navigation
  • 0/$ start/end of line
  • x/X delete character
  • i enter Insert mode
  • Esc or Ctrl+[ exit to field selection mode

Insert Mode (after pressing i):

  • Renders \n as actual newlines for multi-line editing
  • Type to edit text
  • ↑/↓/←/→ move cursor
  • Enter insert literal newline (\n)
  • Backspace delete character (including \n)
  • Esc or Ctrl+[ exit to field selection mode

Edit Mode

Navigation:

  • h/j/k/l or arrow keys - move cursor
  • w next word start
  • e next word end
  • b previous word start
  • 0 move to start of line
  • $ move to end of line
  • gg jump to top
  • G jump to bottom
  • :gi jump to first INSIDE entry
  • :go jump to first OUTSIDE entry
  • Mouse wheel - scroll (drag disabled)

Editing:

  • i enter insert mode
  • x delete character at cursor
  • X delete character before cursor
  • dd delete current line
  • yy yank (copy) current line
  • p paste yanked line after current line
  • Esc or Ctrl+[ exit insert mode
  • :dd delete current entry (entire object)
  • :yy duplicate current entry (entire object)
  • u undo
  • Ctrl+r redo
  • g- undo
  • g+ redo

Search:

  • / search forward
  • n/N next/prev match
  • :noh clear search highlighting

Commands:

  • :ai add INSIDE entry
  • :ao add OUTSIDE entry
  • :o order entries (by percentage then name)
  • :op order by percentage only
  • :on order by name only
  • :or order randomly
  • :dd delete current entry (entire object)
  • :yy duplicate current entry (entire object)
  • :c copy all content
  • :ci copy INSIDE section (JSON format)
  • :co copy OUTSIDE section (JSON format)
  • :cj copy all content (JSON format)
  • :cm copy all content (Markdown format)
  • :v paste from clipboard
  • :vi paste INSIDE from clipboard (overwrite)
  • :vo paste OUTSIDE from clipboard (overwrite)
  • :va paste both INSIDE and OUTSIDE from clipboard (append)
  • :vai paste INSIDE from clipboard (append)
  • :vao paste OUTSIDE from clipboard (append)
  • :x clear all content
  • :xi clear INSIDE section
  • :xo clear OUTSIDE section
  • :nof clear filter
  • :w save
  • :wq save and quit
  • :q quit
  • :e reload file
  • :ar toggle auto-reload (default: on)
  • :markdown export current file to Markdown format (same folder, .md extension)
  • :json export current file to JSON format (same folder, .json extension)
  • :Lexplore or :Lex or :lx toggle file explorer
  • :outline or :ol toggle card outline view
  • Ctrl+w w cycle between explorer and file window
  • Ctrl+w h move to explorer window (left)
  • Ctrl+w l move to file window (right)
  • :h or ? help

Settings:

  • :set number or :set nu enable line numbers
  • :set nonumber or :set nonu disable line numbers
  • :set relativenumber or :set rnu enable relative line numbers
  • :set norelativenumber or :set nornu disable relative line numbers
  • :set card=N set max visible cards (1-10, default: 5)
  • :set border=rounded use rounded border style (default)
  • :set border=plain use plain border style
  • :set extension show file extensions in explorer (default)
  • :set noextension hide file extensions in explorer
  • :set json set format to JSON (for unnamed files)
  • :set markdown set format to Markdown (for unnamed files)

Substitute:

  • :s/foo/bar/ substitute first occurrence in current line
  • :s/foo/bar/g substitute all occurrences in current line
  • :%s/foo/bar/ substitute first occurrence in all lines
  • :%s/foo/bar/g substitute 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