Skip to main content

wodilist

PyPI Version Python License: MIT

A smarter replacement for ls with relevance sorting and git awareness. Answers what matters right now, not just what exists on the disk.

$ wodilist
src/          dir        -    2h ago
main.py       file     4.2K   47m ago
Makefile      exec     1.1K    3d ago
README.md     file     8.9K    3d ago
node_modules/ dir        -   12d ago   ← collapsed, de-emphasized
.git/         dir        -   12d ago   ← collapsed, de-emphasized

Inside a git repo:

$ wodilist
M  auth.py      file     6.1K   12m ago   ← modified: floats up
?  experiment/  dir        -    5m ago    ← untracked
   main.py      file     4.2K    3d ago
   src/         dir        -    3d ago

Install

pip install wodilist

wodilist is now on your PATH. It does not shadow Python's builtin list, that lives in the interpreter, not the shell.


Usage

wodilist [subcommand] [directory] [flags]

Default

wodilist               # current directory
wodilist ~/projects    # explicit directory

Groups by kind (dirs → executables → files → links), sorts each group by relevance.

Subcommands

Command Behavior
wodilist recent Sort by mtime descending
wodilist large Files only, sort by size descending
wodilist dirty Git-modified and untracked files only
wodilist entry Entry point files only (main.py, Makefile…)

Flags

Flag Effect
-a / --all Show hidden files
--json JSON output (stable schema)
--raw Tab-separated, no color (pipe-safe)
--no-git Skip git status (faster in very large repos)
--branch Show current git branch in header

Machine output

--raw

Tab-separated. Five fields per line:

git_status  name  kind  size_bytes  mtime_unix
M	auth.py	file	6243	1714000123.456
-	main.py	file	4312	1713900000.000

git_status is - when clean or not in a git repo.

--json

{
  "entries": [
    {
      "name": "auth.py",
      "path": "/home/user/project/auth.py",
      "kind": "file",
      "size": 6243,
      "mtime": 1714000123.456,
      "ext": ".py",
      "git_status": "M",
      "relevance": 135.0,
      "is_hidden": false,
      "is_entry": false
    }
  ],
  "branch": "main"
}

Schema is stable. New fields may be added; existing fields will not be renamed or removed without a major version bump.


Failure behavior

  • If git is unavailable or slow, list falls back to non-git mode automatically.
  • If permissions prevent stat, entries are shown with size -.
  • Errors never abort the listing unless the directory itself is unreadable.

Design

Relevance scoring

Signal Score delta
Git conflict +110
Git modified +100
Git added +90
Git untracked +75
Git deleted +60
Modified < 1 hour ago +50
Modified < 1 day ago +35
Modified < 1 week ago +20
Entry point file +30
Executable +15
Directory (non-noise) +5
Hidden file −30
Collapsed (noise) dir −50

Git is always one call. git status --porcelain=v1 -z runs once. Status chars map to top-level directory entries automatically (files inside src/ mark src/ as modified).

Performance target: full pipeline (scan + score + format) < 50ms on a 200-file directory.


Architecture

wodilist/
├── scanner.py    # filesystem scanning only
├── detect.py     # TTY, CI, git-root detection
├── git.py        # single-call git status
├── formatter.py  # output only; no scanning
└── cli.py        # argument parsing and dispatch

Rules:

  • Scanner never formats
  • Formatter never scans
  • CLI never contains logic
  • Git logic isolated to git.py
  • Each module testable in isolation

Development

git clone https://github.com/calchiwo/wodilist.git
cd wodilist
pip install -e ".[dev]"
pytest
python benchmarks/bench.py

Compatibility

  • Python 3.10+
  • Linux, macOS, Windows
  • Works in CI (non-TTY: no color, no ANSI)
  • Works in pipes (wodilist --raw | awk ...)
  • Respects NO_COLOR env var
  • Zero runtime dependencies

Non-goals

  • Recursive listing (use find or fd)
  • Interactive UI
  • Icons or emoji
  • Per-file git calls
  • Replacing find, tree, or du

Metadata

Release files for wodilist 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wodilist 0.1.0
File Size Uploaded
wodilist-0.1.0.tar.gz 11.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wodilist 0.1.0
File Interpreter ABI Platform
wodilist-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 22.3 kB

Release files / wodilist-0.1.0.tar.gz

Download URL wodilist-0.1.0.tar.gz
Size 11.7 kB
Tags Source
SHA-256 checksum
How to use checksums
64a1f1437ac49bee3938f941e9cc5a6acd6c986d98301fd877e72a8f44539111
BLAKE2b-256 checksum
How to use checksums
8e1ca03013e6368675a66768dd835c8464242c33b9ac782ac371e2c51dd4974e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / wodilist-0.1.0-py3-none-any.whl

Download URL wodilist-0.1.0-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
16f23a167ebc47b4dbca15223a5d5623c9b2d69dfb746fc314f2c7e7c748de8f
BLAKE2b-256 checksum
How to use checksums
05c0fb462b7d28f7ef0864ab5cdbdab366449201319702b06c59432c6c42a522
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page