Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1477 commits
Select commit Hold shift + click to select a range
8861bcc
feat: add Open Graph image for social sharing
vinta Mar 24, 2026
60836d0
refactor(css): extract inline OKLCH values into CSS custom properties
vinta Mar 24, 2026
440a7c8
docs: rewrite SPONSORSHIP.md with clearer structure and comparison table
vinta Mar 21, 2026
f91c8fa
perf: self-host Google Fonts to eliminate render-blocking external re…
vinta Mar 24, 2026
2bdd0c2
fix(a11y): bump hero-proof text lightness from 68% to 75% for WCAG AA…
vinta Mar 24, 2026
db83de1
Revert "perf: self-host Google Fonts to eliminate render-blocking ext…
vinta Mar 24, 2026
d58c915
fix(a11y): respect prefers-reduced-motion in back-to-top scroll
vinta Mar 24, 2026
86885bc
fix(a11y): wrap sort column headers in button elements
vinta Mar 24, 2026
2e5a567
fix(css): limit hero sheen animation to 3 iterations
vinta Mar 24, 2026
dd3b2cc
docs: remove hardcoded entry count from sponsorship description
vinta Mar 24, 2026
088680e
fix(css): correct mobile expand-row hiding for col-cat vs expand-row …
vinta Mar 24, 2026
e06cb93
fix(css): expand sort header hit area to full th cell
vinta Mar 24, 2026
65bc88b
feat(css): add external link indicator for inline text links
vinta Mar 24, 2026
0e2c7fc
fix(a11y): enlarge tag touch target to meet 44px WCAG minimum
vinta Mar 24, 2026
6050b65
fix(a11y): use descriptive screen reader label for row number column
vinta Mar 24, 2026
ec5687a
fix(css): use overflow-x clip on table-wrap instead of static thead o…
vinta Mar 24, 2026
f1799c2
perf(fonts): defer Google Fonts load to avoid render-blocking
vinta Mar 24, 2026
7df2e36
feat(mobile): show last commit date in expand row on mobile
vinta Mar 24, 2026
63182f2
Revert "feat(css): add external link indicator for inline text links"
vinta Mar 24, 2026
cf9cde8
fix(css): use display:none for expand-row first/last cells on mobile
vinta Mar 24, 2026
856f436
fix(css): consolidate table-wrap overflow-x into single breakpoint
vinta Mar 24, 2026
6cb0cac
fix(css): increase footer font size from text-xs to text-sm
vinta Mar 24, 2026
8e360e8
style(html): reformat index.html for consistent indentation
vinta Mar 24, 2026
eb5b37d
feat(ux): smooth-scroll hero CTA without updating URL hash
vinta Mar 24, 2026
53684e7
fix(css): increase sort button focus outline-offset from 2px to 3px
vinta Mar 24, 2026
66242cf
refactor(css): consolidate .expand-commit into shared mobile media query
vinta Mar 24, 2026
57e4adb
style(html): reformat hero CTA anchor tag onto multiple lines
vinta Mar 24, 2026
3b69697
refactor(js): extract getScrollBehavior() helper to deduplicate prefe…
vinta Mar 24, 2026
d7a7e68
refactor(js): simplify filter state to a plain string
vinta Mar 24, 2026
57a5b43
fix(js): drop legacy category/group URL param aliases for filter
vinta Mar 24, 2026
4456783
docs: update social handle from Twitter to X (twitter.com -> x.com)
vinta Mar 24, 2026
7fdf6ab
refactor(js): hoist repeated queries, drop stale comments, tighten co…
vinta Mar 24, 2026
80d9279
refactor(css): consolidate .sort-btn:focus-visible into shared focus-…
vinta Mar 24, 2026
0b08110
fix(css): remove explicit flex layout from .hero-topbar mobile override
vinta Mar 24, 2026
7b6829c
style(html): reformat templates for consistent attribute and block sp…
vinta Mar 24, 2026
9425ab5
refactor(js): replace var with const for immutable bindings
vinta Mar 24, 2026
a667c1e
refactor(ai): reorganize AI agent subsections and add mem0
vinta Mar 24, 2026
59f7d23
Fix xlwings GitHub link in README.md
JinyangWang27 Mar 25, 2026
2368bad
Merge pull request #2990 from JinyangWang27/fix-xlwings-url
JinyangWang27 Mar 25, 2026
393cf3d
Merge branch 'master' into add-logfmter-logging-library
josheppinette Mar 25, 2026
e65d9d3
feat(ai): add unsloth for faster LLM fine-tuning
vinta Mar 26, 2026
bddb692
Merge pull request #2974 from josheppinette/add-logfmter-logging-library
JinyangWang27 Mar 26, 2026
85bc9db
remove jieba
JinyangWang27 Mar 26, 2026
a87ba8e
Merge pull request #2993 from JinyangWang27/remove-jieba
JinyangWang27 Mar 26, 2026
9c67209
Fixed broken readme links
ShiwamKumar2208 Mar 27, 2026
04515e7
Merge pull request #2998 from ShiwamKumar2208/fix-readme-links
vinta Mar 27, 2026
c96e58b
Update ToC display text to match CLI category headings
vinta Mar 27, 2026
1b62ccf
docs: fix typo in installation instructions.
24f3000956 Mar 27, 2026
50600b9
feat: add pyodide to Python Implementations
vinta Mar 27, 2026
a3e743b
Added voluptuous library under Data Validation section
poojitha-sys281 Mar 27, 2026
d836f79
Fix: Capitalize description for jax in Deep Learning section
Allwell987 Mar 28, 2026
13b8410
Add TabGAN - synthetic tabular data generation library
Diyago Mar 28, 2026
94d29d8
Merge pull request #3002 from Allwell987/patch-1
JinyangWang27 Mar 29, 2026
7f3d5ce
Merge pull request #2999 from Rohit-Mal-IITM/patch-1
JinyangWang27 Mar 29, 2026
fed92e7
Remove extra empty line, place TabGAN in alphabetical order
Diyago Mar 29, 2026
9084be2
Merge pull request #3003 from Diyago/add-tabgan
JinyangWang27 Mar 29, 2026
babb09f
fix: use subprocess instead of os.system in fetch_github_stars.py
orbisai0security Mar 30, 2026
a0e4e65
Merge pull request #3000 from poojitha-sys281/master
JinyangWang27 Mar 30, 2026
87c5f3b
Merge pull request #3007 from orbisai0security/fix-fix-v-006-graphql-…
vinta Mar 30, 2026
1ae889b
fix: stricter GitHub owner/repo regexes and injection tests
vinta Mar 30, 2026
e9be000
refactor(fetch_github_stars): drop underscore prefix from regex const…
vinta Mar 30, 2026
4031521
Fix typo in daphne description in README.md
23f3000503 Mar 30, 2026
944da15
Merge pull request #3008 from 23f3000503/master
vinta Mar 31, 2026
1426abc
chore(deps): bump pygments from 2.19.2 to 2.20.0
dependabot[bot] Mar 31, 2026
36d8ca9
Merge pull request #3010 from vinta/dependabot/uv/pygments-2.20.0
vinta Mar 31, 2026
444bdb1
add TradingAgents
JinyangWang27 Apr 1, 2026
88c43eb
Merge pull request #3012 from JinyangWang27/add-trading-agents
JinyangWang27 Apr 1, 2026
5974274
Fix SQLite casing in Database Drivers section
alideniztartma Apr 1, 2026
e1869aa
Merge pull request #3014 from aliden1z/fix-sqlite-casing
vinta Apr 2, 2026
54864ab
ci: merge build/deploy jobs and cache stars by date
vinta Apr 3, 2026
520e285
test: add entry validation and broken-link detection tests
vinta Apr 3, 2026
b7b8eb0
ci: always run tests and simplify branches syntax in deploy workflow
vinta Apr 3, 2026
20bb5cc
docs: fix entry format in PR template to use - instead of *
vinta Apr 3, 2026
c6004c9
ci: skip tests on non-scheduled deploy runs
vinta Apr 3, 2026
f4637e3
Add sglang to the list of libraries in README
torinsong Apr 2, 2026
aa1e3d5
Add sglang to the list of libraries in README
torinsong Apr 3, 2026
a2303c9
ci: skip deploy job on forks
vinta Apr 3, 2026
3c6429a
Merge pull request #3015 from torinsong/master
JinyangWang27 Apr 4, 2026
e078d5b
Add picows library to WebSocket section
tarasko Apr 5, 2026
f63c9f8
Update 'picows' entry in README
tarasko Apr 5, 2026
7a34849
Merge pull request #3027 from tarasko/master
JinyangWang27 Apr 7, 2026
68c8fd4
Add Python Developer Tooling Handbook to Resources > Websites
tdhopper Apr 7, 2026
38b710e
add hermes-agent
vinta Apr 8, 2026
d902e5b
docs: update SPONSORSHIP.md copy
vinta Apr 9, 2026
d5158f8
Add lumibot to Financial Data section
grzesir Apr 11, 2026
6d49926
Merge pull request #3046 from grzesir/add-lumibot
JinyangWang27 Apr 11, 2026
f4201b8
Add httptap to Debugging Tools
ozeranskii Apr 12, 2026
985400c
Update README.md
ozeranskii Apr 13, 2026
65f3649
Merge pull request #3056 from ozeranskii/patch-1
JinyangWang27 Apr 13, 2026
1843b8f
chore(deps-dev): bump pytest from 9.0.2 to 9.0.3
dependabot[bot] Apr 14, 2026
d06ab97
Add repowise to Code Analysis
RaghavChamadiya Apr 14, 2026
64e74b9
Merge pull request #3062 from RaghavChamadiya/add-repowise
JinyangWang27 Apr 14, 2026
a5a38f7
Merge pull request #3060 from vinta/dependabot/uv/pytest-9.0.3
vinta Apr 15, 2026
64de7f4
Add `respx` library to Mock section
lundberg Apr 16, 2026
c487e88
Merge pull request #3066 from lundberg/patch-1
JinyangWang27 Apr 17, 2026
b3a00e0
Add ydata-profiling to data analysis tools list
shreya975 Apr 17, 2026
a467209
Add data-profiling link and remove ydata-profiling
shreya975 Apr 18, 2026
aabf43c
Correct desbordante entry in README
shreya975 Apr 18, 2026
04c3a63
Fix typo in desbordante description
shreya975 Apr 18, 2026
bec38b2
Merge pull request #3067 from shreya975/patch-1
JinyangWang27 Apr 18, 2026
2a347b1
Add bub framework to orchestration section
PsiACE Apr 18, 2026
840e255
docs: clarify sponsorship tiers, payment terms, and editorial policy
vinta Apr 18, 2026
3af0909
docs(SPONSORSHIP): restructure Get Started as explicit checklist of r…
vinta Apr 18, 2026
f6fdd6a
docs(SPONSORSHIP): rename tiers to Headline Sponsor and Featured Sponsor
vinta Apr 18, 2026
5d4bfdd
docs(SPONSORSHIP): flatten tier benefit lists, remove redundant subhe…
vinta Apr 18, 2026
ba96331
add back "jieba", it's still useful and works in Python 3.13 actually
vinta Apr 18, 2026
d7e6f1d
Merge pull request #3070 from PsiACE/patch-1
JinyangWang27 Apr 19, 2026
f3ac16c
Merge pull request #3035 from tdhopper/add-pydevtools
JinyangWang27 Apr 19, 2026
9290cfb
add sponsor: pyr
vinta Apr 19, 2026
222f566
Merge pull request #3075 from vinta/sponsor/pyr
vinta Apr 19, 2026
774ab69
feat(website): add sponsors section parsed from README
vinta Apr 19, 2026
a4b7fc6
adjust css
vinta Apr 19, 2026
b897676
refactor(fetch_github_stars): remove redundant early-return guard in …
vinta Apr 19, 2026
e47d229
refactor(readme_parser): consolidate state reset to tail of flush_group
vinta Apr 19, 2026
a358d45
refactor: use datetime.UTC alias instead of timezone.utc
vinta Apr 19, 2026
b9236c4
refactor(fetch_github_stars): drop unnecessary keyword-only marker on…
vinta Apr 19, 2026
c85f81b
refactor(build): accept Path directly in build() signature
vinta Apr 19, 2026
7f4a163
refactor(build): tighten extract_entries parameter types to ParsedSec…
vinta Apr 19, 2026
7e7de19
refactor(build): remove StarData TypedDict, loosen load_stars return …
vinta Apr 19, 2026
e0b0dc9
refactor(readme_parser): add _href helper to narrow attrGet return type
vinta Apr 19, 2026
486fbf2
refactor(readme_parser): replace _find_first_link with _find_child(in…
vinta Apr 19, 2026
85b55ef
refactor(readme_parser): inline _is_leading_link at its call site
vinta Apr 19, 2026
39b65bc
refactor(build): inline format_stars_short into its call site
vinta Apr 19, 2026
95115f7
refactor(fetch_github_stars): replace manual slice loop with itertool…
vinta Apr 19, 2026
6ae7c89
refactor: replace manual total_seconds()/3600 with timedelta comparison
vinta Apr 19, 2026
0630ee9
refactor(build): flatten extract_entries and annotate result dict
vinta Apr 19, 2026
420bf8c
refactor(readme_parser): collapse render_inline_html/text into _rende…
vinta Apr 19, 2026
9293696
refactor(readme_parser): fuse _parse_sponsor_item into single pass
vinta Apr 19, 2026
f10337b
refactor(tests): modernize test_readme_parser to use pathlib.Path
vinta Apr 19, 2026
257b69a
style(sponsors): bump section-label to --text-lg within sponsor scope
vinta Apr 19, 2026
f3c8377
chore: remove arrow from 'Become a sponsor' link and its CSS rules
vinta Apr 19, 2026
19496c2
refactor(css): replace sponsor-become border underline with text-deco…
vinta Apr 19, 2026
7625d1f
style: use --accent-underline on sponsor link underline
vinta Apr 19, 2026
674c169
fix(css): scope --accent-underline to sponsor-become hover; restore -…
vinta Apr 19, 2026
35aee20
remove color
vinta Apr 19, 2026
cfcc564
Merge pull request #3076 from vinta/chore/code-cleanup
vinta Apr 19, 2026
fb33f90
Fix capitalization
vinta Apr 19, 2026
6c0b0e3
docs: add .impeccable.md design context file
vinta Apr 19, 2026
f65a2aa
docs(impeccable): prohibit inner max-width caps; override 65-75ch rule
vinta Apr 19, 2026
ebeff71
docs(.impeccable): add placestoread reference, no-green rule, type si…
vinta Apr 19, 2026
b0af62d
Add `django-modern-rest` hidden gem
sobolevn Apr 20, 2026
f461e73
update rules
vinta Apr 20, 2026
8329283
Merge pull request #3077 from sobolevn/patch-3
JinyangWang27 Apr 21, 2026
f97773f
Add timesfm to Machine Learning
vinta Apr 21, 2026
b4c5597
Add mlx-lm to AI and Agents > Pre-trained Models and Inference
vinta Apr 21, 2026
94fe9b3
Add voxcpm to Audio & Video Processing > Audio
vinta Apr 21, 2026
c08b123
Move voxcpm to AI and Agents > Pre-trained Models and Inference
vinta Apr 21, 2026
0235970
Add vibevoice to AI and Agents > Pre-trained Models and Inference
vinta Apr 21, 2026
2067733
Move speech models into new Speech subcategory
vinta Apr 21, 2026
4fbe137
Add openai-whisper to AI and Agents > Speech
vinta Apr 21, 2026
e153f10
docs: add commit granularity rule for entry changes
vinta Apr 21, 2026
4e85b22
docs: apply entry rules to direct commits too
vinta Apr 21, 2026
935a83b
docs: drop duplicate Entry Format block from CLAUDE.md
vinta Apr 21, 2026
4fb6c40
docs: reference SPONSORSHIP.md in Structure section
vinta Apr 21, 2026
79d60b8
docs(contributing): tighten rising star and minimum age thresholds
vinta Apr 21, 2026
99d883c
docs(ai-agents): add skills-curated link to trailofbits-skills entry
vinta Apr 21, 2026
0bf9522
chore: add uv supply-chain hardening and enforce locked installs
vinta Apr 21, 2026
4a334d9
docs(message-brokers): add FastStream and Message Brokers category
vvlrff Apr 21, 2026
e590d33
docs(ai-agents): add ag2 to Orchestration
vvlrff Apr 21, 2026
976ae94
replace pyre-check with pyrefly
vinta Apr 21, 2026
9ac5e6b
fix description
vinta Apr 21, 2026
756314e
Merge pull request #3080 from vvlrff/add-ag2
JinyangWang27 Apr 22, 2026
ead4794
Merge branch 'master' into add-faststream
vvlrff Apr 22, 2026
0a32053
Added simulation library
Basit-Rahim Apr 23, 2026
427dfc0
Rename Message Brokers to Messaging
vvlrff Apr 23, 2026
39b1476
docs(ai-agents): add OpenAI's framework for building AI agents
smortezah Apr 24, 2026
e386fbb
add Web Security section and secure
cak Apr 24, 2026
8924f6d
Merge pull request #3079 from vvlrff/add-faststream
JinyangWang27 Apr 24, 2026
5a3c61d
Merge pull request #3089 from smortezah/master
JinyangWang27 Apr 24, 2026
154dbaa
Merge pull request #3090 from cak/master
JinyangWang27 Apr 24, 2026
3854021
Add OpenChronicle to the list of AI frameworks
JinyangWang27 Apr 26, 2026
b582db9
Merge pull request #3071 from Tlaloc-Es/patch-1
Tlaloc-Es Apr 27, 2026
07ad943
Merge pull request #3094 from JinyangWang27/JinyangWang27-patch-1
JinyangWang27 Apr 27, 2026
aa25d61
add also see awesome-python-testing to Testing
vinta May 1, 2026
42a04dc
add awesome-pytest under pytest
vinta May 1, 2026
ccd4fb7
List https://github.com/wsvincent/awesome-django instead
vinta May 1, 2026
d9f26a8
Improve SEO/AEO discovery surface for awesome-python.com (#3103)
vinta May 1, 2026
429c9b3
feat: generate llms.txt from template and annotate entries with star …
vinta May 1, 2026
e11afd1
feat(website): generate static category pages
vinta May 2, 2026
c98cbe2
style(website): clarify category section heading
vinta May 2, 2026
b00395a
add missing links of category descriptions
vinta May 2, 2026
7fadbaf
feat(website): add homepage category directory
vinta May 2, 2026
4005c2e
feat(website): add slug and url to subcategory entries
vinta May 2, 2026
39d4b3d
feat(website): add subcategory_path and subcategory_public_url helpers
vinta May 2, 2026
a46b57e
fix(readme): rename group "Miscellaneous" to "Other"
vinta May 2, 2026
583d5e7
feat(website): assert unique slugs across categories and groups
vinta May 2, 2026
cee1e65
test(website): hoist pytest import to module level
vinta May 2, 2026
532d93d
feat(website): generate static pages for groups under /categories/
vinta May 2, 2026
eeecacc
feat(website): generate static pages for subcategories
vinta May 2, 2026
6bc9d83
refactor(website): match subcategory by URL prefix instead of name split
vinta May 2, 2026
0370223
feat(website): show parent category breadcrumb on subcategory pages
vinta May 2, 2026
20df47e
style(website): add CSS for category-breadcrumb and assert absence on…
vinta May 2, 2026
fe7fd35
feat(website): include group and subcategory URLs in sitemap
vinta May 2, 2026
e320ba7
test(website): restore exact sitemap URL list and lastmod count check
vinta May 2, 2026
e0e7fc9
feat(website): embed filter-to-url map in index for client routing
vinta May 2, 2026
7043322
fix(website): escape </script> in embedded filter URLs JSON
vinta May 2, 2026
04a04a1
feat(website): add data-url to tag buttons for client-side routing
vinta May 2, 2026
b0136ac
feat(website): switch index filter URLs from querystring to path
vinta May 2, 2026
8e00055
fix(website): remove duplicate tag on group/category pages
vinta May 2, 2026
8e72e8a
feat(website): strip #library-index from URL after All projects click
vinta May 2, 2026
1139402
fix(website): stop category-page heading from wrapping
vinta May 3, 2026
03db91b
style(website): left-align results note on category pages
vinta May 3, 2026
0336942
feat(website): move descriptions into expand row on category pages
vinta May 3, 2026
d64b47b
feat(website): mirror index layout on category pages
vinta May 3, 2026
70a8255
feat(website): add /categories/built-in/ page for Built-in tag filter
vinta May 3, 2026
b82a254
fix(website): clear filter lands at /#library-index on category pages
vinta May 3, 2026
6478111
feat(website): add Browse by category nav to group page hero
vinta May 3, 2026
c68b985
feat(website): add /sponsorship/ landing page
vinta May 3, 2026
40913c3
fix double quotes
vinta May 3, 2026
8a32d27
fix(website): tighten sponsorship page copy for clarity
vinta May 3, 2026
ee01a0b
refactor(website): extract render_category, replace slugify filter wi…
vinta May 3, 2026
38b54ca
fix(website): trim sponsorship page nav and hero stats
vinta May 3, 2026
a068219
fix(website): type build template entries
vinta May 3, 2026
d3f35a9
test(website): remove redundant and brittle tests
vinta May 3, 2026
432a1f4
build: add lint, format, typecheck make targets and ty dependency
vinta May 3, 2026
3d99f73
style(website): apply ruff format
vinta May 3, 2026
0c20fee
build: add ty config and reorder tool sections in pyproject.toml
vinta May 3, 2026
d7a9168
Merge pull request #3106 from vinta/feature/better-seo-2
vinta May 3, 2026
1468ae7
feat(website): show project description as always-visible desc-row on…
vinta May 3, 2026
1afccd8
update description for curses
vinta May 3, 2026
fc8d1ba
feat(website): show desc-row on index page when a filter is active
vinta May 3, 2026
9de86ea
feat(website): append #library-index to tag links on non-index pages
vinta May 3, 2026
f3f92c6
feat(website): render subcategory, group, and source tags as anchor e…
vinta May 3, 2026
f57fc44
style: bump tag font size to var(--text-xs) and codify 12px minimum f…
vinta May 3, 2026
138059f
feat(website): add Awesome Python and Sponsorship links to footer
vinta May 3, 2026
b2910d5
feat(website): add homepage JSON-LD with WebSite, CollectionPage, Ite…
vinta May 3, 2026
86d2aa7
feat(website): add CollectionPage JSON-LD to category, group, and sub…
vinta May 3, 2026
2f398ac
fix(seo): align JSON-LD with Yoast/RankMath conventions
vinta May 3, 2026
c886e47
feat(website): lead category meta description with real description w…
vinta May 3, 2026
28b61a9
style(seo): switch category page title separator from pipe to hyphen
vinta May 3, 2026
a9a58ce
Merge pull request #3107 from vinta/chore/refine-ui
vinta May 3, 2026
9379e0a
style(sitemap): pretty-print generated sitemap.xml with 2-space indent
vinta May 3, 2026
db18ff4
docs(design): restructure DESIGN.md to follow Google Stitch format
vinta May 3, 2026
83bab2c
docs(DESIGN.md): add YAML frontmatter, hex approximations, typography…
vinta May 3, 2026
dc19f2d
fix formatting
vinta May 3, 2026
7640a32
docs(DESIGN.md): add flexbox/grid layout rule
vinta May 3, 2026
8243747
docs(DESIGN.md): align with actual CSS
vinta May 3, 2026
d3bce3f
Merge pull request #3082 from Basit-Rahim/master
JinyangWang27 May 4, 2026
509ebaf
use file modification time as lastmod in sitemap
vinta May 4, 2026
3510db9
update llms.txt
vinta May 4, 2026
921d47b
remove index.md
vinta May 4, 2026
6c18b64
feat: use explicit Projects section in README
vinta May 4, 2026
08fe624
Add promptise (#3088)
cryxnet May 5, 2026
9ddd1d0
Use HTTPS for JSON Schema link
Bortlesboat May 5, 2026
0f5085c
Merge pull request #3110 from Bortlesboat/codex/use-https-json-schema…
vinta May 7, 2026
50d382a
use https
vinta May 7, 2026
daf311d
Add taskiq (#3112)
ChrisJr404 May 7, 2026
5f042e2
Add birdnet to Audio section (#3116)
OriginalGary May 7, 2026
10c06fb
add category links in llms.txt
vinta May 7, 2026
5f725c2
use sponsorship@awesome-python.com as contact
vinta May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions .claude/commands/review-pending-prs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
description: Review pending PRs against CONTRIBUTING.md acceptance criteria.
allowed-tools: Bash(gh api:*), Bash(gh pr close:*), Bash(gh pr diff:*), Bash(gh pr edit:*), Bash(gh pr list:*)
---

## Usage

```
/review-pending-prs
```

## Instructions

1. Fetch 10 open PRs with details: `gh pr list --repo vinta/awesome-python --limit 10 --search "-label:\"claude reviewed\"" --json number,title,author,url,body,files,mergeable,mergeStateStatus`
2. Fetch all PR diffs in parallel: `gh pr diff <number> --repo vinta/awesome-python`
3. Run quick rejection checks (no API calls needed):
- Has merge conflicts? (from `mergeable`/`mergeStateStatus`)
- Adds more than one project? (from diff)
- Duplicate entry? (from diff - URL already in README)
- Not a project submission? (from diff - e.g., random files, contributor list)
4. For PRs passing quick checks, fetch repo stats: `gh api repos/<owner>/<repo> --jq '{stars: .stargazers_count, created: .created_at, updated: .pushed_at, language: .language, archived: .archived}'`
5. Review against all criteria in [CONTRIBUTING.md](../../CONTRIBUTING.md)
6. Present summary table with recommendations
7. Ask user:

```
Would you like me to:

1. Close the rejected PRs with comments?
2. Add "claude reviewed" label to the passed PRs?
3. Do all
```

## Quick Rejection Checks

Check these rules first - if any fail, recommend rejection:

- PR has merge conflicts
- Add more than one project per PR
- Duplicate of existing entry
- Placed under an inappropriate category
- Project is archived or abandoned (no commits in 12+ months)
- No documentation or unclear use case
- Less than 100 GitHub stars AND not justified as a hidden gem
- Too niche — a thin wrapper, single-function utility, or narrow edge-case tool that most Python developers would never need

## Output Format

Provide a simple review:

1. **Rejection Check** - table with the above rules and PASS/REJECT
2. **Recommendation** - PASS or REJECT

## Close PRs

If user asks to close/reject:

```bash
gh pr close <number> --repo vinta/awesome-python --comment "<brief reason>"
```

## Mark as Passed

```bash
gh pr edit <number> --repo vinta/awesome-python --add-label "claude reviewed"
```

## Extra Instructions (If Provided)

$ARGUMENTS
18 changes: 18 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"permissions": {
"allow": [
"Bash(gh api:*)",
"Bash(gh pr close:*)",
"Bash(gh pr comment:*)",
"Bash(gh pr diff:*)",
"Bash(gh pr edit:*)",
"Bash(gh pr list:*)",
"Bash(gh pr view:*)",
"Bash(gh run list:*)",
"Bash(gh run rerun:*)",
"Bash(gh run view:*)",
"Bash(gh search:*)"
],
"deny": []
}
}
25 changes: 21 additions & 4 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,24 @@
## Why this framework/library/software/resource is awesome?
## Project

A few sentences describing the reason.
[Project Name](url)

## Vote for this pull request
## Checklist

Who agrees that this change should be merged could add your reactions (e.g. :+1:) to this pull request.
- [ ] One project per PR
- [ ] PR title format: `Add project-name`
- [ ] Entry format: `- [project-name](url) - Description ending with period.`
- [ ] Description is concise and short

## Why This Project Is Awesome

Which criterion does it meet? (pick one)

- [ ] **Industry Standard** - The go-to tool for a specific use case
- [ ] **Rising Star** - 5000+ stars in < 2 years, significant adoption
- [ ] **Hidden Gem** - Exceptional quality, solves niche problems elegantly

Explain:

## How It Differs

If similar entries exist, what makes this one unique?
33 changes: 33 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: CI

on:
push:
branches: [master]
pull_request:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true

- name: Install dependencies
run: uv sync --group build --locked

- name: Run tests
run: make test

- name: Build website
run: make build
83 changes: 83 additions & 0 deletions .github/workflows/deploy-website.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: Deploy Website

on:
push:
branches: [master]
schedule:
- cron: "0 0 * * *"

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
deploy:
if: github.repository == 'vinta/awesome-python'
runs-on: ubuntu-latest
environment:
name: github-pages
url: https://awesome-python.com/
steps:
- uses: actions/checkout@v6

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true

- name: Install dependencies
run: uv sync --group build --locked

- name: Run tests
if: github.event_name == 'schedule'
run: make test

- name: Get date
id: date
run: echo "today=$(date -u +%Y-%m-%d)" >> "$GITHUB_OUTPUT"

- name: Restore star data cache
id: cache-stars
uses: actions/cache/restore@v4
with:
path: website/data/github_stars.json
key: github-stars-${{ steps.date.outputs.today }}
restore-keys: github-stars-

- name: Fetch GitHub stars
id: fetch-stars
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: make fetch_github_stars

- name: Save star data cache
if: steps.fetch-stars.outcome == 'success'
uses: actions/cache/save@v4
with:
path: website/data/github_stars.json
key: github-stars-${{ steps.date.outputs.today }}

- name: Verify star data exists
run: |
if [ ! -f website/data/github_stars.json ]; then
echo "::error::github_stars.json not found. No cache and fetch failed or was skipped."
exit 1
fi
python -m json.tool website/data/github_stars.json > /dev/null

- name: Build website
run: make build

- name: Upload artifact
uses: actions/upload-pages-artifact@v4
with:
path: website/output/

- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4
19 changes: 17 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
# macOS
.DS_Store

# python
.venv/
__pycache__/
*.py[co]

docs/index.md
site/
# website
website/output/
website/data/

# planning docs
docs/

# agents
.agents/
.claude/skills/
.superpowers/
.playwright-cli/
skills-lock.json
10 changes: 0 additions & 10 deletions .travis.yml

This file was deleted.

31 changes: 31 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# CLAUDE.md

## Repository Overview

An opinionated list of Python frameworks, libraries, tools, and resources. Published at [awesome-python.com](https://awesome-python.com/).

## Entry Guidelines

**Refer to [CONTRIBUTING.md](CONTRIBUTING.md)** for acceptance criteria, quality requirements, rejection rules, and entry format. Apply these rules whenever adding or removing an entry, whether reviewing a PR or committing directly.

## Structure

- **README.md**: Source of truth. Hierarchical categories with alphabetically ordered entries.
- **CONTRIBUTING.md**: Submission guidelines and review criteria.
- **SPONSORSHIP.md**: Sponsor tiers, placement rules, and the editorial-independence policy. Sponsor content sits in the README header and must never influence which projects get listed.
- **website/**: Static site generator that builds awesome-python.com from README.md.
- `build.py`: Parses README.md and renders HTML via Jinja2 templates.
- `fetch_github_stars.py`: Fetches star counts into `website/data/`.
- `readme_parser.py`: Markdown-to-structured-data parser.
- `templates/`, `static/`: Jinja2 templates and CSS/JS assets.
- `tests/`: Pytest tests for the build pipeline.
- **Makefile**: `make install`, `make build`, `make preview`, `make test`, `make fetch_github_stars`.
- **pyproject.toml**: Uses `uv` for dependency management. Python >=3.13.

## Key Rules

- Alphabetical ordering within categories is mandatory.
- Quality over quantity. Only "awesome" projects.
- One project per PR.
- One entry per commit when adding or deleting entries. Format, wording, or categorization changes across multiple entries may be bundled in a single commit.
- README.md is the single source of content truth.
Loading