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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Broaden argument-hint to cover thematic groups alongside sections,
and backtick tool/skill names for consistency.
Co-Authored-By: Claude <noreply@anthropic.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>