Using lla

Machine output

Print listings as JSON, NDJSON or CSV for scripts and pipelines, with fixed fields and typed plugin data.

↓ on this page

These flags replace the human-readable view with data for scripts. Paths, filters, sorting, depth and archive handling all work as usual.

lla --json            # one JSON array
lla --json --pretty   # the same, indented
lla --ndjson          # one JSON object per line
lla --csv             # a header row, then data rows

The three formats are mutually exclusive.

a directory
lla
  • --jsonone array
    jq
  • --ndjsonone object a line
    duckdb
  • --csvfixed columns
    your script
One selection, several outputs.

JSON and NDJSON fields

lla Cargo.toml --json --pretty | head -25
{
  "path": "Cargo.toml",
  "name": "Cargo.toml",
  "extension": "toml",
  "file_type": "file",
  "size_bytes": 1379,
  "modified": "2026-10-30T22:28:00Z",
  "created": "2026-10-07T15:26:54Z",
  "accessed": "2026-10-30T22:28:00Z",
  "mode_octal": "0644",
  "owner_user": "you",
  "owner_group": "staff",
  "inode": 262,
  "hard_links": 1,
  "allocated_size_bytes": 4096,
  "xattrs": {},
  "has_acl": false,
  "security_context": null,
  "mount_point": "/",
  "mount_source": "/dev/disk3s1",
  "filesystem": "apfs",
  "symlink_target": null,
  "is_hidden": false,
  "git_status": null,
  "plugin": {}
}

file_type is file, dir, symlink or other. extension, timestamps other than modified, ownership, filesystem metadata, symlink_target and git_status can be null. plugin holds the fields from your enabled plugins.

For example, to print the ten entries with the largest sizes:

lla --json -s size | jq -r '.[:10][] | [.size_bytes, .name] | @tsv'
The same listing, shaped by jq.

CSV columns

CSV uses a fixed column order and doesn't include plugin fields:

path,name,extension,file_type,size_bytes,modified,created,accessed,mode_octal,owner_user,owner_group,inode,hard_links,allocated_size_bytes,xattrs,has_acl,security_context,mount_point,mount_source,filesystem,symlink_target,is_hidden,git_status

Search results

--search has its own output format, which differs from the listings above.

lla --search "TODO" --json
lla --search "TODO" --ndjson
lla --search "TODO" --csv

Both --json and --ndjson pass through ripgrep's stream of JSON events, one per line, with types such as begin, context, match, end and summary. It isn't a single array, and --pretty has no effect on it.

{"type":"begin","data":{"path":{"text":"./lla/src/commands/search.rs"}}}

--csv prints one row per collected line under these columns:

file,line,column,kind,text

Plugin actions

Plugin actions have their own output modes, set with --output. See Run an action.