Commit Graph
100 Commits
Author SHA1 Message Date
Vinta ChenandClaude 947b93943a feat: add uv-build to Package Management > Build Backends
Challenger: uv's own backend at 26.5M downloads/month (pepy) within a
year of release, riding uv's adoption trajectory. Deferred by the
maintainer from the Developer Tools sitting; this closes that agenda
item.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:53:17 +08:00
Vinta ChenandClaude 0ec6f492f4 feat: add hatchling to Package Management > Build Backends
The modern default backend — PyPA docs and project templates reach for
it: 507M downloads/month (pepy), pushed 2026-08. Obvious choice
alongside setuptools; ordering after it by downloads.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:53:03 +08:00
Vinta ChenandClaude 1a36f77426 feat: add setuptools to Package Management > Build Backends
Mints the Build Backends subcategory — the deferred agenda item from
the Developer Tools sitting (2026-08-16), landing in its designated
Python Toolchain slot. setuptools is the incumbent obvious choice:
1.51B downloads/month (pepy), half the ecosystem still builds with it,
pushed 2026-08.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:52:51 +08:00
Vinta ChenandClaude 1b51907189 audit: sweep Package Management, mint Package Managers subcategory, cap override to 6
Restructure: the flat section becomes two subcategories — Package
Managers (this commit) and Build Backends (entering next as three
addition commits; the pyproject build-backend choice is a distinct job
from installing packages).

Package Managers tiers: pip (689.4M/mo), uv (194.1M/mo, the 2026
default recommendation for new projects), poetry (79M/mo) obvious
choices; hatch (22.2M/mo — kept by explicit maintainer flip against
the seeded drop), pipx (7.1M/mo, Second Tier — uv tool covers the job
for uv users), conda (no pip signal, the data-science distribution
standard; sorts last) challengers. The use case holds 6 entries by
explicit maintainer cap override — the list's third, same 3 obvious
choices + 3 challengers shape as Linters and Async I/O.

No removals.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:52:39 +08:00
Vinta ChenandClaude a4eba37b1f audit: sweep Environment Management, drop KillPy, pyenv-win becomes a sub-item
Tiers: virtualenv (545.7M/mo, much of it transitive via pip and tox),
uv (194.1M/mo, dual-listed here and in Package Managers by maintainer
acceptance), pyenv (no pip signal — distributed via git and brew;
45.0K stars) all obvious choices. pyenv-win converts to an indented
sub-item under pyenv (the flower/celery companion pattern — its job is
inseparable from its parent's), freeing a slot without losing the
pointer.

Removed:
- KillPy — 124 stars, created 2025, 3.7K downloads/month; nowhere
  near obvious-choice or challenger territory.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:52:22 +08:00
Vinta ChenandClaude 5f6f1f020e docs: clarify that standard-library modules lead the use case outright
Maintainer correction to the previous amendment: stdlib sorts at the
top of the whole use case, not merely first within its tier. No README
movement results — the stdlib admission rule (a standard-library
module is listed only where it is itself the obvious choice) means
every stdlib entry already sits in the first tier, so tier-top and
use-case-top coincide; the rule text now states the intent directly.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:39:31 +08:00
Vinta ChenandClaude 05a9dd4ed5 style: move standard-library entries to the top of their tiers
Applies the amended Entry Ordering rule (stdlib first in tier)
retroactively to all audited sections: sqlite3 (SQLite), mock (Mock),
logging (Logging), tomllib (Data Formats), argparse (CLI Development),
tkinter (Tkinter), functools (Functional Programming), asyncio with
its awesome-asyncio sub-item (Async I/O), zoneinfo (Date and Time).
Parallelism (concurrent.futures, multiprocessing) is an all-stdlib
tier and stays alphabetical. Unaudited sections (difflib, mimetypes,
pathlib, configparser) pick the rule up at their own audit. No entry
additions or removals.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:37:14 +08:00
Vinta ChenandClaude 15c4064ee1 docs: amend Entry Ordering so standard-library modules sort first in tier
Maintainer rule change: built-ins lead their tier instead of sorting
last with the other no-signal entries — a stdlib module that earns a
slot is the default answer, so it reads first. Several stdlib modules
in one tier stay alphabetical. Non-stdlib no-signal entries (agent
skill packs, projects distributed outside PyPI) still sort last in
tier. README reorder of already-audited sections follows in a style
commit; unaudited sections pick the rule up at their own audit.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:36:30 +08:00
Vinta ChenandClaude c00094add6 feat: add whenever to Date and Time
Challenger with verified adoption trajectory: 9M downloads/month
(pepy), 2.4K stars, pushed 2026-08. Rust-backed and type-safe, with
published benchmarks 10-100x faster than Pendulum and Arrow and a
DST-correctness design aimed at the incumbents' known pitfalls.
Slots into the second challenger position after pendulum.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:30:53 +08:00
Vinta ChenandClaude 16077fc0e1 style: re-tier Built-in Classes Enhancement and Date and Time
No removals in either section — tier ordering and canonical-name
renames only.

Built-in Classes Enhancement: attrs (939M/mo), bidict (30.5M/mo)
obvious choices; uuid-utils (81.2M/mo, challenger on judgment — the
count is transitive-profile against 364 stars) and python-box
(renamed from box, its canonical PyPI name; 6.9M/mo) challengers.

Date and Time: python-dateutil (renamed from dateutil, its canonical
PyPI name; 1.21B/mo), dateparser (46.4M/mo), zoneinfo (stdlib, the
timezone answer since 3.9; no-signal, sorts last) obvious choices;
pendulum (71.6M/mo, revived 2026-07 after a long slump — Second
Tier-shaped) challenger.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:30:35 +08:00
Vinta ChenandClaude 19875cf356 audit: sweep Asynchronous Programming, split into Async I/O and Parallelism
Restructure: the flat section splits — async I/O and process/pool
parallelism are distinct jobs. Parallelism holds concurrent.futures
and multiprocessing (both standard library, both obvious choices,
no-signal so alphabetical).

Async I/O tiers: anyio (1.07B/mo — heavily transitive via httpx and
Starlette, but independently the production-recommended structured-
concurrency layer), uvloop (267.7M/mo), asyncio (stdlib, no-signal,
sorts last; awesome-asyncio sub-item rides along) obvious choices;
trio (53.8M/mo), gevent (49.6M/mo), twisted (15.1M/mo) challengers —
gevent and twisted kept as Second Tier by explicit maintainer
decision, and the use case holds 6 entries by explicit maintainer cap
override (the list's second, after Linters and Formatters; same
3 obvious choices + 3 challengers shape).

No removals.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:30:08 +08:00
Vinta ChenandClaude 6af6158287 audit: sweep Functional Programming, drop coconut
Tiers: more-itertools (339.9M/mo), toolz (62.9M/mo), functools
(stdlib, the first stop for FP utilities; no-signal, sorts last)
obvious choices; funcy (7.3M/mo) and returns (1.37M/mo, typed
monads/Result trajectory) challengers.

Removed:
- coconut — 14.4K downloads/month, 4.3K stars; a compiled language
  variant rather than a library, and nobody's unprompted answer for
  functional Python. Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:29:44 +08:00
Vinta ChenandClaude 9fa72c1ee6 audit: sweep Implementations, drop ironpython
Tiers: cpython, micropython, pypy obvious choices (all no-signal —
distributed outside pip — so alphabetical); cython (130.3M/mo, kept
here by judgment as a Python-superset compiler with no better home)
and pyodide (no pip signal; distributed via CDN and npm) challengers.

Removed:
- ironpython — latest release v3.4.2 (2024-12) still implements
  Python 3.4-era language, a decade behind CPython (verified from the
  release feed; the repo itself is active, so this is not an
  activity-line drop). 2.8K stars. Not an obvious choice for any
  current job.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:29:23 +08:00
Vinta ChenandClaude 8a3771e895 feat: add pygame-ce to Game Development > Game Frameworks
Challenger to pygame: the community fork where long-time contributors
now develop, a drop-in replacement (same import name), and community
guidance for new projects favors it — adoption-trajectory evidence
verified by web search. 642.5K downloads/month (pepy), 1.6K stars,
created 2023, pushed 2026-08. Upstream pygame itself has been quiet
since 2025-11. Slots into the open challenger position ahead of
arcade (85.3K/mo).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:15:08 +08:00
Vinta ChenandClaude 3f391b34ba audit: sweep Game Development, split into use cases, drop py-sdl2, pyopengl
Restructure: the flat section splits into 3D Engines (panda3d
189.3K/mo, sole obvious choice), Game Frameworks (pygame 3.07M/mo and
pyglet 2.9M/mo obvious choices; arcade 85.3K/mo challenger — pygame-ce
joins as a challenger in its own addition commit), and Visual Novels
(renpy sole obvious choice — its 4/mo pip count is meaningless since
Ren'Py ships as its own SDK; ecosystem verified: 8,000+ published
works, release 8.5.3 in 2026-05).

Removed:
- py-sdl2 — 71.1K downloads/month (as PySDL2), 344 stars; low-level
  SDL bindings whose job pygame-ce and pyglet cover for this list's
  audience. Judgment call.
- pyopengl — 5.3M downloads/month, likely transitive
  scientific-visualization traffic (judgment call, mechanism
  unverified), 415 stars; raw OpenGL bindings are not a
  game-development obvious choice.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:14:54 +08:00
Vinta ChenandClaude 8f9c3884bf audit: sweep Audio & Video Processing, re-home TTS to Speech, drop birdnet, matchering
Restructure: gtts and KittenTTS re-home to AI and Agents > Speech — TTS
belongs with the speech models, not audio processing. gtts (3M/mo,
a 2014 service wrapper, quiet since 2026-04) lands as Second Tier;
kittentts (renamed to its canonical PyPI name, 15.3K stars within a
year of creation, pip count 3.9K/mo under-measures model adoption)
as challenger. Speech is now at exact cap (5/5) — future additions
there require displacement.

Audio keeps pydub (21.4M/mo) and librosa (11.7M/mo) as obvious
choices. Video unchanged: moviepy (7M/mo) obvious choice, vidgear
(25.3K/mo) challenger. Metadata reorders to tiers: mutagen (8.2M/mo)
obvious choice; tinytag (5.2M/mo), beets (67.4K/mo, kept as challenger
rather than minting a sole-entry subcategory — judgment call).

Removed:
- birdnet — 7.1K downloads/month, 1.7K stars; an applied bioacoustics
  tool with a genuinely small audience, not an audio-processing
  choice. Judgment call.
- matchering — 16.1K downloads/month, 2.6K stars; a single-task
  automated-mastering tool with a small audience, no trajectory.
  Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:14:37 +08:00
Vinta ChenandClaude 9970486a2a feat: add rembg to Image Processing > General
Maintainer-requested during the Media audit, replacing dropped
pymatting with the tool whose traffic pymatting was carrying: rembg is
the obvious choice for background removal — 4.1M downloads/month
direct (pepy), 24.3K stars, pushed 2026-08, active release train.
Takes the open third obvious-choice slot in General (no displacement
needed), ordering after pillow and scikit-image.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:14:13 +08:00
Vinta ChenandClaude 41a1b4b0ae audit: sweep Image Processing, split into use cases, drop pymatting
Restructure: the flat section splits into Barcodes and QR Codes (qrcode
30.1M/mo, python-barcode 3.4M/mo, both obvious choices — generating
codes is a distinct job from manipulating images), General (pillow
552M/mo, scikit-image 28.5M/mo obvious choices; wand 1.4M/mo, pyvips
808.2K/mo challengers), and Image Serving (thumbor sole obvious choice —
a deployed service, so its 22K/mo pip count under-measures use).

Rename to canonical PyPI name: python-qrcode → qrcode.

Removed:
- pymatting — 3.3M downloads/month, but the traffic is transitive:
  rembg declares pymatting as a hard dependency (verified in rembg's
  PyPI metadata). A single-task alpha-matting library, 1.9K stars,
  quiet since 2026-04; not an obvious choice for image processing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 13:13:57 +08:00
Vinta ChenandClaude 9bbe1cf6d0 audit: sweep GUI Development, split Desktop into Qt and Tkinter, drop enaml, buridan/ui, curses
Restructure: the 12-entry Desktop use case splits — Qt (PySide6
3.9M/mo, PyQt6 2.7M/mo, co-obvious pair differing in licensing) and
Tkinter (customtkinter 1.13M/mo, tkinter stdlib obvious choices;
tkdesigner challenger, kept by maintainer decision) mint as
subcategories; residual Desktop lands at cap with pygobject (607.6K/mo),
wxPython (354.8K/mo), kivy (288.8K/mo) obvious choices and dearpygui
(193.5K/mo), toga (12.9K/mo, BeeWare trajectory) challengers.

Renames to canonical PyPI names: PyQt → PyQt6, pyside → PySide6 (the
PyPI package named pyside is the dead Qt4-era PySide 1).

Re-homes: urwid (11.3M/mo) moves to CLI Development > TUI Frameworks as
a challenger and pyglet (2.9M/mo, windowing and multimedia for games)
moves to Game Development, dissolving this section's Terminal
subcategory. Web-based keeps pywebview (2.19M/mo), nicegui (1.2M/mo),
flet (444.1K/mo) as obvious choices; gooey stays sole Wrappers entry.

Removed:
- enaml — 14.1K downloads/month, 1.6K stars after 13 years; a
  declarative Qt DSL nobody names unprompted. Judgment call.
- buridan/ui — 248 stars, no PyPI package; a component-snippet
  collection for Reflex, not a GUI framework. Fails admission.
- curses — standard-library rule: stdlib holds a slot only where it is
  itself the obvious choice, and for building TUIs that is textual.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:56:44 +08:00
Vinta ChenandClaude 1a8e14c177 audit: sweep CLI Tools, dissolve Productivity Tools, drop thefuck, kaydet, doitlive
Restructure: the Productivity Tools grab-bag dissolves into use cases —
Project Scaffolding (cookiecutter 10.1M/mo obvious choice, copier
2.5M/mo challenger), Shells (xonsh 419.5K/mo), Downloaders (yt-dlp
17.7M/mo), Terminal Workflow (tmuxp 129.4K/mo). CLI Enhancements
renames to Database CLIs (pgcli 636.6K/mo, mycli 124.9K/mo, litecli
74.2K/mo obvious choices; iredis 8.3K/mo challenger); HTTP Clients
minted for httpie.

httpie kept by explicit maintainer override of the 12-month activity
line (repo dormant since 2024-12, last release 2024-11; 1.04M
downloads/month) — second use of the schedule precedent.

Removed:
- thefuck — dormant since 2024-07, past the 12-month activity line;
  7K downloads/month (most installs come from brew, not pip).
- kaydet — 48 stars, 5.6K downloads/month; a personal diary tool
  nowhere near obvious-choice or challenger territory.
- doitlive — 651 downloads/month against 3.6K stars; alive but
  effectively unused. Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:56:03 +08:00
Vinta ChenandClaude 35c68984e8 audit: sweep CLI Development, mint TUI Frameworks, drop cement
Restructure: textual and asciimatics move from Terminal Rendering to a
minted TUI Frameworks subcategory — full-screen terminal UIs are a
distinct job from rendering output. urwid joins them in the GUI
Development commit, which dissolves that section's Terminal subcategory.

Renames to canonical PyPI names: python-prompt-toolkit → prompt_toolkit,
python-fire → fire (the PyPI package named python-fire is an unrelated
name-squatter; Google's project installs as fire).

Tiers: click (1.12B/mo), typer (366M/mo), argparse (stdlib) obvious
choices; prompt_toolkit (246.8M/mo), fire (22M/mo) challengers.
tqdm (670.1M/mo), rich (626.7M/mo) obvious choices; colorama
(425.6M/mo, largely pip-transitive traffic, superseded by rich for new
code) demoted to challenger (Second Tier) beside alive-progress (3.7M/mo).
textual (535.4M/mo) obvious choice of TUI Frameworks, asciimatics
(177.5K/mo) challenger.

Removed:
- cement — 565K downloads/month but 1.3K stars after 17 years
  (CI-shaped count); alive yet no longer anyone's unprompted answer
  against click, typer, fire, or prompt_toolkit. Judgment call.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:55:38 +08:00
Vinta ChenandClaude 3290ce586a style: merge Security Linters into Linters and Formatters
bandit (29.5M downloads/month) sorts last in the second tier behind pylint 65.2M and flake8 56.7M. The merged use case now holds 6 entries, past the hard cap of 5, by explicit maintainer override -- the list's first cap override, accepted knowingly.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:26:20 +08:00
Vinta ChenandClaude b8cacb558c audit: sweep Network Virtualization to the shortlist cap
Removed mininet: no commits since 2024-07, past the 12-month activity
line; 2026 sources describe it as fading with forks carrying
development; its 3.7K/month PyPI row is not its real distribution
channel.

Reordered remaining obvious choices by downloads: scapy 4.4M then
napalm 199K.

Section rename to Networking was offered and the maintainer left the
current name standing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:19:44 +08:00
Vinta ChenandClaude 635a735802 audit: sweep Logging to the shortlist cap
Removed logfmter (197,351 downloads/month, 107 stars) — logfmt formatting is a small audience and it is not a credible successor to any obvious choice; judgment call.

Reordered by tier and downloads: obvious choices structlog 114.5M (2026 consensus production pick), loguru 82.5M (developer-experience pick), and stdlib logging last as a no-signal entry — kept because stdlib logging is itself the obvious choice for the use case, the stdlib rule's yes-case.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:19:12 +08:00
Vinta ChenandClaude 03d9139c35 audit: sweep Job Schedulers to the shortlist cap
Split the flat section into two use cases — Task Scheduling (in-process scheduling) and Workflow Orchestration (data-pipeline orchestrators) — six entries were covering two distinct jobs.

Removed SpiffWorkflow (59,736 downloads/month — BPMN engine, a different job than scheduling or orchestration, small audience; active repo, drop is a judgment call).

Kept schedule by explicit maintainer override (9.4M downloads/month, 12.3K stars, but no commits since 2024-05 — past the 12-month activity line; the maintainer overrode the activity rule, schedule slots as challenger behind apscheduler).

Renamed airflow to apache-airflow (PyPI name — the bare airflow package is a 38K/month shim).

Ordering: Task Scheduling apscheduler 55.5M obvious choice then schedule 9.4M challenger; Workflow Orchestration obvious choices apache-airflow 20.9M, prefect 14.0M, dagster 10.2M.

luigi's removal from Distributed Computing rode that section's commit; flytekit was proposed and declined.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:18:40 +08:00
Vinta ChenandClaude 7fd495730d feat: add paho-mqtt to Messaging
Obvious choice per DevOps audit adjudicated by maintainer 2026-08-16: 9.1M downloads/month via ClickPy, Eclipse Foundation client described by 2026 sources as the bedrock of MQTT in Python. Ordered after pika (13.7M/month), before challenger faststream (1.5M/month).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:17:59 +08:00
Vinta ChenandClaude 28b6d1398b feat: add pika to Messaging
DevOps audit adjudicated by maintainer 2026-08-16: pika is the standard RabbitMQ/AMQP 0-9-1 client, 13.7M downloads/month via ClickPy. Ordered after confluent-kafka (61.8M/month) per downloads-descending tier.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:17:28 +08:00
Vinta ChenandClaude e5ce98c0f2 feat: add confluent-kafka to Messaging
DevOps audit adjudicated by maintainer 2026-08-16: 61.8M downloads/month via ClickPy, librdkafka-backed, 2026 sources call it the production Kafka default. kafka-python is unmaintained and was excluded. Placed first per downloads-descending obvious-choice tier; pika and paho-mqtt follow in subsequent commits.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:16:59 +08:00
Vinta ChenandClaude 83c723d61f style: reorder Task Queues by tier and downloads
DevOps audit adjudicated 2026-08-16, format-only (no removals).
Obvious choices: celery 58.4M, rq 18.1M, dramatiq 1.6M (promoted --
2026 sources call it the top celery alternative with closest feature
parity). Challengers: huey 20.9M (demoted -- raw count highest but
2026 sources file it as the lightweight small-app option), taskiq
2.0M. flower sub-item rides celery.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:16:27 +08:00
Vinta ChenandClaude 4fc32225a9 audit: sweep Distributed Computing to the shortlist cap
Removed luigi (1,546,263 downloads/month, repo active with a push 2026-07) — the drop is editorial: Spotify itself moved to Flyte, 2026 orchestration comparisons no longer name luigi, and the Workflow Orchestration slots in Job Schedulers go to airflow, prefect, dagster.

Flattened the sole Batch Processing subcategory — the label added nothing, the section is a single use case.

Reordered by tier and downloads: obvious choices ray 62.6M, pyspark 48.3M, dask 30.0M; challengers joblib 216.9M raw (scikit-learn-dependency-inflated, judgment call — raw count still sorts it first in tier) and mpi4py 1.0M (HPC standard, specific audience not small).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:15:51 +08:00
Vinta ChenandClaude 77e7b62d93 feat: add google-cloud-python to Cloud Providers
DevOps audit adjudicated by maintainer 2026-08-16: obvious-choice umbrella repo published as per-service packages, so no single download figure applies (google-cloud-storage alone is 253.1M downloads/month). Repo-name entry per the naming rule, placed after azure-sdk-for-python per no-signal alphabetical ordering within tier.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:15:10 +08:00
Vinta ChenandClaude b06104c97e feat: add azure-sdk-for-python to Cloud Providers
DevOps audit adjudicated by maintainer 2026-08-16: obvious choice. Umbrella repo published as per-service packages, so no single download figure exists; azure-identity alone is 230.4M downloads/month. Repo-name entry used per the naming rule since there is no single pip name.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:14:32 +08:00
Vinta ChenandClaude a610fcec61 audit: sweep DevOps Tools to the shortlist cap
removed openstack (mirror-index repo aggregating OpenStack projects — nothing installable, not configuration management; its daily pushes are mirror automation)
removed kubesdk (2,135 downloads/month, 105 stars, repo created 2025-10, entered via PR #3166 — nowhere near obvious choice or challenger; maintainer also declined adding the official docker and kubernetes clients, so no Containers use case)
renamed cloudinit to cloud-init (repo name; not on PyPI), saltstack to salt (PyPI name; Broadcom-sponsored, kept as Second Tier challenger — PyPI 102K/month undercounts onedir and distro installs), sentry-python to sentry-sdk (PyPI name; 178.5M/month), borg to borgbackup (PyPI name; the bare borg package on PyPI is unrelated)
reordered every subcategory by tier and downloads: Cloud Providers boto3 3.4B then awscli 264.3M; Configuration Management ansible 13.0M and no-signal cloud-init obvious choices, pyinfra 271K and salt challengers; Deployment fabric 12.7M then chalice 930K; Monitoring and Processes psutil 391.5M, sentry-sdk, supervisor 16.8M, challenger sh 12.0M; Other pre-commit 198.0M, borgbackup 76K, chaostoolkit 18K

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 12:13:54 +08:00
Vinta ChenandClaude fb7383cd9b docs: point Build Tools readers to Package Management
uv-build was deliberately not admitted to Build Tools since PEP 517 backends are a different job; that structure decision is deferred to the Python Toolchain sitting. Add a cross-reference so readers looking for Python packaging/build tooling (uv build backend, hatch) land on Package Management instead.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:58:58 +08:00
Vinta ChenandClaude 166c9c97df style: reorder Algorithms and Design Patterns and Documentation by downloads
Developer Tools audit adjudicated by maintainer 2026-08-16, format-only outcome for the two sections with no removals.

Algorithms: sortedcontainers (278.7M/month) first, then educational no-signal repos algorithms and thealgorithms alphabetically.
Design Patterns: transitions (2.9M/month) before no-signal python-patterns.
Documentation: sphinx (85.9M), mkdocs (17.8M), diagrams (6.8M) as obvious choices, pdoc (2.1M) as challenger.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:57:52 +08:00
Vinta ChenandClaude 2d0f5da279 feat: add mkdocs-material as sub-item under mkdocs
Adjudicated by maintainer 2026-08-16: mkdocs-material pulls 17.6M downloads/month via ClickPy, nearly equal to mkdocs itself, and is the theme most mkdocs sites run. Listed as a sub-item since its job is inseparable from its parent.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:57:11 +08:00
Vinta ChenandClaude 71eee5d240 feat: add ipython to Interactive Interpreter
Obvious choice per maintainer audit 2026-08-16: 175.7M downloads/month
via ClickPy, the default enhanced REPL and the kernel under Jupyter,
yet missing from the README. Placed first per downloads-descending
obvious-choice tier (jupyter 17.5M follows).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:56:39 +08:00
Vinta ChenandClaude 8125688493 audit: sweep Build Tools to the shortlist cap
Removed bitbake (no PyPI distribution, ships with Yocto — its users are embedded-Linux developers, fails the Serves Python Developers scope test). Removed platformio (1,255,169 downloads/month — embedded and IoT toolchain written in Python but used for C and C++ firmware work, same scope test as bitbake). Removed pybuilder (51,511 downloads/month — searches confirm niche adoption, small community, fails the obvious-choice bar). Reordered remaining entries: invoke (85.4M) and scons (924K) as obvious choices, doit (803K) as challenger.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:56:08 +08:00
Vinta ChenandClaude d316a8ee2a feat: add pyinstrument to Profiler
Developer Tools audit adjudicated by maintainer 2026-08-16: obvious choice per ClickPy (10.6M downloads/month), a statistical wall-clock profiler and common first reach for request-level profiling. Ordered after memray (15.6M/month), before challenger scalene (400K/month).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:55:29 +08:00
Vinta ChenandClaude 3a65a020c4 feat: add memray to Profiler
Bloomberg memory profiler that tracks allocations in Python code, native extensions, and the interpreter itself. 15.6M downloads/month via ClickPy; the obvious choice for memory profiling work per maintainer audit 2026-08-16. Ordered after py-spy (28.5M/month) per downloads-descending tier.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:54:56 +08:00
Vinta ChenandClaude b4960530ad audit: sweep Debugging Tools to the shortlist cap
Developer Tools audit adjudicated by maintainer 2026-08-16:
- removed manhole (1,060,111 downloads/month but last push 2024-07, past the 12-month activity line; also mis-homed under Tracing, it is an inspection socket not a tracer)
- removed memory_graph (13,393 downloads/month, added 2025-12 by the project's own author with no displacement argued, teaching aid, fails the obvious-choice bar)
- renamed python-hunter to hunter (PyPI package name is hunter; the python-hunter name on PyPI is a squatter)
- reordered Others by downloads: django-debug-toolbar 9.1M, icecream 1.95M, flask-debugtoolbar 1.24M

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:54:10 +08:00
Vinta ChenandClaude 5e3d77826a feat: add pyright to Type Checkers
Adjudicated by maintainer 2026-08-16: obvious choice (39.4M downloads/month via ClickPy; 2026 sources call it the strong default -- conformance lead, Pylance engine, editor integration). Ordered after ty (41.2M/month) per downloads-descending obvious-choice tier.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:53:30 +08:00
Vinta ChenandClaude 3e90482f01 audit: sweep Code Analysis to the shortlist cap
Removed code2flow (36,486 downloads/month, last push 2025-07 — fails the obvious-choice bar, same test as dropped peers).
Removed pytype (919,951 downloads/month — Google sunset, maintenance mode, Python 3.12 is the last supported version).
Merged Code Linters + Code Formatters into one Linters and Formatters use case (ruff is the 2026 de facto standard for both; tiers: ruff/black/isort obvious choices, pylint/flake8 second tier).
Re-homed bandit to new Security Linters subcategory (security linting is a distinct job from style linting).
Demoted typeshed to sub-item under mypy (stub infrastructure every checker consumes, not itself a checker holding a slot).
Promoted ty to obvious choice (maintainer call), order mypy/ty then pyrefly challenger.
Reordered Code Analysis subcategory vulture first (12.3M/month obvious choice, prospector 485K and repowise 33K challengers — repowise kept on maintainer flip).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 11:52:55 +08:00
Vinta ChenandClaude 8814a85742 feat: store verdict preview pages in repo-local ./tmp
Multi-day reviews need to survive reboots, which system /tmp does not
guarantee. ./tmp is git-ignored so the generated pages never land in
commits.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 03:21:04 +08:00
Vinta ChenandClaude a2da210345 feat: stamp pypi downloads cache with fetched_at and header row
Adds a header row (name, downloads, fetched_at) to data/pypi_downloads.tsv
and stamps every row with the sweep date, so audits can tell evidence age
and skip re-fetching when the cache is less than 7 days old. The sweep
itself costs ~1s, so freshness is checked by the reader (audit-the-list
skill) instead of skip logic in the fetch script. SKILL.md documents the
7-day freshness rule.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:58:20 +08:00
Vinta Chen 36c61798c4 update wordings 2026-08-16 02:53:24 +08:00
Vinta ChenandClaude c6957d4c21 docs: require WebSearch evidence for tier judgments
Verifying keep/drop reasons with download counts alone isn't enough to judge obvious-choice vs challenger tiers; the maintainer requires WebSearch evidence of adoption trajectory and community sentiment too. Also rewrites the repo overview in CLAUDE.md and mirrors it to AGENTS.md per the kept-in-sync convention.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:52:03 +08:00
Vinta ChenandClaude 6c93b1e588 docs: update audit-the-list SKILL.md wording
Broaden argument-hint to cover thematic groups alongside sections,
and backtick tool/skill names for consistency.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:45:34 +08:00
Vinta ChenandClaude bc3e7a08cd docs: condense AGENTS.md and CLAUDE.md for progressive disclosure
Trim repository overview and structure sections into a brief intro
plus focused Entry Rules and Gotchas sections, dropping restated
CONTRIBUTING.md content and Makefile/pyproject boilerplate.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:45:31 +08:00
Vinta ChenandClaude 5da1d16de1 docs: define Second Tier in CONTEXT.md
The 2026-08-16 Database & Storage audit exposed a vocabulary gap: four adjudicated entries (clickhouse-driver, dogpile.cache, django-cacheops, django-haystack) are neither Obvious Choices nor trajectory-backed Challengers but demoted incumbents occupying Challenger slots, and the sitting had to improvise the term. The maintainer ratified it during review. A demoted incumbent counts against the two Challenger slots, but the adoption-trajectory bar gates only new admissions, not demotions.

Also from the same sitting: psycopg2 was deliberately left unlisted under Database Drivers > PostgreSQL (282M downloads/month as psycopg2-binary, pepy 2026-08-16) because psycopg 3 is the new-work answer and v2 is legacy install base. Recorded here so the next PostgreSQL audit knows it was a decision, not an oversight.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:40:44 +08:00
Vinta ChenandClaude 745347dcdd style: reorder Serialization by downloads
Audit outcome of the Database & Storage sitting, maintainer adjudicated
2026-08-16, format-only.

Reordered from alphabetical to the entry-ordering rule: obvious choices by downloads/month descending, then challenger.
msgpack 290,175,972; orjson 234,189,977; marshmallow 122,497,803; msgspec (challenger) 43,745,974.
PyPI last-30-day downloads via ClickPy, fetched 2026-08-16.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:39:48 +08:00
Vinta ChenandClaude 509fcaa384 feat: add meilisearch to Search as a challenger
Official Python client for the Meilisearch engine, 1,107,508 downloads/month (pepy.tech, fetched 2026-08-16). Admitted on the engine's developer-tool adoption trajectory; flagged as the weakest add of the Database & Storage audit (maintainer adjudicated 2026-08-16) and a judgment call in the reviewed verdicts. Placed after the obvious choices (elasticsearch, opensearch-py), before second-tier django-haystack, per entry-ordering rule.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:34:08 +08:00
Vinta ChenandClaude f953956703 feat: add opensearch-py to Search as obvious choice
Database & Storage audit (2026-08-16): opensearch-py is the official
low-level client of the OpenSearch fork, 52,432,831 downloads/month,
near parity with elasticsearch at 54,160,230/month (both pepy.tech,
fetched 2026-08-16). Placed after elasticsearch, before second-tier
django-haystack, per entry-ordering rule.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:33:25 +08:00
Vinta ChenandClaude 7ac2950dc6 audit: sweep Search to the shortlist cap
Removed pysolr (352,069 downloads/month via ClickPy, 347,571 pepy same-source, fetched 2026-08-16) — lightweight Apache Solr wrapper, the Solr era passed.

Renamed elasticsearch-py to elasticsearch per the PyPI-package-name naming rule in CONTRIBUTING.md; also fixes a NOT_FOUND row in every downloads sweep.

Reordered: elasticsearch (54,160,230/month pepy) obvious choice first, django-haystack (194,205/month pepy) kept and moved to second tier per maintainer's tier call during verdict review.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:32:47 +08:00
Vinta ChenandClaude 02735b6ced style: reorder Caching by downloads, rename python-diskcache to diskcache
Caching section audit (maintainer adjudicated 2026-08-16, format-only):

- Renamed python-diskcache to diskcache to match its PyPI package name per CONTRIBUTING.md naming rule; also fixes a NOT_FOUND row in every downloads sweep.
- Reordered by monthly downloads (pepy): cachetools (338,290,732) and diskcache (38,755,627) as obvious choices, then dogpile.cache (2,460,237) and django-cacheops (1,728,494) as second-tier challengers.
- Maintainer confirmed keeping diskcache despite the repo being dormant since 2024-08: 38.8M downloads/month and nothing succeeds it at its job.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:32:02 +08:00
Vinta ChenandClaude b7b633d509 feat: add lancedb to Database & Storage > Vector
Adds lancedb as obvious choice #2 in Vector, from the Database & Storage audit (maintainer adjudicated 2026-08-16): embedded vector database for multimodal AI, 9,315,269 downloads/month (pepy.tech, fetched 2026-08-16), 11.2K stars, very active (pushed 2026-08-15). Same-source check keeps chromadb first (13.3M pepy); zvec stays last as trajectory challenger.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:31:17 +08:00
Vinta ChenandClaude 3a3b20c03d audit: sweep Database to the shortlist cap
Split the flat Database section into three subcategories (Analytical,
Vector, Key-Value & Document) since its 7 entries exceeded the shortlist
cap of 5 and the size reflected genuinely distinct jobs:

- Analytical: duckdb (obvious choice, 61,026,806 downloads/month), chdb
  (challenger, 3,564,786 downloads/month)
- Vector: chromadb (obvious choice, 13,048,822 downloads/month), zvec
  (challenger on star trajectory, 44,737 downloads/month, 15.4K stars
  in 8 months)
- Key-Value & Document: tinydb (obvious choice, 6,194,854 downloads/month)

Removed:
- pickledb (29,446 downloads/month) - toy key-value store
- ZODB (197,044 downloads/month) - Zope-era native object database
  nobody names unprompted in 2026; repo still active, this is a
  relevance call, not an abandonment call

Rewrote the section description from "Databases implemented in
Python" to "In-process databases usable directly from Python"
because duckdb, chdb, and zvec are not themselves implemented in
Python, and the written-in-Python scope test was already removed
from CONTRIBUTING.md.

Downloads are PyPI last-30-day via ClickPy, fetched 2026-08-16.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:30:29 +08:00
Vinta ChenandClaude 442291d74a feat: add oracledb to Database Drivers > Other Relational Databases
Oracle's official driver, successor to cx_Oracle. 26,856,874 downloads/month (pepy.tech, fetched 2026-08-16), from the Database & Storage audit (maintainer adjudicated 2026-08-16). Placed as obvious choice #2 between pyodbc (42.9M) and challenger mssql-python (3.3M) per entry-ordering rule.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:29:30 +08:00
Vinta ChenandClaude 9b28c566bf feat: add pyodbc to Other Relational Databases
SQL Server / ODBC standard for two decades, 42,911,527 downloads/month (pepy.tech, fetched 2026-08-16). Its absence was a gap in the list from the Database & Storage audit, not a verdict on the project. Listed as obvious choice #1, before mssql-python (3.3M/month challenger), per entry-ordering rule.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:28:45 +08:00
Vinta ChenandClaude 774da7236e feat: add clickhouse-connect to Database Drivers > ClickHouse
Database & Storage audit (2026-08-16): official ClickHouse client at 31,797,323 downloads/month has overtaken community clickhouse-driver at 18,405,937/month (pepy.tech, same source, fetched 2026-08-16). Listed first per entry-ordering rule; clickhouse-driver stays second tier.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:28:05 +08:00
Vinta ChenandClaude 0cc4e0eed4 feat: add asyncpg to Database Drivers > PostgreSQL
MagicStack's asyncio PostgreSQL driver, 122,401,686 downloads/month
(pepy.tech, fetched 2026-08-16). Verified as obvious choice #2 behind
psycopg (130.8M downloads/month, same source) in the Database & Storage
audit; last push 2026-02, inside the 12-month Active rule. Its absence
was a gap in the list.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:27:18 +08:00
Vinta ChenandClaude b8dd6538c2 style: restructure Database Drivers section
Database & Storage audit (maintainer adjudicated 2026-08-16), format-only outcome, no removals:

- Mint a ClickHouse subcategory between SQLite and Other Relational Databases, moving clickhouse-driver into it; two ClickHouse clients justify their own use case (official clickhouse-connect lands next as its own add commit).
- Rename entry redis-py to redis per the PyPI-package-name naming rule in CONTRIBUTING.md; also fixes a NOT_FOUND row in every downloads sweep.
- Reorder MySQL (pymysql 96.4M downloads/month before mysqlclient 20.4M) and NoSQL Databases (redis 277M pepy, pymongo 116.6M, cassandra-driver 8.0M, then django-mongodb-backend 31K as challenger) per the entry-ordering rule.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:26:28 +08:00
Vinta ChenandClaude 41f89f7f11 audit: sweep ORM to the shortlist cap
Relational Databases had 7 entries against the cap of 5. Removed:
- dataset (2,316,477 downloads/month) - dict-store convenience wrapper, not the ORM job
- pony (653,675 downloads/month) - fading mindshare, no successor trajectory; repo still active, this is a cap call not an abandonment call
- tortoise-orm (599,872 downloads/month, flat) - async niche now served by SQLAlchemy asyncio and sqlmodel

Downloads are PyPI last-30-day via ClickPy fetched 2026-08-16.

Both subcategories reordered per entry-ordering rule: obvious choices by
downloads descending (sqlalchemy 423.9M, django.db.models riding django
56.1M, peewee 50.8M; pynamodb 4.1M, mongoengine 2.5M) then challengers
(sqlmodel 22.3M; beanie 1.6M).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 02:25:23 +08:00
Vinta ChenandClaude 9fc4f003fe style: rename HTTP Clients' General subcategory to Clients
Maintainer follow-up to the 2026-08-16 HTTP & Scraping Audit:
"HTTP Clients / General" read redundant next to URL Manipulation.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:57:17 +08:00
Vinta ChenandClaude d2d344fbd2 audit: sweep Email to the shortlist cap
First Audit of the section; maintainer adjudicated 2026-08-16. yagmail
(346K/month, last push 2026-05) stays as the sole entry - the Cap is a
ceiling, not a floor.

Removed (downloads are PyPI last-30-day via ClickPy, fetched 2026-08-16):

- modoboa (7.6K/month): mail-hosting platform application, not a
  library (ajenti/indico precedent); deployments do not flow through
  pip - judgment call

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:57:17 +08:00
Vinta ChenandClaude fdf66eb1f7 audit: sweep Web Scraping to the shortlist cap
First Audit of the section; maintainer adjudicated 2026-08-16. Both
Subcategories reordered by downloads/month (Frameworks: browser-use,
scrapy, crawl4ai; Content Extraction: feedparser, html2text with a
watch - repo quiet since 2025-10 - and trafilatura).

Removed (downloads are PyPI last-30-day via ClickPy, fetched 2026-08-16):

- mechanicalsoup (162K/month): stateful-browsing era superseded by
  browser automation
- crawlberg (10.6K/month): xberg-io coordinated self-promotion (the
  org behind the standing rejection rule); repo created 2026-03,
  155 stars
- website-downloader (352/month): hobby mirroring script, 174 stars
- micawber (209K/month): oEmbed extraction, small audience next to
  the kept three
- sumy (168K/month): summarization, not content extraction - wrong
  job for the Subcategory

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:57:16 +08:00
Vinta ChenandClaude c2ba7d462c audit: sweep HTTP Clients to the shortlist cap
First Audit of the section. Restructure first, maintainer-chosen at the
preview review: the flat section splits into Clients and a minted URL
Manipulation Subcategory holding yarl (661.9M/month via BigQuery,
aio-libs, active 2026-08) and httpx.URL as a no-signal pointer to the
URL class bundled with the kept httpx. Client tiers: requests, httpx,
aiohttp Obvious; urllib3 in the Challenger slot by structure (transport
layer under requests, count inflated by that), ordered by
downloads/month. Maintainer-adjudicated 2026-08-16.

Removed (downloads are PyPI last-30-day via ClickPy, fetched 2026-08-16):

- furl (6.3M/month via BigQuery, same source as the yarl comparison):
  URL manipulation, not an HTTP client; stdlib urllib.parse covers
  parsing/joining/encoding and the minted Subcategory carries the
  ergonomic successors - yarl outpulls it 105x; repo quiet since
  2026-02
- httptap (1.7K/month): CLI diagnostic tool, repo created 2025-10,
  790 stars; no adoption

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:57:16 +08:00
Vinta ChenandClaude 1abfb1af42 refactor: split download fetchers into writer and cross-check scripts
Authored by the parallel fetch-scripts session (its intended 0cffb5f
never landed; the content rode into an audit commit by accident and is
extracted here): fetch_pypi_downloads_via_clickpy.py becomes the
flagless full-README sweep and sole writer of data/pypi_downloads.tsv;
new fetch_pypi_downloads_via_bigquery.py is a print-only cross-check
taking explicit names behind a 400 GB billing cap; audit-the-list
SKILL.md step 2 updated to match.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:57:16 +08:00
Vinta ChenandClaude 5ece46f262 docs: cover awesome-* links in the Sub-item definition
Follow-up to d07440f: the definition's placement clause described only
companion projects (flower/celery), but awesome-* also-see lists are
Sub-items too.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:39:14 +08:00
Vinta ChenandClaude 5297061a4f refactor: rename download-fetch scripts to source-suffixed scheme
fetch_pypi_downloads.py becomes fetch_pypi_downloads_via_clickpy.py and
fetch_pepy_downloads.py becomes fetch_pypi_downloads_via_pepy.py, ahead
of splitting the BigQuery path into its own file. Updates the usage
strings, the cross-file import, and the audit-the-list skill's
references to match. Pure rename, no behavior change.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:35:24 +08:00
Vinta ChenandClaude 7447549805 docs: define Sub-item in CONTEXT.md
The device now has two precedents (aws-sdk-pandas under pandas, flower
under celery in the 2026-08-16 Web Development Audit) plus the awesome-*
links; future Audits need the term - an indented link that holds no slot
and rides its parent outside the Cap.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:35:17 +08:00
Vinta ChenandClaude e7e17a8e97 style: reorder Authentication and Web Asset Management by downloads
Format-only outcomes of the 2026-08-16 Web Development Audit (no
removals): OAuth entries reordered by downloads/month (oauthlib,
authlib, django-allauth Obvious; django-oauth-toolkit Challenger),
Web Asset Management reordered (django-storages, django-compressor)
and its description gains "storing" to cover django-storages'
actual job. Template Engines, JWT, Permissions, WebSocket keeps
already sat in rule order.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:34:41 +08:00
Vinta ChenandClaude e18d52155e audit: sweep Static Site Generators to the shortlist cap
First Audit of the section; maintainer adjudicated 2026-08-16.
Reordered by downloads/month (pelican, nikola).

Removed (downloads are PyPI last-30-day via BigQuery, fetched 2026-08-16):

- lektor (12.5K/month): maintained (pushed 2026-08) but never named
  unprompted; close call vs nikola - judgment call

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:34:20 +08:00
Vinta ChenandClaude 4c57da829d audit: sweep CMS to the shortlist cap
First Audit of the section; maintainer adjudicated 2026-08-16.
Reordered by downloads/month (wagtail, django-cms).

Removed (downloads are PyPI last-30-day via BigQuery, fetched 2026-08-16):

- indico (3.2K/month): event-management application (CERN), not a CMS
  library; readers under CMS want wagtail/django-cms - judgment call

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:34:07 +08:00
Vinta ChenandClaude 6b9a1cca57 audit: sweep Admin Panels to the shortlist cap
First Audit of the section (flat Section = one Use Case, 7 entries over
the cap). Restructure first: flower is the Celery monitoring dashboard,
not an admin-panel library - it re-homes to Task Queues as a sub-item
under celery (outside the cap, aws-sdk-pandas precedent; Task Queues
sits at the hard max 5). Kept: flask-admin, django-unfold (Obvious),
django-grappelli (Challenger), ordered by downloads/month.
Maintainer-adjudicated 2026-08-16.

Removed (downloads are PyPI last-30-day via BigQuery, fetched 2026-08-16):

- ajenti (4.5K/month; its ajenti-panel package adds 4.5K): Linux server
  control panel application, not a Python admin library
- func-to-web (3.5K/month): repo created 2025-10, 425 stars; no adoption
- jet-bridge (3.7K/month): bridge into the Jet Admin SaaS, not a library
  readers seek here

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:33:54 +08:00
Vinta ChenandClaude 69e03b7e47 audit: sweep WebSocket to the shortlist cap
First Audit of the section; maintainer adjudicated 2026-08-16 at the
preview review, flipping autobahn-python to keep (enters as the
Challenger; Obvious slots are websockets, channels, flask-socketio).
Reordered by downloads/month within tiers.

Removed (downloads are PyPI last-30-day via BigQuery, fetched 2026-08-16):

- picows (66.3K/month): 290 stars; Challenger bar (adoption
  trajectory) not met

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:33:33 +08:00
Vinta ChenandClaude fb35807e83 audit: sweep Web Servers to the shortlist cap
First Audit of the section. Restructure first: the RPC Subcategory is
not an "ASGI and WSGI compatible web server" - it moves to Web APIs,
whose description gains RPC; grpcio rides the move. ASGI reordered by
downloads/month (uvicorn Obvious; granian, hypercorn Challengers -
hypercorn kept with a watch, repo quiet since 2025-11).
Maintainer-adjudicated 2026-08-16.

Removed (downloads are PyPI last-30-day via BigQuery, fetched 2026-08-16):

- daphne (6.5M/month): installed as Django Channels' dependency, not
  chosen standalone; judgment call
- uwsgi (2.0M/month): officially in maintenance mode; repo quiet since
  2025-10
- rpyc (1.6M/month): repo last push 2025-08-14, exactly 12 months -
  at the abandonment line

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:33:18 +08:00
Vinta ChenandClaude b26c30d4a9 audit: sweep Web APIs to the shortlist cap
First Audit of the section; maintainer adjudicated 2026-08-16 at the
preview review, flipping django-modern-rest to keep (enters as the
Django Challenger; Obvious slots stay django-rest-framework,
django-ninja, strawberry-django). Tiers reordered by downloads/month.

Removed (downloads are PyPI last-30-day via BigQuery, fetched 2026-08-16):

- falcon (1.8M/month): active, but not named unprompted since
  fastapi/litestar; judgment call
- sanic (1.8M/month): same judgment as falcon - declining mindshare,
  successor to nothing
- webargs (3.8M/month): request-parsing helper, not an API framework;
  wrong job for the section

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:32:49 +08:00
Vinta ChenandClaude f39d00da31 audit: sweep Web Frameworks to the shortlist cap
First Audit of the section; maintainer adjudicated 2026-08-16 at the
preview review, flipping pyramid to keep (enters as Synchronous
Challenger beside fasthtml; the three Obvious slots stay flask, django,
bottle). Both tiers reordered by downloads/month per the ordering rule.

Removed (downloads are PyPI last-30-day via BigQuery, fetched 2026-08-16):

- masonite (26.4K/month): no adoption; Laravel-style niche
- microdot (10.4K/month): MicroPython-targeted, genuinely small audience
- robyn (50.9K/month): installs never followed the buzz

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:32:28 +08:00
Vinta ChenandClaude fcac01955c feat: add pepy.tech spot-check helper for download audits
Maintainer registered a free pepy API key (PEPY_TECH_API_KEY in the gitignored repo-root .env). fetch_pepy_downloads.py sums the most recent 30 days from the v2 per-day data, throttled to the free tier's 5 requests/minute, and prints TSV without touching the single-source cache file.

The audit-the-list skill's downloads bullet is rewritten in the same commit because the ClickPy-default change made its old --dry-run-first instruction fail; it now documents all three sources (ClickPy, BigQuery, pepy/pypistats) and the never-mix-mirror-counting rule.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:19:47 +08:00
Vinta ChenandClaude fd79813dde feat: switch default PyPI download source to ClickPy
BigQuery required a personal Google Cloud account, so only the maintainer could run it and overruns cost real money. ClickPy is ClickHouse's free, keyless public mirror of the same PyPI download dataset, so it becomes the default source with a single batched query covering the full README in under a second.

BigQuery stays available behind a new --bigquery flag as the canonical-source cross-check; --dry-run now only applies to that path.

Live-tested: ClickPy full path (2/2 names), the --dry-run guard, and the BigQuery dry-run.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:17:59 +08:00
Vinta ChenandClaude a1ed550c2d fix: filter BigQuery PyPI download query on project, not file.project
Live bq show verified the pypi.file_downloads table clusters on the
top-level project column, not file.project as the docstring claimed.
Filtering on project (values verified identical to file.project across
408M rows, zero mismatches) gets cluster pruning and cuts the
full-README scan estimate from >1.2TB to ~275GB upper bound, with
actual billed bytes lower still (33.7GB measured for a single name) -
so full sweeps now fit the 1 TiB/month free tier.

Also adds --maximum_bytes_billed=400GB as a safety cap, enforced by
BigQuery pre-run against the dry-run upper-bound estimate.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 01:16:21 +08:00
Vinta ChenandClaude 7f0e923904 refactor: rename verdict-preview skill to preview-verdicts
Verb-first naming per maintainer preference. Directory, frontmatter
name, and the audit-the-list reference updated together; template.html
moves with the directory unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 00:41:57 +08:00
Vinta ChenandClaude 83f6cebd93 feat: add audit-the-list skill for recurring section audits
Packages the audit process proven across the shortlist-reform sweeps
as a reusable skill: resolve scope from the arguments (AskUserQuestion
when ambiguous or absent), fetch live evidence for every entry
(BigQuery downloads, repo state, PyPI metadata), draft verdicts with
restructure-before-cap and tier promotions/demotions, review through
the verdict-preview page, execute one commit per section on explicit
go, and record durable conclusions into CONTRIBUTING.md, CLAUDE.md,
AGENTS.md, and CONTEXT.md. CONTEXT.md gains the Audit glossary term
(the reform sweeps were the first Audits). Rules stay single-sourced in
CONTRIBUTING.md — the skill carries process only.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 00:39:29 +08:00
Vinta ChenandClaude 59cc42e2c3 docs: sync AGENTS.md with the shortlist reform rules
AGENTS.md still carried pre-reform Key Rules (mandatory alphabetical
ordering, "quality over quantity" lanes-era language, no prune-sweep
commit exception, no live-verification rule). Bring it in line with
CLAUDE.md and CONTRIBUTING.md: downloads-descending tier ordering,
3+2 cap, sweep-commit exception, verification rule. Also record the
UV_PYTHON=3.13 workaround for Python-3.14-only machines in both files'
Makefile notes, and complete CLAUDE.md's Makefile target list.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 00:38:48 +08:00
Vinta ChenandClaude 46b7b57d6b style: reorder swept sections by downloads/month within tiers
Apply the new ordering rule (downloads/month descending within each
tier, no-signal entries last alphabetically) to all ten swept sections.
Sixteen use cases change order: Vendor Agent SDKs, LLM Inference and
Serving, Speech, File Conversion, PDF, Markdown, Data Visualization
Specialized and Dashboards, Testing Frameworks and Mock, Financial
Data, Data Validation, Geolocation, Science Core and Simulation and
Modeling, Quantum Computing challengers. Unswept sections keep their
current order until their own sweeps. Bundled as a single
categorization commit per the Key Rules bundling exception.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 00:03:46 +08:00
Vinta ChenandClaude 846a6bdb91 docs: order entries by downloads/month within tiers, not alphabetically
Maintainer decision 2026-08-16, amending the ordering half of the
Challenger-marking rule: within a use case, obvious choices still come
first and challengers still follow (position stays the marker), but
each tier now orders by PyPI downloads per month descending instead of
alphabetically. Entries without a download signal (stdlib modules,
agent skill packs) sort last within their tier, alphabetically.
Updated in CONTRIBUTING.md (Entry Ordering), CONTEXT.md (Challenger),
and CLAUDE.md (Key Rules).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-16 00:02:30 +08:00
Vinta ChenandClaude c9abd51467 style: apply challenger ordering and entry format to Quantum Computing
Per ADR-0001, maintainer-adjudicated at the Data & Science preview
review (2026-08-15). No removals — all four entries keep: qiskit and
qutip as Obvious Choices (circuit SDK and quantum physics simulation,
distinct jobs), cirq and pennylane as Challengers, ordered per the
Challenger-ordering rule. Format fixes bundled per the Key Rules
bundling exception: three em-dash separators normalized to hyphens,
Cirq lowercased to its PyPI name.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:59:21 +08:00
Vinta ChenandClaude 0c1409dea8 prune: sweep Science to the shortlist cap
Per ADR-0001, maintainer-adjudicated at the Data & Science preview
review (2026-08-15, all rows live-verified). Restructure first: Core
narrows to numba, numpy, scipy; mint Symbolic Mathematics (sympy),
Statistics (statsmodels), Graphs and Networks (networkx), and
Computational Geometry (shapely) — five co-obvious tools doing five
different jobs, the decision-13 pattern. Other shrinks to a two-entry
grab-bag; colour renamed to colour-science per the PyPI-name convention
(bare 'colour' on PyPI is an unrelated color-conversion library). Then
cap.

Removed (downloads are PyPI last-30-days via BigQuery, 2026-08-15):

- cclib (29.7K/month): computational-chemistry log parsing, small
  audience
- openbabel (54.9K/month pip; conda-forge adds only 1.8M all-time):
  legacy toolbox next to rdkit
- pydy (1.2K/month): near-zero usage
- PythonRobotics: educational algorithm compilation ("sample codes and
  textbook" per its own description), not a library; not on PyPI
- pathsim (6.3K/month): no adoption

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:59:05 +08:00
Vinta ChenandClaude 9631207f54 prune: sweep Geolocation to the shortlist cap
Per ADR-0001, maintainer-adjudicated at the Data & Science preview
review (2026-08-15, all rows live-verified). Keeps geojson, geopandas,
and geopy as Obvious Choices; geodjango kept by maintainer flip and
listed last as Challenger (the cap allows three obvious choices).

Removed (downloads are PyPI last-30-days via BigQuery, 2026-08-15):

- django-countries (2.3M/month): country choices for Django forms and
  models — Django form tooling, not geolocation work

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:58:37 +08:00
Vinta ChenandClaude 9103f59cbb prune: sweep Data Validation to the shortlist cap
Per ADR-0001, maintainer-adjudicated at the Data & Science preview
review (2026-08-15, all rows live-verified). Keeps jsonschema, pandera,
and pydantic as Obvious Choices for their distinct validation jobs.

Removed (downloads are PyPI last-30-days via BigQuery, 2026-08-15):

- cerberus (6.7M/month): pre-pydantic era passed; repo alive but slow
- voluptuous (8.0M/month): pre-pydantic era passed; repo description
  opens with "CONTRIBUTIONS ONLY" (maintenance mode)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:58:22 +08:00
Vinta ChenandClaude 54c0c0c34a prune: sweep Data Ingestion / ETL to the shortlist cap
Per ADR-0001, maintainer-adjudicated at the Data & Science preview
review (2026-08-15, all rows live-verified). General keeps dlt (sole
entry). Financial Data keeps akshare and yfinance as Obvious Choices
with edgartools and openbb as Challengers (openbb on the platform
judgment: 71.9K stars against 132K pip installs).

Removed (downloads are PyPI last-30-days via BigQuery, 2026-08-15):

- lumibot (168.2K/month): algorithmic trading and backtesting framework
  with broker execution — not financial data; vertical app
  (TradingAgents precedent)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:57:55 +08:00
Vinta ChenandClaude 1463ba8286 prune: sweep Data Analysis to the shortlist cap
Per ADR-0001, maintainer-adjudicated at the Data & Science preview
review (2026-08-15, all rows live-verified). Keeps: pandas and polars
as Obvious Choices, ibis as Challenger — renamed to ibis-framework per
the PyPI-name convention (maintainer-confirmed; bare 'ibis' on PyPI is
an unrelated template engine). aws-sdk-pandas returns as a sub-item
under pandas per maintainer direction (sub-items sit outside the cap,
awesome-pytest pattern).

Removed (downloads are PyPI last-30-days via BigQuery, 2026-08-15):

- data-profiling (18.2K/month under fg-data-profiling): YData's
  profiler, but the listed name is not on PyPI and a profiling layer is
  not an obvious choice for this use case
- datasette (178.6K/month): data publishing and exploration tool, a
  different job
- desbordante (3.4K/month): no adoption
- modin (1.6M/month): the pandas-at-scale job moved to polars and dask;
  repo quiet since 2026-02
- pathway (16.5K/month): stars far ahead of usage (62.5K stars); ETL
  job, mis-homed here
- percentify (182.2K/month): personal project, 11-month-old repo, 418
  stars — count not credible against the footprint

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:57:39 +08:00
Vinta ChenandClaude 9290f18153 feat: reinstate bokeh as Plotting challenger
The maintainer re-verified all 36 removals from the committed-drops audit against live data on 2026-08-15 and flipped bokeh back: 8.4M downloads/month, 20.4K stars, repo pushed the same day, the healthiest project among all audited drops. Placed as the second Challenger after altair, bringing Plotting to the hard max of 5 entries.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:53:46 +08:00
Vinta ChenandClaude 3ae3483d36 docs: reinstate crewai in AI and Agents orchestration
Re-added as a Challenger alongside pydantic-ai. The maintainer reviewed the committed-drops audit (all 36 removals re-verified against live data 2026-08-15) and flipped crewai back: 19.4M downloads/month, 57.1K stars, repo active same-day. The original 'buzz peaked' drop was judgment the audit data did not support.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:53:12 +08:00
Vinta ChenandClaude bb53dfea9d docs: require live verification of keep/drop reasons
Qualitative keep/drop reasoning previously relied on training-data
recollections that went unverified while only download numbers were
checked live, as happened in the Data & Science preview. Key Rules now
require every keep/drop reason to be verified against current online
data at decision time.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 23:31:34 +08:00
Vinta ChenandClaude fc88ebb899 feat: add BigQuery-based PyPI downloads fetcher
Provides per-sitting download evidence for prune sweeps, per the
shortlist-reform tooling plan. Shells out to the bq CLI against
bigquery-public-data.pypi.file_downloads, parses entry names from
README.md via readme_parser, and supports --dry-run and --names-file.
Merges results into the gitignored cache at
website/data/pypi_downloads.tsv.

The table is clustered on file.project, so scanned bytes grow with the
IN-list size: a dry run against the full README (~530 names) scanned
1.21 TB, past the 1 TB/month free tier. Per-sitting --names-file
fetches are used instead of one big query.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 15:41:55 +08:00
Vinta ChenandClaude b0cdf402eb feat: add verdict-preview skill for maintainer review pages
Adds a reusable skill that generates the interactive keep/drop review page (seeded verdicts + reasons, maintainer Keep/Drop toggles and reason fields, JSON feedback export) and processes the pasted feedback, so every future prune sweep or batch entry edit reuses the pattern proven in the shortlist-reform reviews. Removes .claude/skills/ and the dead .agents/ line from .gitignore so the skill is tracked, per maintainer direction.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 15:28:16 +08:00
Vinta ChenandClaude 5200ffa289 prune: sweep Testing to the shortlist cap
Per ADR-0001, restructure first: split GUI / Web Testing into Browser
Automation (playwright-python, selenium), Load Testing (locust), and
API Testing (schemathesis). Then cap. Maintainer-adjudicated 2026-08-15
at the preview review: robotframework, schemathesis, respx, vcrpy, and
mimesis keep against the old dry-run verdicts; respx and vcrpy take the
two Mock Challenger slots, nox stays the Test Runners Challenger
(listed after tox per the Challenger-ordering rule).

Removed (downloads are PyPI last-month, fetched 2026-08-15):

- scanapi (3.3K/month): near-zero usage
- unittest: stdlib rule - a stdlib module survives only where it is
  itself the Obvious Choice; for test frameworks that is pytest
- pyautogui (2.5M/month): desktop GUI automation, not web testing; no
  Use Case slot after the Split
- mocket (273K/month): socket-level mocking; small audience next to
  responses

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 15:20:50 +08:00
Vinta ChenandClaude 5488d08db1 prune: sweep Data Visualization to the shortlist cap
Per ADR-0001. No restructure needed: Plotting caps to matplotlib,
plotly, seaborn plus altair as Challenger (listed last per the
Challenger-ordering rule); Specialized (cartopy, graphify, pygraphviz)
and Dashboards and Apps (gradio, streamlit) already fit.

Removed (downloads are PyPI last-month via pypistats, 2026-08-14/15):

- bokeh (8.4M/month): Plotting at cap; interactive plotting job covered
  by plotly
- plotnine (3.1M/month): below the shortlist bar
- vispy (1.4M/month): below the shortlist bar
- pyqtgraph (1.0M/month): below the shortlist bar
- bqplot (381K/month): below the shortlist bar
- pygal: legacy; downloads fetch failed
- ultraplot (3.9K/month): no adoption

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 14:39:53 +08:00