Move overflow-x: auto from .table-wrap to the mobile breakpoint only,
so horizontal scrolling only applies on small screens. Add box-shadow
to sticky thead th for visual separation. Reset th position to static
on mobile to avoid stacking context issues.
Co-Authored-By: Claude <noreply@anthropic.com>
The smooth scroll behavior felt sluggish on a 505-row page. Instant
jump is more responsive for a utility button.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace hidden attribute on filter-bar with opacity/transform transition
driven by a .visible class, allowing smooth fade-in/slide-down when a
filter is active. Add staggered hero-in keyframe animations to the page
title, subtitle, action buttons, and search box. Polish sortable table
headers with color transition on hover and active states.
Co-Authored-By: Claude <noreply@anthropic.com>
Previously used right: max(1.5rem, calc(50vw - 700px + 0.5rem)) which
caused the button to overlap content at certain viewport widths. Switch
to left: 50% with margin-left: -2rem to keep it centered relative to
the viewport without interfering with sidebar or content layout.
Co-Authored-By: Claude <noreply@anthropic.com>
Adds a fixed-position button that fades in after scrolling 600px and
smoothly scrolls back to the top on click. Hidden by default via the
HTML hidden attribute so noscript users never see it.
Co-Authored-By: Claude <noreply@anthropic.com>
Within the same star count, built-in (stdlib) entries were interleaved
with third-party entries. Add a builtin tier to the sort key so stdlib
entries always rank below non-stdlib entries at equal star counts.
Co-Authored-By: Claude <noreply@anthropic.com>
Stdlib entries now show a "Built-in" tag alongside their regular
category tag. The tag is clickable and filters to all 17 stdlib
entries. Added to data-cats attribute so existing filter logic works.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entries with source_type 'Built-in' have no extractable GitHub repo key
from their URL, so they never received star/metadata enrichment. Fall
back to python/cpython for these entries so the star count and related
data are populated correctly.
Co-Authored-By: Claude <noreply@anthropic.com>
Previously, two entries sharing the same URL but different names would be
collapsed into one. Using a composite (url, name) key preserves distinct
entries while still merging true duplicates.
Co-Authored-By: Claude <noreply@anthropic.com>
Detect the hosting source (stdlib, GitLab, Bitbucket, External) from
the entry URL and surface it as a small badge in the stars column where
a star count would otherwise show an em dash.
Stdlib entries also get their own sort tier — between starred entries
and other no-star entries — so the standard library is not buried at
the bottom of each category.
Co-Authored-By: Claude <noreply@anthropic.com>
spark.ml, django.db.models, and geodjango were pointing to
documentation pages as their primary link rather than the
GitHub repository. Move docs URLs inline as descriptive links
so the primary link follows the standard GitHub-first convention.
Co-Authored-By: Claude <noreply@anthropic.com>
Several sections were removed in recent cleanup commits, so the previous
floor of 76 was no longer accurate.
Co-Authored-By: Claude <noreply@anthropic.com>
now_iso and total_batches were recomputed on every iteration. Moving them
above the loop makes intent clearer and avoids redundant work. Also
simplifies cache dict construction with dict unpacking.
Co-Authored-By: Claude <noreply@anthropic.com>
Calling getSortValue inside the comparator ran DOM queries on every
comparison (O(n log n) reads). Hoisting into a forEach beforehand reduces
that to O(n). Batching row appends through a DocumentFragment also avoids
repeated reflows during table reorder.
Co-Authored-By: Claude <noreply@anthropic.com>
Entry was dead code with no callers. Switching from shutil.copy to
write_text uses the already-loaded readme_text variable directly instead
of re-reading the file from disk.
Co-Authored-By: Claude <noreply@anthropic.com>
Remove the Editor Plugins and IDEs section — modern editors handle Python
via LSP natively, making a curated list of editor plugins less useful.
Consolidate the standalone RPC Servers section into a subsection under
Web Servers to reflect that grpcio and rpyc are network server libraries,
not a separate category.
Co-Authored-By: Claude <noreply@anthropic.com>
Expand the Email section description to mention mail server management.
Replace the unmaintained pymssql entry with the official Microsoft
mssql-python driver, which is actively maintained and built on ODBC.
Co-Authored-By: Claude <noreply@anthropic.com>
Update GitHub URLs for projects that have moved to new organizations or
official accounts: jax, keras, lightgbm, gensim, fastapi, uvicorn,
authlib, django-oauth-toolkit, flask-admin, cassandra-driver, akshare,
altair, bqplot, pymc, python-cqrs, ptpython, prospector, isort,
schemathesis, django-debug-toolbar, awesome-sphinxdoc, YouCompleteMe,
SpiffWorkflow, rpyc, typer, dearpygui, ftfy, textdistance, pendulum,
poetry, websockets. Also updates keras description to reflect multi-backend
support and pymc description to match current project scope. Removes PTVS
(archived) entry.
Co-Authored-By: Claude <noreply@anthropic.com>
Remove entries that are unmaintained, low-quality, or superseded:
werkzeug (WSGI server section), feincms, ultrajson, schema, voluptuous,
bpython, splinter, s3cmd, kafka-python, streamparse, zerorpc,
bashplotlib, quads, dejavu, kapre, pyAudioAnalysis, harfang3d,
configobj.
Add awscli to Cloud Providers as a widely-used modern alternative.
Co-Authored-By: Claude <noreply@anthropic.com>
Remove eve, cornice, python-jose, python-readability, yapf, py2app, and
py2exe as unmaintained or superseded. Replace youtube-dl with yt-dlp,
its actively maintained fork.
Co-Authored-By: Claude <noreply@anthropic.com>
- Web APIs: add django-ninja and apiflask, remove django-tastypie, flask-restful, and sandman2
- Web Scraping: remove grab and newspaper (unmaintained)
- Data Validation: remove colander and schematics (low activity)
- Testing: remove nose2 (superseded by pytest)
- Profiler: replace vprof with scalene (actively maintained, more capable)
- Package Management: remove mamba (redundant with conda)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove makesite, pysimdjson, python-rapidjson, python-ds, buildout,
Levenshtein, and arrow as standalone entries due to low quality or
maintenance concerns. Fold cytoolz reference into the toolz entry to
reduce duplication while preserving discoverability.
Co-Authored-By: Claude <noreply@anthropic.com>
Drops entries that are abandoned, redundant, or no longer meet quality bar:
- NLP: pattern (unmaintained since 2018)
- Computer Vision: tesserocr (superseded by pytesseract)
- Recommender Systems: spotlight (archived, no longer maintained)
- API: flask-api (deprecated in favour of flask-restful), hug (archived)
- Caching: beaker (unmaintained, WSGI-era legacy)
- File Formats: textract (unmaintained, fragile system deps)
Co-Authored-By: Claude <noreply@anthropic.com>
- Web Scraping: split into Frameworks and Content Extraction subcategories
- DevOps: rename SSH-style Deployment to Deployment (absorbs Serverless),
merge Process Management into Monitoring as Monitoring and Processes,
collapse Backup/Chaos Engineering/Git Hooks into Other
- Fold standalone Processes section into DevOps > Monitoring and Processes
- Merge Audio Processing and Video Processing into Audio & Video Processing
- Remove Processes from ToC; update Audio/Video ToC entry
Co-Authored-By: Claude <noreply@anthropic.com>
- Merge URL Manipulation (single entry) into HTTP Clients
- Move python-slugify into General Text Processing, removing the one-entry Slugify subcategory
- Consolidate YAML, TOML, and CSV subcategories into a single Data Formats group
- Split Data Analysis into General and Financial Data subcategories to improve discoverability
Co-Authored-By: Claude <noreply@anthropic.com>
Removes 14 entries from Asset Management, Web Content Extracting, URL
Parsing, Search, Testing, Task Queues, Subprocesses, Network
Virtualization, Text / Slugify, HTML & XML, File Format Processing,
Audio, and Video sections.
Co-Authored-By: Claude <noreply@anthropic.com>
Update the 'Also see' link from the old absolute GitHub URL pointing
to #restful-api to the current relative anchor #web-apis, matching
the section rename in a previous refactor.
Co-Authored-By: Claude <noreply@anthropic.com>
Restructures the top-level ToC groups for better logical cohesion:
- Split 'Web & API' into 'Web' (frameworks, servers, CMS) and
'HTTP & Scraping' (clients, scraping, URL, email)
- Move 'Database & Storage' earlier in the ToC, before 'Data & Science'
- Merge 'Web Content Extraction' and 'Web Crawling' into a single
'Web Scraping' section
- Rename 'Content & Media' to 'Text & Documents' and 'Media' (split)
- Rename 'System & Runtime' to 'Python Language' and 'Python Toolchain'
- Rename 'Security & Auth' to 'Security'; move Authentication to Web group
- Rename 'Development Tools' to 'Developer Tools', 'DevOps & Infrastructure' to 'DevOps'
- Reorder sections within groups to reflect learning progression
(e.g., Deep Learning before Machine Learning in AI & ML)
- Move Hardware and Microsoft Windows to Miscellaneous group
- Add s3cmd to DevOps and youtube-dl to Command-line Tools
- Update CONTRIBUTING.md example group names to match new labels
Co-Authored-By: Claude <noreply@anthropic.com>
The website builder previously relied on a hardcoded SECTION_GROUPS list in
build.py to organize categories into thematic groups. This was fragile: any
rename or addition to README.md required a matching code change.
Replace this with a parser-driven approach:
- readme_parser.py now detects bold-only paragraphs (**Group Name**) as
group boundary markers and groups H2 categories beneath them into
ParsedGroup structs.
- build.py drops SECTION_GROUPS entirely; group_categories() now just
passes parsed groups through and appends the Resources group.
- sort.py is removed as it relied on the old flat section model.
- Tests updated throughout to reflect the new (groups, resources) return
shape and to cover the new grouping logic.
Co-Authored-By: Claude <noreply@anthropic.com>
Group the Table of Contents entries under bold section headers (AI & ML,
Web & API, Data & Science, etc.) so the README is easier to navigate at
a glance. Update CONTRIBUTING.md to reflect that new sections should be
placed under the appropriate thematic group instead of in a flat list.
Co-Authored-By: Claude <noreply@anthropic.com>
Group flat lists into labeled subcategories to improve scannability and navigation.
Also remove entries that don't meet curation standards and fix the toga repo URL.
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove subcategory groupings (General, Financial Data, Mail Servers, etc.) in favor of flat alphabetical lists
- Rename sections to plural forms: Downloader -> Downloaders, Job Scheduler -> Job Schedulers, Static Site Generator -> Static Site Generators, Template Engine -> Template Engines, Web Content Extracting -> Web Content Extraction
- Rename Specific Formats Processing -> File Format Processing
- Move financial data libraries (akshare, edgartools, openbb, yfinance) from Downloaders to Data Analysis
- Fix TOC ordering: Database/Database Drivers, Web APIs, Web Servers entries moved to alphabetical positions
Co-Authored-By: Claude <noreply@anthropic.com>
- Merge ASGI Servers and WSGI Servers into a single Web Servers section
- Merge RESTful API and GraphQL into Web APIs section
- Move Permissions entries under Authentication as a subsection
- Move Refactoring entries under Code Analysis as a subsection
- Move Serverless Frameworks entries under DevOps as a subsection
- Move Shell (xonsh) under CLI Tools
- Move Internationalization (babel) under Text Processing
- Move Robotics (PythonRobotics) under Science
- Remove standalone Internationalization, Permissions, Refactoring, Serverless Frameworks, Shell, Robotics, and GraphQL sections
- Fix capitalization in TOC entries (Penetration Testing, Framework Agnostic)
Co-Authored-By: Claude <noreply@anthropic.com>
Entries appearing in more than one category were previously emitted as
separate rows. They are now deduplicated in build.py by URL, collecting
all category and group names into lists.
The template encodes those lists as pipe-delimited data attributes
(data-cats, data-groups) and renders a tag button per category.
The JS filter is updated to split on '||' and check for membership,
so clicking any category tag correctly shows the merged row.
Co-Authored-By: Claude <noreply@anthropic.com>