Skip to content

Getting Started

Dependencies

  • Python >= 3.13 (for pip install)
  • OR Homebrew (for brew install)

Installation

pip install nothing-less
brew install mpryor/tap/nless

Usage

Pipe the output of a command to nless:

kubectl get pods -w | nless

Read a file directly:

nless data.csv

Redirect a file into nless:

nless < access.log

Once data is loaded, press ? to view all keybindings.

CLI Arguments

Argument Short Description
filename File to read input from (defaults to stdin)
--version Show version and exit
--delimiter -d Delimiter to use for splitting fields
--filters -f Initial filter(s), format: column=value or any=value. Can be repeated.
--exclude-filters -x Initial exclude filter(s), same format as -f. Can be repeated.
--unique -u Initial unique key(s). Can be repeated.
--sort-by -s Column to sort by initially, format: column=asc or column=desc
--theme -t Color theme to use (e.g. dracula, nord, monokai)
--keymap -k Keymap preset to use (e.g. vim, less, emacs)
--tail Start in tail mode (cursor follows new data)
--time-window -w Show only rows within a time window (e.g. 5m, 1h, 30s). Append + for rolling (e.g. 5m+). Prefix with column name to filter by parsed timestamps (e.g. timestamp 5m)
--format-timestamp -F Convert a timestamp column's format: colname -> format (e.g. timestamp -> relative, ts -> epoch, ts -> UTC>US/Eastern %H:%M:%S)
--columns -c Regex to filter visible columns on startup (e.g. name\|status)
--raw Start in raw pager mode (no delimiter parsing)
--no-tui Skip the TUI — apply transforms and write to stdout
--tui Force TUI mode even when stdout is piped with transforms
--output-format -o Output format for pipe/batch output: csv (default), tsv, json, raw
--session -S Load a saved session by name
--merge -m Merge multiple files into a single view with a _source column

Examples

Start with a specific delimiter:

nless -d ',' data.txt

Pre-filter data on load:

nless -f 'status=Running' -f 'namespace=default' pods.txt

Exclude rows matching a pattern:

nless -x 'severity=DEBUG' app.log

Sort by a column on load:

nless -s 'timestamp=desc' events.csv

Pivot by unique keys:

nless -u 'namespace' -u 'status' pods.txt

Start in tail mode with a rolling time window:

kubectl get events -w | nless --tail -w '5m+'

Show only specific columns:

nless -c 'name|status|age' pods.txt

Convert timestamps to a different format:

nless --no-tui -F 'timestamp -> epoch' events.csv
cat events.csv | nless --no-tui -F 'timestamp -> relative' -o json

View a file in raw mode (no column parsing):

nless --raw /var/log/syslog

Combine options with piped input:

kubectl get pods -w | nless -d '  ' -f 'STATUS=Running' -s 'NAME=asc'

Use nless as a pipeline stage (batch mode):

nless data.csv --no-tui -f 'status=shipped' -s 'date=desc' -o tsv | wc -l

Interactive pipe — explore data, then pass it downstream on quit:

nless orders.csv | sort -t, -k2 | uniq

Force TUI mode when piping with transforms (overrides auto-batch):

cat data.csv | nless --tui -f 'status=shipped' | wc -l

Load a saved session:

nless -S my-session file.csv

Merge multiple files into one view:

nless file1.csv file2.csv -m