diff --git a/Makefile b/Makefile index 8cb7005e..ba47e1f4 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,24 @@ -include .env export -site_install: - uv sync --no-dev +install: + uv sync -site_fetch_stats: +fetch_stats: uv run python website/fetch_github_stars.py -site_build: +test: + uv run pytest website/tests/ -v + +build: uv run python website/build.py -site_preview: site_build - python -m http.server -d website/output/ 8000 - -site_deploy: site_build - @echo "Deploy via GitHub Actions (push to master)" +preview: build + @echo "Check the website on http://localhost:8000" + uv run watchmedo shell-command \ + --patterns='*.md;*.html;*.css;*.js;*.py' \ + --recursive \ + --wait --drop \ + --command='uv run python website/build.py' \ + README.md website/templates website/static website/data & \ + python -m http.server -b 127.0.0.1 -d website/output/ 8000 diff --git a/pyproject.toml b/pyproject.toml index d564cde9..31fee98f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,22 +2,30 @@ name = "awesome-python" version = "0.1.0" description = "An opinionated list of awesome Python frameworks, libraries, software and resources." +authors = [{ name = "Vinta Chen", email = "vinta.chen@gmail.com" }] +readme = "README.md" +license = "MIT" requires-python = ">=3.13" -dependencies = [ - "httpx==0.28.1", - "jinja2==3.1.6", - "markdown==3.10.2", -] +dependencies = [] + +[project.urls] +Homepage = "https://awesome-python.com/" +Repository = "https://github.com/vinta/awesome-python" [dependency-groups] +build = ["httpx==0.28.1", "jinja2==3.1.6", "markdown-it-py==4.0.0"] +lint = ["ruff==0.15.6"] +test = ["pytest==9.0.2"] dev = [ - "pytest==9.0.2", - "ruff==0.15.6", + { include-group = "build" }, + { include-group = "lint" }, + { include-group = "test" }, + "watchdog==6.0.0", ] [tool.pytest.ini_options] testpaths = ["website/tests"] +pythonpath = ["website"] [tool.ruff] -target-version = "py313" -line-length = 100 +line-length = 200 diff --git a/uv.lock b/uv.lock index 1f7b17c7..ecff7291 100644 --- a/uv.lock +++ b/uv.lock @@ -18,30 +18,46 @@ wheels = [ name = "awesome-python" version = "0.1.0" source = { virtual = "." } -dependencies = [ - { name = "httpx" }, - { name = "jinja2" }, - { name = "markdown" }, -] [package.dev-dependencies] +build = [ + { name = "httpx" }, + { name = "jinja2" }, + { name = "markdown-it-py" }, +] dev = [ + { name = "httpx" }, + { name = "jinja2" }, + { name = "markdown-it-py" }, { name = "pytest" }, { name = "ruff" }, + { name = "watchdog" }, +] +lint = [ + { name = "ruff" }, +] +test = [ + { name = "pytest" }, ] [package.metadata] -requires-dist = [ - { name = "httpx", specifier = "==0.28.1" }, - { name = "jinja2", specifier = "==3.1.6" }, - { name = "markdown", specifier = "==3.10.2" }, -] [package.metadata.requires-dev] +build = [ + { name = "httpx", specifier = "==0.28.1" }, + { name = "jinja2", specifier = "==3.1.6" }, + { name = "markdown-it-py", specifier = "==4.0.0" }, +] dev = [ + { name = "httpx", specifier = "==0.28.1" }, + { name = "jinja2", specifier = "==3.1.6" }, + { name = "markdown-it-py", specifier = "==4.0.0" }, { name = "pytest", specifier = "==9.0.2" }, { name = "ruff", specifier = "==0.15.6" }, + { name = "watchdog", specifier = "==6.0.0" }, ] +lint = [{ name = "ruff", specifier = "==0.15.6" }] +test = [{ name = "pytest", specifier = "==9.0.2" }] [[package]] name = "certifi" @@ -129,12 +145,15 @@ wheels = [ ] [[package]] -name = "markdown" -version = "3.10.2" +name = "markdown-it-py" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, ] [[package]] @@ -189,6 +208,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + [[package]] name = "packaging" version = "26.0" @@ -256,3 +284,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/89/7a/09ece68445ceac348df06e08bf75db72d0e8427765b96c9c0ffabc1be1d9/ruff-0.15.6-py3-none-win_amd64.whl", hash = "sha256:aee25bc84c2f1007ecb5037dff75cef00414fdf17c23f07dc13e577883dca406", size = 11787271, upload-time = "2026-03-12T23:05:20.168Z" }, { url = "https://files.pythonhosted.org/packages/7f/d0/578c47dd68152ddddddf31cd7fc67dc30b7cdf639a86275fda821b0d9d98/ruff-0.15.6-py3-none-win_arm64.whl", hash = "sha256:c34de3dd0b0ba203be50ae70f5910b17188556630e2178fd7d79fc030eb0d837", size = 11060497, upload-time = "2026-03-12T23:05:25.968Z" }, ] + +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +] diff --git a/website/build.py b/website/build.py index b8340eb5..5b36526e 100644 --- a/website/build.py +++ b/website/build.py @@ -7,9 +7,10 @@ import shutil from pathlib import Path from typing import TypedDict -import markdown from jinja2 import Environment, FileSystemLoader +from readme_parser import parse_readme, slugify + # Thematic grouping of categories. Each category name must match exactly # as it appears in README.md (the ## heading text). SECTION_GROUPS: list[tuple[str, list[str]]] = [ @@ -67,217 +68,6 @@ SECTION_GROUPS: list[tuple[str, list[str]]] = [ ] -def slugify(name: str) -> str: - """Convert a category name to a URL-friendly slug.""" - slug = name.lower() - slug = re.sub(r"[^a-z0-9\s-]", "", slug) - slug = re.sub(r"[\s]+", "-", slug.strip()) - slug = re.sub(r"-+", "-", slug) - return slug - - -def count_entries(content: str) -> int: - """Count library entries (lines starting with * [ or - [) in a content block.""" - return sum(1 for line in content.split("\n") if re.match(r"\s*[-*]\s+\[", line)) - - -def extract_preview(content: str, *, max_names: int = 4) -> str: - """Extract first N main library names from markdown content for preview text. - - Only includes top-level or single-indent entries (indent <= 3 spaces), - skipping subcategory labels (items without links) and deep sub-entries. - """ - names = [] - for m in re.finditer(r"^(\s*)[-*]\s+\[([^\]]+)\]", content, re.MULTILINE): - indent_len = len(m.group(1)) - if indent_len > 3: - continue - names.append(m.group(2)) - if len(names) >= max_names: - break - return ", ".join(names) - - -def render_content_html(content: str) -> str: - """Render category markdown content to HTML with subcategory detection. - - Lines that are list items without links (e.g., "- Synchronous") are - treated as subcategory headers and rendered as bold dividers. - - Indent levels in the README: - - 0 spaces: top-level entry or subcategory label - - 2 spaces: entry under a subcategory (still a main entry) - - 4+ spaces: sub-entry (e.g., awesome-django under django) - """ - lines = content.split("\n") - out: list[str] = [] - - for line in lines: - stripped = line.strip() - indent_len = len(line) - len(line.lstrip()) - - # Detect subcategory labels: list items without links - m = re.match(r"^[-*]\s+(.+)$", stripped) - if m and "[" not in stripped: - label = m.group(1) - out.append(f'
...
since this is inline content - html = re.sub(r"^(.*)
$", r"\1", html.strip()) - # Add target/rel to links for external navigation - html = html.replace(" list[dict]: def extract_entries( categories: list[dict], - resources: list[dict], groups: list[dict], ) -> list[dict]: """Flatten categories into individual library entries for table display.""" @@ -379,38 +166,18 @@ def extract_entries( entries: list[dict] = [] for cat in categories: group_name = cat_to_group.get(cat["name"], "Other") - last_entry_indent = -1 - for line in cat["content"].split("\n"): - indent_len = len(line) - len(line.lstrip()) - - # Link-only sub-item deeper than parent → "also see" - m_sub = re.match(r"\s*[-*]\s+\[([^\]]+)\]\(([^)]+)\)\s*$", line) - if m_sub and indent_len > last_entry_indent >= 0 and entries: - entries[-1]["also_see"].append({ - "name": m_sub.group(1), - "url": m_sub.group(2), - }) - continue - - if indent_len > 3: - continue - m = re.match( - r"\s*[-*]\s+\[([^\]]+)\]\(([^)]+)\)\s*(?:[-\u2013\u2014]\s*(.+))?$", - line, - ) - if m: - last_entry_indent = indent_len - entries.append({ - "name": m.group(1), - "url": m.group(2), - "description": render_inline_markdown(m.group(3)) if m.group(3) else "", - "category": cat["name"], - "group": group_name, - "stars": None, - "owner": None, - "pushed_at": None, - "also_see": [], - }) + for entry in cat["entries"]: + entries.append({ + "name": entry["name"], + "url": entry["url"], + "description": entry["description"], + "category": cat["name"], + "group": group_name, + "stars": None, + "owner": None, + "last_commit_at": None, + "also_see": entry["also_see"], + }) return entries @@ -420,7 +187,6 @@ def build(repo_root: str) -> None: website = repo / "website" readme_text = (repo / "README.md").read_text(encoding="utf-8") - # Extract subtitle from the first non-empty, non-heading line subtitle = "" for line in readme_text.split("\n"): stripped = line.strip() @@ -429,47 +195,33 @@ def build(repo_root: str) -> None: break categories, resources = parse_readme(readme_text) - - # Enrich with entry counts, rendered HTML, previews, and clean descriptions - for cat in categories + resources: - cat["entry_count"] = count_entries(cat["content"]) - cat["content_html"] = render_content_html(cat["content"]) - cat["preview"] = extract_preview(cat["content"]) - cat["description"] = strip_markdown_links(cat["description"]) + # All fields pre-computed: entry_count, content_html, preview, description total_entries = sum(c["entry_count"] for c in categories) - - # Organize into groups groups = group_categories(categories, resources) + entries = extract_entries(categories, groups) - # Flatten entries for table view - entries = extract_entries(categories, resources, groups) - - # Load and merge GitHub star data stars_data = load_stars(website / "data" / "github_stars.json") for entry in entries: repo_key = extract_github_repo(entry["url"]) if repo_key and repo_key in stars_data: - entry["stars"] = stars_data[repo_key]["stars"] - entry["owner"] = stars_data[repo_key]["owner"] - entry["pushed_at"] = stars_data[repo_key].get("pushed_at", "") + sd = stars_data[repo_key] + entry["stars"] = sd["stars"] + entry["owner"] = sd["owner"] + entry["last_commit_at"] = sd.get("last_commit_at", "") - # Sort by stars descending entries = sort_entries(entries) - # Set up Jinja2 env = Environment( loader=FileSystemLoader(website / "templates"), autoescape=True, ) - # Output directory site_dir = website / "output" if site_dir.exists(): shutil.rmtree(site_dir) site_dir.mkdir(parents=True) - # Generate single index.html tpl_index = env.get_template("index.html") (site_dir / "index.html").write_text( tpl_index.render( @@ -484,14 +236,10 @@ def build(repo_root: str) -> None: encoding="utf-8", ) - # Copy static assets static_src = website / "static" static_dst = site_dir / "static" if static_src.exists(): - shutil.copytree(static_src, static_dst) - - # Write CNAME - (site_dir / "CNAME").write_text("awesome-python.com\n", encoding="utf-8") + shutil.copytree(static_src, static_dst, dirs_exist_ok=True) print(f"Built single page with {len(categories)} categories + {len(resources)} resources") print(f"Total entries: {total_entries}") diff --git a/website/data/github_stars.json b/website/data/github_stars.json index c71287fd..d10e2ce8 100644 --- a/website/data/github_stars.json +++ b/website/data/github_stars.json @@ -2,2621 +2,3145 @@ "0rpc/zerorpc-python": { "stars": 3237, "owner": "0rpc", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-02-08T00:01:11Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "567-labs/instructor": { - "stars": 12554, + "stars": 12555, "owner": "567-labs", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T04:07:30Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Alir3z4/html2text": { "stars": 2135, "owner": "Alir3z4", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-28T11:03:40Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "AnswerDotAI/fasthtml": { "stars": 6883, "owner": "AnswerDotAI", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T20:35:47Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "AtsushiSakai/PythonRobotics": { - "stars": 28887, + "stars": 28894, "owner": "AtsushiSakai", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-06T06:56:19Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "BeanieODM/beanie": { "stars": 2661, "owner": "BeanieODM", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T16:25:14Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Bogdanp/dramatiq": { - "stars": 5172, + "stars": 5174, "owner": "Bogdanp", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T06:58:54Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "ChristosChristofidis/awesome-deep-learning": { - "stars": 27712, + "stars": 27719, "owner": "ChristosChristofidis", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-05-26T12:28:00Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "CleanCut/green": { "stars": 806, "owner": "CleanCut", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-11-12T22:24:34Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Cornices/cornice": { "stars": 390, "owner": "Cornices", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-03-24T09:40:05Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "DLR-RM/stable-baselines3": { - "stars": 12908, + "stars": 12915, "owner": "DLR-RM", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T15:43:52Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Delgan/loguru": { - "stars": 23690, + "stars": 23692, "owner": "Delgan", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-22T00:32:28Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "DiffSK/configobj": { "stars": 337, "owner": "DiffSK", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-06T13:16:36Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "DmytroLitvinov/awesome-flake8-extensions": { "stars": 1276, "owner": "DmytroLitvinov", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-28T08:10:54Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "EmilStenstrom/justhtml": { "stars": 1116, "owner": "EmilStenstrom", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T21:58:05Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "FactoryBoy/factory_boy": { "stars": 3781, "owner": "FactoryBoy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-14T14:33:55Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "HBNetwork/python-decouple": { "stars": 3017, "owner": "HBNetwork", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-01-01T17:54:57Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "HypothesisWorks/hypothesis": { - "stars": 8498, + "stars": 8502, "owner": "HypothesisWorks", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T20:41:07Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Instagram/MonkeyType": { "stars": 4996, "owner": "Instagram", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-14T08:50:16Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "IronLanguages/ironpython3": { "stars": 2735, "owner": "IronLanguages", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T23:59:02Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "JaidedAI/EasyOCR": { - "stars": 29096, + "stars": 29099, "owner": "JaidedAI", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-05T12:23:12Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Kozea/pygal": { "stars": 2752, "owner": "Kozea", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-09T10:28:44Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Lightning-AI/pytorch-lightning": { - "stars": 30934, + "stars": 30940, "owner": "Lightning-AI", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T09:20:11Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "LuminosoInsight/python-ftfy": { "stars": 4015, "owner": "rspeer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-10-30T21:00:25Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "MagicStack/uvloop": { - "stars": 11687, + "stars": 11688, "owner": "MagicStack", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-30T14:24:05Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "ManimCommunity/manim": { - "stars": 37253, + "stars": 37264, "owner": "ManimCommunity", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T03:28:52Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Manisso/fsociety": { - "stars": 11925, + "stars": 11928, "owner": "Manisso", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-09-06T12:45:41Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Maratyszcza/PeachPy": { "stars": 2048, "owner": "Maratyszcza", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-11-13T17:08:27Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "MasoniteFramework/masonite": { "stars": 2365, "owner": "MasoniteFramework", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-03-20T20:11:49Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "MechanicalSoup/MechanicalSoup": { "stars": 4850, "owner": "MechanicalSoup", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-19T07:18:14Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "MervinPraison/PraisonAI": { - "stars": 5677, + "stars": 5684, "owner": "MervinPraison", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T11:08:18Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Microsoft/PTVS": { "stars": 2567, "owner": "microsoft", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T23:46:49Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "MongoEngine/mongoengine": { "stars": 4349, "owner": "MongoEngine", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-09-02T20:46:15Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "NicolasHug/Surprise": { - "stars": 6772, + "stars": 6774, "owner": "NicolasHug", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-06-14T19:31:58Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Nuitka/Nuitka": { - "stars": 14642, + "stars": 14647, "owner": "Nuitka", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-12T13:05:42Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "OpenBB-finance/OpenBB": { - "stars": 63238, + "stars": 63260, "owner": "OpenBB-finance", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T16:37:47Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Parisson/TimeSide": { "stars": 394, "owner": "Parisson", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-10-14T15:20:39Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Parsely/streamparse": { "stars": 1504, "owner": "pystorm", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-08-09T15:10:10Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "PennyLaneAI/pennylane": { "stars": 3111, "owner": "PennyLaneAI", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T05:36:08Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "PrefectHQ/prefect": { - "stars": 21889, + "stars": 21893, "owner": "PrefectHQ", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T03:54:10Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "PyCQA/flake8": { "stars": 3770, "owner": "PyCQA", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-22T21:54:35Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "PyCQA/prospector": { "stars": 2074, "owner": "prospector-dev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-16T18:04:02Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "PyMySQL/PyMySQL": { "stars": 7838, "owner": "PyMySQL", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-24T12:53:42Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "PyMySQL/mysqlclient": { "stars": 2525, "owner": "PyMySQL", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-12T06:06:31Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Pylons/colander": { "stars": 464, "owner": "Pylons", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-08-02T16:17:14Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Pylons/waitress": { "stars": 1572, "owner": "Pylons", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T13:45:44Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Qiskit/qiskit": { - "stars": 7137, + "stars": 7142, "owner": "Qiskit", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T07:40:27Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "RaRe-Technologies/gensim": { "stars": 16375, "owner": "piskvorky", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-16T11:13:19Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "RasaHQ/rasa": { - "stars": 21086, + "stars": 21087, "owner": "RasaHQ", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-18T08:04:47Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "RaylockLLC/DearPyGui": { - "stars": 15279, + "stars": 15278, "owner": "hoffstadt", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T16:12:52Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "SCons/scons": { "stars": 2357, "owner": "SCons", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T01:43:25Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "SciTools/cartopy": { "stars": 1589, "owner": "SciTools", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T17:14:46Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "ScrapeGraphAI/toonify": { "stars": 323, "owner": "ScrapeGraphAI", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-06T15:59:57Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "SmileyChris/django-countries": { "stars": 1521, "owner": "SmileyChris", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-08T04:51:39Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Suor/django-cacheops": { "stars": 2263, "owner": "Suor", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-04T09:25:53Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Suor/funcy": { - "stars": 3501, + "stars": 3502, "owner": "Suor", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-14T02:44:27Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Supervisor/supervisor": { - "stars": 9007, + "stars": 9006, "owner": "Supervisor", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-21T21:03:11Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Tencent/rapidjson": { "stars": 15007, "owner": "Tencent", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-02-05T13:28:08Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Textualize/rich": { - "stars": 55801, + "stars": 55804, "owner": "Textualize", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-26T09:52:14Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Textualize/textual": { - "stars": 34878, + "stars": 34882, "owner": "Textualize", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T10:00:29Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "TheAlgorithms/Python": { - "stars": 218785, + "stars": 218781, "owner": "TheAlgorithms", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T21:53:47Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "TkTech/pysimdjson": { "stars": 761, "owner": "TkTech", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-28T20:04:45Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "TomNicholas/Python-for-Scientists": { "stars": 357, "owner": "TomNicholas", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-27T13:35:32Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "Valloric/YouCompleteMe": { "stars": 26276, "owner": "ycm-core", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-30T19:15:05Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "WhyNotHugo/python-barcode": { "stars": 649, "owner": "WhyNotHugo", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-18T09:37:37Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "ZoomerAnalytics/xlwings": { "stars": 6, "owner": "ZoomerAnalytics", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-27T03:48:51Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "aaugustin/websockets": { - "stars": 5643, + "stars": 5645, "owner": "python-websockets", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-08T08:14:03Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "abhiTronix/vidgear": { - "stars": 3684, + "stars": 3685, "owner": "abhiTronix", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-12T05:07:53Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "aboSamoor/polyglot": { "stars": 2368, "owner": "aboSamoor", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-09-22T22:35:28Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "agno-agi/agno": { - "stars": 38754, + "stars": 38776, "owner": "agno-agi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T17:13:33Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "ahupp/python-magic": { "stars": 2896, "owner": "ahupp", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-03T18:27:52Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "aizvorski/scikit-video": { "stars": 152, "owner": "aizvorski", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2016-05-28T22:17:25Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "ajenti/ajenti": { - "stars": 7908, + "stars": 7909, "owner": "ajenti", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-26T08:27:51Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "alecthomas/voluptuous": { "stars": 1847, "owner": "alecthomas", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-18T19:00:01Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "altair-viz/altair": { - "stars": 10301, + "stars": 10302, "owner": "vega", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T15:12:12Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "amitt001/delegator.py": { "stars": 1746, "owner": "amitt001", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2019-05-06T12:33:23Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "amoffat/sh": { "stars": 7241, "owner": "amoffat", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-01T12:42:25Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "amosgyamfi/awesome-fasthtml": { "stars": 79, "owner": "amosgyamfi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-09-08T18:40:33Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "andialbrecht/sqlparse": { "stars": 3999, "owner": "andialbrecht", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-19T07:18:19Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "ansible/ansible": { - "stars": 68310, + "stars": 68298, "owner": "ansible", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T22:19:35Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "apache/spark": { - "stars": 42992, + "stars": 42998, "owner": "apache", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T06:14:16Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "arrow-py/arrow": { - "stars": 9035, + "stars": 9036, "owner": "arrow-py", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-19T15:24:45Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "art049/odmantic": { "stars": 1168, "owner": "art049", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-25T11:23:24Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "astral-sh/ruff": { - "stars": 46329, + "stars": 46341, "owner": "astral-sh", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T21:49:56Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "astral-sh/ty": { - "stars": 17739, + "stars": 17753, "owner": "astral-sh", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T23:40:05Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "astral-sh/uv": { - "stars": 81192, + "stars": 81254, "owner": "astral-sh", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T23:33:26Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "asweigart/pyautogui": { - "stars": 12363, + "stars": 12365, "owner": "asweigart", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-06-07T11:16:23Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "aws/aws-sdk-pandas": { "stars": 4106, "owner": "aws", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T00:23:20Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "bbangert/beaker": { "stars": 545, "owner": "bbangert", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-03T18:25:50Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "beetbox/audioread": { "stars": 536, "owner": "beetbox", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-26T19:43:12Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "beetbox/beets": { - "stars": 14856, + "stars": 14858, "owner": "beetbox", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T18:07:34Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "benedekrozemberczki/karateclub": { "stars": 2276, "owner": "benedekrozemberczki", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-07-17T19:00:21Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "benfred/implicit": { "stars": 3773, "owner": "benfred", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-11-21T21:15:59Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "benfred/py-spy": { - "stars": 15031, + "stars": 15036, "owner": "benfred", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-18T00:13:24Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "benhamner/Metrics": { "stars": 1654, "owner": "benhamner", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2015-09-09T04:13:23Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "benoitc/gunicorn": { - "stars": 10481, + "stars": 10483, "owner": "benoitc", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T09:25:38Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "bfly123/claude_code_bridge": { - "stars": 1642, + "stars": 1661, "owner": "bfly123", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T01:51:42Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "bloomberg/bqplot": { "stars": 3684, "owner": "bqplot", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-23T10:40:52Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "bokeh/bokeh": { - "stars": 20365, + "stars": 20368, "owner": "bokeh", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T07:03:32Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "boppreh/mouse": { "stars": 961, "owner": "boppreh", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-06-26T19:23:24Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "borgbackup/borg": { - "stars": 13081, + "stars": 13084, "owner": "borgbackup", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T14:37:13Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "boto/boto3": { "stars": 9736, "owner": "boto", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T18:19:04Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "bpython/bpython": { "stars": 2771, "owner": "bpython", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-06T08:57:26Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "browser-use/browser-use": { - "stars": 81099, + "stars": 81177, "owner": "browser-use", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T03:57:39Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "bterwijn/memory_graph": { - "stars": 771, + "stars": 772, "owner": "bterwijn", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-04T09:21:14Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "buildout/buildout": { "stars": 613, "owner": "buildout", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-06T20:30:10Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "buriy/python-readability": { "stars": 2894, "owner": "buriy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-26T13:06:04Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "canonical/cloud-init": { - "stars": 3627, + "stars": 3629, "owner": "canonical", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T14:13:14Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "carlosescri/DottedDict": { "stars": 222, "owner": "carlosescri", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-12-09T14:16:32Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "cdgriffith/Box": { "stars": 2822, "owner": "cdgriffith", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-21T16:19:51Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "chaostoolkit/chaostoolkit": { "stars": 2001, "owner": "chaostoolkit", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-05-01T12:55:38Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "chapmanb/bcbb": { "stars": 645, "owner": "chapmanb", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-02-05T14:20:51Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "chapmanb/bcbio-nextgen": { "stars": 1027, "owner": "bcbio", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-08-24T11:11:30Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "chardet/chardet": { - "stars": 2486, + "stars": 2489, "owner": "chardet", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T23:47:26Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "chriskiehl/Gooey": { - "stars": 22025, + "stars": 22026, "owner": "chriskiehl", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-12T04:32:43Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "clips/pattern": { "stars": 8856, "owner": "clips", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-04-25T12:40:40Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "cobrateam/splinter": { "stars": 2767, "owner": "cobrateam", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-16T15:08:24Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "codeinthehole/purl": { "stars": 303, "owner": "codeinthehole", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-05-15T21:00:41Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "codelucas/newspaper": { - "stars": 15009, + "stars": 15010, "owner": "codelucas", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-06T00:29:46Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "coleifer/huey": { - "stars": 5940, + "stars": 5941, "owner": "coleifer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-28T13:46:22Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "coleifer/micawber": { "stars": 674, "owner": "coleifer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T11:59:12Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "coleifer/peewee": { "stars": 11952, "owner": "coleifer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T01:49:51Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "conda/conda": { - "stars": 7342, + "stars": 7343, "owner": "conda", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T09:22:23Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "cookiecutter/cookiecutter": { - "stars": 24744, + "stars": 24748, "owner": "cookiecutter", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-04T08:13:03Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "copier-org/copier": { "stars": 3214, "owner": "copier-org", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T17:04:02Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "crossbario/autobahn-python": { "stars": 2534, "owner": "crossbario", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-10T09:37:30Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "cython/cython": { - "stars": 10654, + "stars": 10655, "owner": "cython", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T07:34:32Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dahlia/awesome-sqlalchemy": { - "stars": 3031, + "stars": 3033, "owner": "dahlia", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-25T14:13:09Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dashingsoft/pyarmor": { - "stars": 4989, + "stars": 4988, "owner": "dashingsoft", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T02:02:48Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dask/dask": { - "stars": 13768, + "stars": 13769, "owner": "dask", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-12T11:13:54Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "datafolklabs/cement": { "stars": 1341, "owner": "datafolklabs", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-09T15:40:14Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "datastax/python-driver": { "stars": 1426, "owner": "apache", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-11T19:30:07Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dateutil/dateutil": { "stars": 2604, "owner": "dateutil", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-03T05:40:58Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "davidaurelio/hashids-python": { "stars": 1423, "owner": "davidaurelio", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-09-07T16:27:01Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "daviddrysdale/python-phonenumbers": { "stars": 3720, "owner": "daviddrysdale", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T10:42:24Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "davidhalter/jedi": { - "stars": 6123, + "stars": 6124, "owner": "davidhalter", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-13T11:01:08Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "davidhalter/jedi-vim": { "stars": 5319, "owner": "davidhalter", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-10T10:10:33Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dbader/schedule": { "stars": 12246, "owner": "dbader", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-05-25T18:40:33Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dbcli/litecli": { "stars": 3214, "owner": "dbcli", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-15T03:11:44Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dbcli/mycli": { - "stars": 11886, + "stars": 11887, "owner": "dbcli", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T19:32:02Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dbcli/pgcli": { "stars": 13073, "owner": "dbcli", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-22T03:42:48Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "deanmalmgren/textract": { "stars": 4482, "owner": "deanmalmgren", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-04T04:01:18Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "derek73/python-nameparser": { - "stars": 702, + "stars": 703, "owner": "derek73", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-09-21T00:05:34Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "desbordante/desbordante-core": { "stars": 469, "owner": "Desbordante", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T18:44:01Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "devpi/devpi": { "stars": 1146, "owner": "devpi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T14:40:35Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "devsnd/tinytag": { "stars": 805, "owner": "tinytag", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T18:38:49Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dfunckt/django-rules": { "stars": 1970, "owner": "dfunckt", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-11T06:42:08Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dgunning/edgartools": { - "stars": 1859, + "stars": 1861, "owner": "dgunning", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T15:23:57Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dhamaniasad/awesome-postgres": { - "stars": 11767, + "stars": 11772, "owner": "dhamaniasad", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-22T05:54:13Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dimka665/awesome-slugify": { "stars": 491, "owner": "voronind", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2017-01-20T20:45:25Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django-cache-machine/django-cache-machine": { "stars": 885, "owner": "django-cache-machine", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-02-20T18:13:51Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django-compressor/django-compressor": { "stars": 2871, "owner": "django-compressor", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-14T07:39:02Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django-guardian/django-guardian": { "stars": 3893, "owner": "django-guardian", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-11T10:25:32Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django-haystack/django-haystack": { "stars": 3800, "owner": "django-haystack", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T01:19:47Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django-haystack/pysolr": { "stars": 697, "owner": "django-haystack", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T00:59:24Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django-tastypie/django-tastypie": { "stars": 3955, "owner": "django-tastypie", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-04-02T19:22:48Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django/channels": { "stars": 6336, "owner": "django", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-07T16:45:44Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django/daphne": { "stars": 2651, "owner": "django", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-09-17T12:11:36Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "django/django": { - "stars": 87081, + "stars": 87067, "owner": "django", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T21:08:18Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dmlc/xgboost": { - "stars": 28138, + "stars": 28139, "owner": "dmlc", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T09:23:18Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "docling-project/docling": { - "stars": 55968, + "stars": 56000, "owner": "docling-project", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T08:59:38Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dpkp/kafka-python": { "stars": 5887, "owner": "dpkp", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T21:06:58Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dry-python/returns": { "stars": 4238, "owner": "dry-python", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T07:13:55Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "dynaconf/dynaconf": { "stars": 4272, "owner": "dynaconf", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T18:04:02Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "elapouya/python-docx-template": { "stars": 2588, "owner": "elapouya", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-13T12:46:04Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "elastic/elasticsearch-dsl-py": { "stars": 3883, "owner": "elastic", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-04-18T13:50:16Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "eliben/pyelftools": { "stars": 2217, "owner": "eliben", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-12T14:48:41Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "emcconville/wand": { "stars": 1479, "owner": "emcconville", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-24T02:27:28Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "emmett-framework/granian": { - "stars": 5173, + "stars": 5174, "owner": "emmett-framework", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T16:11:48Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "encode/django-rest-framework": { - "stars": 29928, + "stars": 29929, "owner": "encode", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T21:09:05Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "encode/httpx": { - "stars": 15163, + "stars": 15139, "owner": "encode", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-23T10:40:42Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "encode/uvicorn": { - "stars": 10496, + "stars": 10500, "owner": "Kludex", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T06:11:15Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "erikrose/more-itertools": { - "stars": 4043, + "stars": 4044, "owner": "more-itertools", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T15:52:45Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "esnme/ultrajson": { "stars": 4474, "owner": "ultrajson", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-11T21:45:16Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "evhub/coconut": { "stars": 4313, "owner": "evhub", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-31T07:03:46Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "fabric/fabric": { - "stars": 15406, + "stars": 15405, "owner": "fabric", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-07-20T17:31:40Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "facebook/PathPicker": { "stars": 5232, "owner": "facebook", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-09-05T13:30:39Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "facebook/pyre-check": { "stars": 7153, "owner": "facebook", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T19:16:18Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "facebookresearch/hydra": { - "stars": 10258, + "stars": 10260, "owner": "facebookresearch", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-11T03:44:41Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "faif/python-patterns": { - "stars": 42795, + "stars": 42797, "owner": "faif", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T17:04:16Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "falconry/falcon": { "stars": 9805, "owner": "falconry", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T12:58:43Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "feature-engine/feature_engine": { "stars": 2214, "owner": "feature-engine", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-05T21:41:02Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "feincms/feincms": { "stars": 1077, "owner": "feincms", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-11T09:41:59Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "fengsp/plan": { "stars": 1182, "owner": "fengsp", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-05-14T03:02:37Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "fighting41love/funNLP": { - "stars": 79457, + "stars": 79469, "owner": "fighting41love", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-08-24T08:47:15Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "flask-admin/flask-admin": { "stars": 6057, "owner": "pallets-eco", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T22:06:01Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "flask-api/flask-api": { "stars": 1468, "owner": "flask-api", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-02-20T14:04:59Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "flask-restful/flask-restful": { "stars": 6924, "owner": "flask-restful", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-05-21T03:47:13Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "fogleman/Quads": { "stars": 1223, "owner": "fogleman", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2014-05-20T02:31:15Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "fxsjy/jieba": { - "stars": 34802, + "stars": 34808, "owner": "fxsjy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-02-15T08:33:35Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "gabrielfalcao/HTTPretty": { "stars": 2209, "owner": "gabrielfalcao", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-10-16T23:12:02Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "gaojiuli/toapi": { "stars": 3555, "owner": "elliotgao2", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-06-28T01:58:45Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "gawel/pyquery": { "stars": 2379, "owner": "gawel", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-18T21:11:29Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "geopandas/geopandas": { - "stars": 5067, + "stars": 5066, "owner": "geopandas", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T12:07:44Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "geopy/geopy": { "stars": 4783, "owner": "geopy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-27T19:22:13Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "getnikola/nikola": { - "stars": 2722, + "stars": 2723, "owner": "getnikola", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-15T12:21:27Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "getpelican/pelican": { - "stars": 13249, + "stars": 13248, "owner": "getpelican", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-03T11:11:45Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "getsentry/responses": { "stars": 4330, "owner": "getsentry", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-19T14:38:13Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "getsentry/sentry-python": { - "stars": 2156, + "stars": 2157, "owner": "getsentry", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T15:05:11Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "gevent/gevent": { - "stars": 6443, + "stars": 6444, "owner": "gevent", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-26T14:59:03Z", + "fetched_at": "2026-03-18T11:25:26.074230+00:00" }, "giampaolo/psutil": { "stars": 11108, "owner": "giampaolo", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:10:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "glamp/bashplotlib": { "stars": 1917, "owner": "glamp", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-03-31T19:40:59Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "gleitz/howdoi": { "stars": 10831, "owner": "gleitz", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-10-22T14:20:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "google/jax": { - "stars": 35125, + "stars": 35130, "owner": "jax-ml", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:35:30Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "google/python-fire": { - "stars": 28155, + "stars": 28157, "owner": "google", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-16T21:26:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "google/pytype": { "stars": 5029, "owner": "google", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-23T16:17:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "google/yapf": { "stars": 13991, "owner": "google", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-02-10T20:44:26Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "gorakhargosh/watchdog": { - "stars": 7283, + "stars": 7282, "owner": "gorakhargosh", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-27T09:55:25Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "gotcha/ipdb": { "stars": 1968, "owner": "gotcha", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-27T02:33:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "grantjenks/python-diskcache": { "stars": 2846, "owner": "grantjenks", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-03-03T01:19:29Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "grantjenks/python-sortedcontainers": { - "stars": 3935, + "stars": 3934, "owner": "grantjenks", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-03-01T23:03:38Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "graphql-python/graphene": { - "stars": 8252, + "stars": 8251, "owner": "graphql-python", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-11-09T20:43:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "gruns/furl": { "stars": 2797, "owner": "gruns", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-22T04:48:40Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "gruns/icecream": { "stars": 10032, "owner": "gruns", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-21T07:33:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "h2oai/h2o-3": { "stars": 7511, "owner": "h2oai", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-11T14:23:32Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "has2k1/plotnine": { "stars": 4521, "owner": "has2k1", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T17:54:57Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "hbldh/bleak": { - "stars": 2351, + "stars": 2352, "owner": "hbldh", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-17T16:54:46Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "hi-primus/optimus": { "stars": 1539, "owner": "hi-primus", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-05-19T04:32:00Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "html5lib/html5lib-python": { "stars": 1218, "owner": "html5lib", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-02-21T15:31:38Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "httpie/cli": { "stars": 37725, "owner": "httpie", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-12-17T17:30:35Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "hugapi/hug": { "stars": 6905, "owner": "hugapi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-06-30T13:14:01Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "huggingface/diffusers": { - "stars": 33076, + "stars": 33083, "owner": "huggingface", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T06:58:35Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "huggingface/transformers": { - "stars": 157984, + "stars": 158003, "owner": "huggingface", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:39:52Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "humiaozuzu/awesome-flask": { "stars": 12696, "owner": "humiaozuzu", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2019-09-17T07:46:46Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ibayer/fastFM": { "stars": 1090, "owner": "ibayer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-03-24T12:22:31Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ijl/orjson": { - "stars": 7961, + "stars": 7962, "owner": "ijl", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-02T14:52:49Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "indico/indico": { "stars": 2031, "owner": "indico", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:32:40Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "inducer/pudb": { "stars": 3218, "owner": "inducer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T17:32:15Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "infiniflow/ragflow": { - "stars": 75265, + "stars": 75368, "owner": "infiniflow", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T11:20:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ionelmc/python-hunter": { "stars": 866, "owner": "ionelmc", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-22T21:11:31Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ionelmc/python-manhole": { "stars": 400, "owner": "ionelmc", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-07-04T13:45:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "isnowfy/snownlp": { "stars": 6614, "owner": "isnowfy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-01-19T02:39:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jab/bidict": { "stars": 1578, "owner": "jab", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-01T17:54:35Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jaraco/path.py": { "stars": 1124, "owner": "jaraco", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-07-27T20:35:09Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jazzband/django-debug-toolbar": { "stars": 8351, "owner": "django-commons", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T06:19:41Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jazzband/django-oauth-toolkit": { "stars": 3310, "owner": "django-oauth", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T03:05:23Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jazzband/django-pipeline": { "stars": 1543, "owner": "jazzband", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-09-13T11:23:20Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jazzband/geojson": { "stars": 984, "owner": "jazzband", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-12-21T19:30:30Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jazzband/pip-tools": { - "stars": 7993, + "stars": 7994, "owner": "jazzband", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T00:56:06Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jazzband/tablib": { - "stars": 4751, + "stars": 4752, "owner": "jazzband", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-15T19:49:59Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jeffknupp/sandman2": { "stars": 2044, "owner": "jeffknupp", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-12-21T15:15:51Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jek/blinker": { "stars": 2034, "owner": "pallets-eco", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-14T20:37:05Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jendrikseipp/vulture": { - "stars": 4379, + "stars": 4380, "owner": "jendrikseipp", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-04T21:50:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jet-admin/jet-bridge": { "stars": 1794, "owner": "jet-admin", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-20T22:46:56Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jfkirk/tensorrec": { "stars": 1302, "owner": "jfkirk", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-02-04T21:10:25Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jiaaro/pydub": { - "stars": 9743, + "stars": 9744, "owner": "jiaaro", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-12-08T17:49:19Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jindaxiang/akshare": { - "stars": 17394, + "stars": 17423, "owner": "akfamily", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T13:32:06Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jmcnamara/XlsxWriter": { - "stars": 3920, + "stars": 3921, "owner": "jmcnamara", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-28T17:54:43Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "joke2k/faker": { - "stars": 19220, + "stars": 19196, "owner": "joke2k", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T14:35:47Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jonathanslenders/ptpython": { "stars": 5410, "owner": "prompt-toolkit", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-21T10:57:24Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jonathanslenders/python-prompt-toolkit": { - "stars": 10329, + "stars": 10331, "owner": "prompt-toolkit", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T12:10:47Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jorgenschaefer/elpy": { "stars": 1940, "owner": "jorgenschaefer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-04-04T23:49:23Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" + }, + "josephmisiti/awesome-machine-learning": { + "stars": 72025, + "owner": "josephmisiti", + "last_commit_at": "2026-03-15T15:16:19Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jpadilla/pyjwt": { - "stars": 5622, + "stars": 5621, "owner": "jpadilla", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T13:30:51Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "jschneier/django-storages": { "stars": 2939, "owner": "jschneier", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-18T15:59:00Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "keleshev/schema": { "stars": 2944, "owner": "keleshev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-04T20:33:24Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "keon/algorithms": { - "stars": 25390, + "stars": 25392, "owner": "keon", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T20:58:07Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "keras-team/keras": { - "stars": 63928, + "stars": 63910, "owner": "keras-team", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T23:34:27Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "keunwoochoi/kapre": { "stars": 946, "owner": "keunwoochoi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-26T20:05:08Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "kevin1024/vcrpy": { "stars": 2951, "owner": "kevin1024", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-04T19:19:38Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "kiwicom/schemathesis": { - "stars": 3114, + "stars": 3116, "owner": "schemathesis", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T15:31:51Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "klen/mixer": { "stars": 954, "owner": "klen", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-03-23T14:37:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "knipknap/SpiffWorkflow": { "stars": 1864, "owner": "sartography", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-07T15:46:26Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "kootenpv/yagmail": { - "stars": 2725, + "stars": 2724, "owner": "kootenpv", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-09-28T20:43:53Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "kornia/kornia": { - "stars": 11119, + "stars": 11120, "owner": "kornia", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T04:19:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "kreuzberg-dev/kreuzberg": { - "stars": 6736, + "stars": 6742, "owner": "kreuzberg-dev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:21:20Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "kurtmckee/feedparser": { "stars": 2327, "owner": "kurtmckee", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-01T15:38:19Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "laixintao/iredis": { "stars": 2728, "owner": "laixintao", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T06:31:48Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lancopku/pkuseg-python": { - "stars": 6702, + "stars": 6703, "owner": "lancopku", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-06-08T05:57:27Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "langchain-ai/langchain": { - "stars": 129943, + "stars": 130028, "owner": "langchain-ai", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T04:53:18Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lektor/lektor": { "stars": 3926, "owner": "lektor", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T18:05:07Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lemire/simdjson": { - "stars": 23448, + "stars": 23449, "owner": "simdjson", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T16:39:07Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lepture/authlib": { "stars": 5244, "owner": "authlib", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T12:43:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lepture/mistune": { - "stars": 2998, + "stars": 2997, "owner": "lepture", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T13:00:29Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lericson/pylibmc": { "stars": 493, "owner": "lericson", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-04-12T08:57:20Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "libAudioFlux/audioFlux": { - "stars": 3281, + "stars": 3282, "owner": "libAudioFlux", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-06T04:12:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "librosa/librosa": { - "stars": 8263, + "stars": 8268, "owner": "librosa", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-05-19T17:05:09Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "libvips/pyvips": { "stars": 789, "owner": "libvips", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-20T19:19:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lincolnloop/python-qrcode": { - "stars": 4864, + "stars": 4866, "owner": "lincolnloop", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-12T03:26:33Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "linkedin/shiv": { "stars": 1918, "owner": "linkedin", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-10T12:19:00Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "litestar-org/litestar": { - "stars": 8099, + "stars": 8100, "owner": "litestar-org", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T20:50:28Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "litestar-org/polyfactory": { - "stars": 1428, + "stars": 1429, "owner": "litestar-org", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T21:09:57Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lk-geimfari/mimesis": { "stars": 4799, "owner": "lk-geimfari", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-18T21:51:11Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "locustio/locust": { "stars": 27608, "owner": "locustio", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T21:23:56Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lorien/grab": { "stars": 2458, "owner": "lorien", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-09-19T10:51:14Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "lyst/lightfm": { - "stars": 5066, + "stars": 5067, "owner": "lyst", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-04-30T18:36:20Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "maciejkula/spotlight": { - "stars": 3042, + "stars": 3043, "owner": "maciejkula", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-02-09T21:03:48Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "madmaze/pytesseract": { "stars": 6321, "owner": "madmaze", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-02-17T21:20:41Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mahmoud/boltons": { "stars": 6856, "owner": "mahmoud", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-06T22:18:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mailgun/flanker": { "stars": 1650, "owner": "mailgun", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-03-03T17:53:06Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "marcelotduarte/cx_Freeze": { "stars": 1532, "owner": "marcelotduarte", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T12:04:40Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "marimo-team/marimo": { - "stars": 19725, + "stars": 19740, "owner": "marimo-team", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T03:02:33Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "markusschanta/awesome-jupyter": { "stars": 4569, "owner": "markusschanta", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-07T18:36:13Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "marph91/jimmy": { "stars": 400, "owner": "marph91", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-08T17:12:27Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "marrow/mailer": { "stars": 293, "owner": "marrow", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-05-21T17:42:25Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "marshmallow-code/marshmallow": { - "stars": 7228, + "stars": 7229, "owner": "marshmallow-code", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T19:59:09Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "marshmallow-code/webargs": { "stars": 1405, "owner": "marshmallow-code", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T19:32:45Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "martinblech/xmltodict": { "stars": 5726, "owner": "martinblech", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-22T23:29:47Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "martinrusev/imbox": { "stars": 1211, "owner": "martinrusev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-04-16T09:00:27Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "matplotlib/matplotlib": { - "stars": 22585, + "stars": 22593, "owner": "matplotlib", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T05:35:11Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "metawilm/cl-python": { "stars": 394, "owner": "metawilm", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-03-10T15:51:06Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mhammond/pywin32": { - "stars": 5531, + "stars": 5530, "owner": "mhammond", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-27T04:04:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mher/flower": { - "stars": 7130, + "stars": 7131, "owner": "mher", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-05T11:41:28Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "michaelhelmick/lassie": { "stars": 630, "owner": "michaelhelmick", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-08-20T14:32:48Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "micropython/micropython": { "stars": 21553, "owner": "micropython", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T06:02:09Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "microsoft/markitdown": { - "stars": 90875, + "stars": 90921, "owner": "microsoft", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T17:35:24Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "miguelgrinberg/microdot": { "stars": 2093, "owner": "miguelgrinberg", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T23:30:38Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mindflayer/python-mocket": { "stars": 309, "owner": "mindflayer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-23T18:40:24Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mindsdb/mindsdb": { - "stars": 38775, + "stars": 38781, "owner": "mindsdb", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T12:27:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mingrammer/diagrams": { - "stars": 42078, + "stars": 42082, "owner": "mingrammer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-07T11:02:06Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mininet/mininet": { "stars": 5788, "owner": "mininet", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-09-17T01:50:27Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "miracle2k/flask-assets": { "stars": 459, "owner": "miracle2k", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-12-15T13:55:26Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "miracle2k/webassets": { "stars": 935, "owner": "miracle2k", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-17T12:47:39Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "miso-belica/sumy": { - "stars": 3664, + "stars": 3665, "owner": "miso-belica", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-14T21:08:54Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mitmproxy/pdoc": { "stars": 2474, "owner": "mitmproxy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-01T09:58:22Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mitsuhiko/pluginbase": { "stars": 1141, "owner": "mitsuhiko", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-05-16T16:12:48Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mitsuhiko/unp": { "stars": 455, "owner": "mitsuhiko", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2014-08-26T21:17:09Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mkdocs/mkdocs": { - "stars": 21860, + "stars": 21864, "owner": "mkdocs", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-20T13:17:06Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "modoboa/modoboa": { - "stars": 3468, + "stars": 3470, "owner": "modoboa", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:55:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mongodb/django-mongodb-backend": { "stars": 218, "owner": "mongodb", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T09:42:16Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mongodb/mongo-python-driver": { "stars": 4338, "owner": "mongodb", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-12T16:42:15Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "moses-palmer/pynput": { "stars": 2125, "owner": "moses-palmer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-03-17T17:11:34Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mozilla/unicode-slugify": { "stars": 328, "owner": "mozilla", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-10-22T20:06:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mozillazg/python-pinyin": { "stars": 5271, "owner": "mozillazg", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-15T08:03:42Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mpdavis/python-jose": { "stars": 1743, "owner": "mpdavis", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-05-28T17:25:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mpi4py/mpi4py": { "stars": 902, "owner": "mpi4py", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T10:04:33Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mre/awesome-static-analysis": { - "stars": 14439, + "stars": 14440, "owner": "analysis-tools-dev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T00:12:23Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "msiemens/tinydb": { "stars": 7487, "owner": "msiemens", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-17T21:42:58Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mstamy2/PyPDF2": { - "stars": 9878, + "stars": 9880, "owner": "py-pdf", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T13:32:56Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mwaskom/seaborn": { - "stars": 13770, + "stars": 13769, "owner": "mwaskom", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-22T13:03:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "mymarilyn/clickhouse-driver": { "stars": 1293, "owner": "mymarilyn", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-10T20:21:21Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "napalm-automation/napalm": { "stars": 2438, "owner": "napalm-automation", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T18:24:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "nficano/python-lambda": { "stars": 1521, "owner": "nficano", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-06-03T06:57:29Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "nicfit/eyeD3": { "stars": 631, "owner": "nicfit", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-16T18:17:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "nose-devs/nose2": { "stars": 822, "owner": "nose-devs", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-09T17:37:19Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "noxrepo/pox": { "stars": 652, "owner": "noxrepo", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-05-20T12:00:13Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "nucleic/enaml": { "stars": 1574, "owner": "nucleic", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T11:07:00Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "numba/numba": { - "stars": 10935, + "stars": 10936, "owner": "numba", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T01:45:23Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "nvbn/thefuck": { - "stars": 95714, + "stars": 95720, "owner": "nvbn", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-01-25T19:52:35Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "nvdv/vprof": { "stars": 3982, "owner": "nvdv", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-07-15T07:43:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "oauthlib/oauthlib": { "stars": 2958, "owner": "oauthlib", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-28T14:03:09Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "offerrall/FuncToWeb": { "stars": 389, "owner": "offerrall", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-20T01:50:32Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "openai/gym": { - "stars": 37100, + "stars": 37099, "owner": "openai", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-01-30T18:15:21Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "openembedded/bitbake": { - "stars": 509, + "stars": 510, "owner": "openembedded", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T13:52:55Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "openstack/cliff": { "stars": 260, "owner": "openstack", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-06T16:40:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "orsinium/textdistance": { - "stars": 3524, + "stars": 3525, "owner": "life4", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-04-18T12:13:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pallets-eco/flask-debugtoolbar": { "stars": 980, "owner": "pallets-eco", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-14T20:13:45Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pallets/click": { - "stars": 17367, + "stars": 17338, "owner": "pallets", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-31T06:51:28Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pallets/flask": { - "stars": 71376, + "stars": 71345, "owner": "pallets", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-08T23:21:50Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pallets/itsdangerous": { "stars": 3102, "owner": "pallets", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-14T20:35:42Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pallets/jinja": { - "stars": 11513, + "stars": 11515, "owner": "pallets", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-14T20:34:58Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pallets/markupsafe": { "stars": 685, "owner": "pallets", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-09-27T18:45:34Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pallets/werkzeug": { "stars": 6849, "owner": "pallets", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-25T19:33:16Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "paramiko/paramiko": { "stars": 9712, "owner": "paramiko", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-20T02:49:59Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pathsim/pathsim": { "stars": 334, "owner": "pathsim", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-04T08:30:56Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pathwaycom/pathway": { - "stars": 60281, + "stars": 60427, "owner": "pathwaycom", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T06:08:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "patrys/httmock": { "stars": 472, "owner": "patrys", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-10-28T12:00:08Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "patx/pickledb": { "stars": 1069, "owner": "patx", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-06T08:04:35Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pdfminer/pdfminer.six": { "stars": 6933, "owner": "pdfminer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T03:10:44Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pennersr/django-allauth": { - "stars": 10307, + "stars": 10308, "owner": "pennersr", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-09T13:39:18Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "peterbrittain/asciimatics": { - "stars": 4271, + "stars": 4273, "owner": "peterbrittain", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-05-31T15:53:57Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pgjones/hypercorn": { "stars": 1536, "owner": "pgjones", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-08T13:49:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pgmpy/pgmpy": { - "stars": 3213, + "stars": 3214, "owner": "pgmpy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T11:06:43Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pikepdf/pikepdf": { "stars": 2667, "owner": "pikepdf", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T20:40:53Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "planetopendata/awesome-sqlite": { "stars": 388, "owner": "planetopendata", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-23T12:53:44Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "platformio/platformio-core": { - "stars": 8931, + "stars": 8936, "owner": "platformio", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-23T12:44:48Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "plotly/plotly.py": { - "stars": 18354, + "stars": 18359, "owner": "plotly", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T00:29:18Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pndurette/gTTS": { - "stars": 2595, + "stars": 2594, "owner": "pndurette", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-05-11T13:03:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pola-rs/polars": { - "stars": 37775, + "stars": 37780, "owner": "pola-rs", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T07:31:49Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ponyorm/pony": { - "stars": 3826, + "stars": 3825, "owner": "ponyorm", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-07-03T18:16:47Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "prabhupant/python-ds": { - "stars": 3074, + "stars": 3075, "owner": "prabhupant", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-04-06T07:43:16Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pricingassistant/mrq": { "stars": 896, "owner": "pricingassistant", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-12-13T18:58:15Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "prompt-toolkit/python-prompt-toolkit": { - "stars": 10329, + "stars": 10331, "owner": "prompt-toolkit", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T12:10:47Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "psf/black": { - "stars": 41430, + "stars": 41431, "owner": "psf", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T00:18:45Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "psf/requests": { - "stars": 53881, + "stars": 53853, "owner": "psf", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-05T20:14:29Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "psf/requests-html": { "stars": 13869, "owner": "psf", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-04-03T17:09:56Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "psycopg/psycopg": { "stars": 2322, "owner": "psycopg", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T18:42:54Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pudo/dataset": { - "stars": 4853, + "stars": 4854, "owner": "pudo", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-02-05T12:22:42Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pwaller/pyfiglet": { - "stars": 1545, + "stars": 1546, "owner": "pwaller", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-15T18:27:57Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "py2exe/py2exe": { "stars": 995, "owner": "py2exe", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-07-15T21:35:24Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pybee/toga": { - "stars": 5323, + "stars": 5325, "owner": "beeware", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T04:04:32Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pybuilder/pybuilder": { "stars": 1956, "owner": "pybuilder", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T22:57:47Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyca/cryptography": { "stars": 7515, "owner": "pyca", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T11:13:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyca/pynacl": { "stars": 1185, "owner": "pyca", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T11:13:25Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pydantic/pydantic": { - "stars": 27237, + "stars": 27214, "owner": "pydantic", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:48:39Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pydantic/pydantic-ai": { - "stars": 15531, + "stars": 15547, "owner": "pydantic", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T02:59:07Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyenv-win/pyenv-win": { - "stars": 7064, + "stars": 7066, "owner": "pyenv-win", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-21T03:27:29Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyenv/pyenv": { - "stars": 44440, + "stars": 44444, "owner": "pyenv", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T08:23:19Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyeve/cerberus": { "stars": 3270, "owner": "pyeve", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-01T13:12:42Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyeve/eve": { "stars": 6746, "owner": "pyeve", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-11T09:34:15Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyexcel/pyexcel": { "stars": 1284, "owner": "pyexcel", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-10T21:38:52Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyglet/pyglet": { "stars": 2172, "owner": "pyglet", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T02:49:51Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pygraphviz/pygraphviz": { "stars": 834, "owner": "pygraphviz", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-10T23:04:21Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyinfra-dev/pyinfra": { - "stars": 4869, + "stars": 4870, "owner": "pyinfra-dev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T10:59:38Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyinstaller/pyinstaller": { - "stars": 12924, + "stars": 12925, "owner": "pyinstaller", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T15:45:58Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyinvoke/invoke": { "stars": 4722, "owner": "pyinvoke", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-20T02:48:00Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pylint-dev/pylint": { "stars": 5661, "owner": "pylint-dev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T20:40:19Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pymatting/pymatting": { "stars": 1891, "owner": "pymatting", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-19T10:29:20Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pymc-devs/pymc3": { - "stars": 9527, + "stars": 9528, "owner": "pymc-devs", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T14:36:22Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pymssql/pymssql": { "stars": 880, "owner": "pymssql", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T00:40:01Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pynamodb/PynamoDB": { "stars": 2647, "owner": "pynamodb", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-06T15:42:11Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pypa/bandersnatch": { "stars": 528, "owner": "pypa", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T19:27:34Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pypa/hatch": { - "stars": 7145, + "stars": 7149, "owner": "pypa", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-27T17:59:39Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pypa/virtualenv": { "stars": 5017, "owner": "pypa", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T00:32:57Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pypa/warehouse": { - "stars": 3978, + "stars": 3979, "owner": "pypi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T16:48:08Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyparsing/pyparsing": { "stars": 2465, "owner": "pyparsing", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-22T17:57:48Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyqtgraph/pyqtgraph": { "stars": 4311, "owner": "pyqtgraph", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-08T16:15:20Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pyston/pyston": { "stars": 2507, "owner": "pyston", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-08-12T16:30:56Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-attrs/attrs": { "stars": 5746, "owner": "python-attrs", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T17:51:51Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-greenlet/greenlet": { - "stars": 1814, + "stars": 1815, "owner": "python-greenlet", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-20T20:15:01Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-jsonschema/jsonschema": { - "stars": 4935, + "stars": 4934, "owner": "python-jsonschema", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T02:35:55Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-mode/python-mode": { "stars": 5478, "owner": "python-mode", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-14T23:45:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-openxml/python-docx": { "stars": 5486, "owner": "python-openxml", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-06-16T21:24:39Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-pillow/Pillow": { - "stars": 13437, + "stars": 13438, "owner": "python-pillow", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T22:42:15Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-rapidjson/python-rapidjson": { "stars": 532, "owner": "python-rapidjson", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-07T06:14:13Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-rope/rope": { "stars": 2183, "owner": "python-rope", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-04T14:49:29Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python-trio/trio": { "stars": 7204, "owner": "python-trio", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T22:58:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python/cpython": { - "stars": 72015, + "stars": 72001, "owner": "python", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T18:24:44Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python/mypy": { "stars": 20302, "owner": "python", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T22:24:58Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "python/typeshed": { - "stars": 5021, + "stars": 5022, "owner": "python", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T00:46:34Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pythonnet/pythonnet": { "stars": 5418, "owner": "pythonnet", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-27T07:16:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pytoolz/cytoolz": { "stars": 1103, "owner": "pytoolz", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-18T19:31:50Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pytoolz/toolz": { - "stars": 5125, + "stars": 5126, "owner": "pytoolz", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-17T03:29:39Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pytorch/pytorch": { - "stars": 98355, + "stars": 98348, "owner": "pytorch", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T08:34:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "pytransitions/transitions": { "stars": 6459, "owner": "pytransitions", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-09-09T16:42:34Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "quantumlib/Cirq": { - "stars": 4890, + "stars": 4891, "owner": "quantumlib", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T20:32:18Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "quodlibet/mutagen": { - "stars": 1867, + "stars": 1868, "owner": "quodlibet", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-15T17:12:28Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "r0x0r/pywebview": { - "stars": 5803, + "stars": 5804, "owner": "r0x0r", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T21:31:51Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ranaroussi/yfinance": { - "stars": 22172, + "stars": 22190, "owner": "ranaroussi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-21T17:37:15Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ray-project/ray": { - "stars": 41786, + "stars": 41765, "owner": "ray-project", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T07:37:46Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "redis/redis-py": { - "stars": 13505, + "stars": 13507, "owner": "redis", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T11:59:23Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "reflex-dev/reflex": { - "stars": 28234, + "stars": 28233, "owner": "reflex-dev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T02:23:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "robotframework/robotframework": { - "stars": 11478, + "stars": 11479, "owner": "robotframework", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T20:41:56Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ronaldoussoren/py2app": { "stars": 421, "owner": "ronaldoussoren", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-25T11:45:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "rq/rq": { "stars": 10605, "owner": "rq", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T11:13:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "rsalmei/alive-progress": { - "stars": 6256, + "stars": 6257, "owner": "rsalmei", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-10T00:39:31Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "run-llama/llama_index": { - "stars": 47740, + "stars": 47758, "owner": "run-llama", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T14:37:41Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "s3tools/s3cmd": { "stars": 4869, "owner": "s3tools", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-22T23:26:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "saffsd/langid.py": { "stars": 2455, "owner": "saffsd", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2017-07-15T02:49:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "saltstack/salt": { "stars": 15281, "owner": "saltstack", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T21:32:42Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "samuelcolvin/watchfiles": { - "stars": 2444, + "stars": 2446, "owner": "samuelcolvin", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-28T23:00:57Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sanic-org/sanic": { "stars": 18639, "owner": "sanic-org", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-31T19:05:34Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "scanny/python-pptx": { - "stars": 3233, + "stars": 3235, "owner": "scanny", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-08-07T17:33:54Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "schematics/schematics": { "stars": 2591, "owner": "schematics", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-08-17T21:08:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "scottrogowski/code2flow": { - "stars": 4545, + "stars": 4546, "owner": "scottrogowski", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-01-08T22:55:22Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "scrapy/scrapy": { - "stars": 60855, + "stars": 60844, "owner": "scrapy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-13T09:30:25Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sdispater/pendulum": { "stars": 6628, "owner": "python-pendulum", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-17T11:16:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sdispater/poetry": { - "stars": 34316, + "stars": 34294, "owner": "python-poetry", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T10:36:40Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sebastien/cuisine": { "stars": 1270, "owner": "sebastien", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-05-21T02:33:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "secdev/scapy": { - "stars": 12108, + "stars": 12110, "owner": "secdev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T22:19:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sehmaschine/django-grappelli": { "stars": 3927, "owner": "sehmaschine", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-27T15:59:41Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "selwin/python-user-agents": { "stars": 1520, "owner": "selwin", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-02-16T01:51:50Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sergree/matchering": { "stars": 2446, "owner": "sergree", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T05:33:05Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "shahraizali/awesome-django": { - "stars": 1901, + "stars": 1902, "owner": "shahraizali", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-03T23:23:57Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "shapely/shapely": { - "stars": 4395, + "stars": 4396, "owner": "shapely", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-10T08:57:31Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sherlock-project/sherlock": { - "stars": 73803, + "stars": 73819, "owner": "sherlock-project", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T06:26:18Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "simonw/datasette": { - "stars": 10835, + "stars": 10839, "owner": "simonw", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T15:47:04Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "simonw/sqlite-utils": { "stars": 2019, "owner": "simonw", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-17T06:11:47Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sirfz/tesserocr": { "stars": 2160, "owner": "sirfz", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T14:37:08Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "skorokithakis/shortuuid": { "stars": 2178, "owner": "skorokithakis", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-01T00:26:35Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sloria/doitlive": { "stars": 3566, "owner": "sloria", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T16:14:55Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" + }, + "sorrycc/awesome-javascript": { + "stars": 34932, + "owner": "sorrycc", + "last_commit_at": "2026-03-16T02:09:29Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sphinx-doc/sphinx": { - "stars": 7721, + "stars": 7724, "owner": "sphinx-doc", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-31T15:07:44Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "spotify/annoy": { "stars": 14181, "owner": "spotify", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-29T14:08:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "spotify/luigi": { - "stars": 18694, + "stars": 18695, "owner": "spotify", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T02:22:01Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "spulec/freezegun": { "stars": 4498, "owner": "spulec", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-19T19:29:42Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "spyder-ide/spyder": { "stars": 9163, "owner": "spyder-ide", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T01:07:45Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sqlalchemy/dogpile.cache": { "stars": 291, "owner": "sqlalchemy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-12T18:51:49Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sqlmapproject/sqlmap": { - "stars": 36853, + "stars": 36856, "owner": "sqlmapproject", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T21:22:40Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "stanfordnlp/stanza": { - "stars": 7739, + "stars": 7740, "owner": "stanfordnlp", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-26T06:42:21Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "statsmodels/statsmodels": { - "stars": 11298, + "stars": 11302, "owner": "statsmodels", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-12T16:03:41Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "stchris/untangle": { "stars": 631, "owner": "stchris", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-01T11:05:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "strawberry-graphql/strawberry-django": { "stars": 488, "owner": "strawberry-graphql", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T17:13:53Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "streamlit/streamlit": { - "stars": 43924, + "stars": 43929, "owner": "streamlit", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T11:26:08Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sunainapai/makesite": { "stars": 1872, "owner": "sunainapai", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-10-12T19:28:59Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "sympy/sympy": { "stars": 14495, "owner": "sympy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T20:23:47Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tartley/colorama": { "stars": 3770, "owner": "tartley", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-07-09T16:58:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tayllan/awesome-algorithms": { - "stars": 24835, + "stars": 24837, "owner": "tayllan", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-11T06:35:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tensorflow/tensorflow": { - "stars": 194201, + "stars": 194187, "owner": "tensorflow", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T11:21:25Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "thauber/django-schedule": { "stars": 850, "owner": "thauber", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2016-04-16T20:26:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "thumbor/thumbor": { "stars": 10465, "owner": "thumbor", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T02:56:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tiangolo/fastapi": { - "stars": 96302, + "stars": 96308, "owner": "fastapi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:56:02Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tiangolo/typer": { - "stars": 19041, + "stars": 19044, "owner": "fastapi", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-16T13:02:43Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "timofurrer/awesome-asyncio": { - "stars": 5030, + "stars": 5031, "owner": "timofurrer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-12-01T14:19:00Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "timofurrer/try": { "stars": 751, "owner": "timofurrer", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2022-05-15T18:30:33Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "timothycrosley/isort": { "stars": 6916, "owner": "PyCQA", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T20:59:11Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tmux-python/tmuxp": { "stars": 4451, "owner": "tmux-python", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T22:44:59Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tmux/tmux": { - "stars": 43165, + "stars": 43191, "owner": "tmux", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T08:46:16Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tomerfiliba/rpyc": { "stars": 1693, "owner": "tomerfiliba-org", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-14T03:45:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tomschimansky/customtkinter": { - "stars": 13223, + "stars": 13225, "owner": "TomSchimansky", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-02T20:44:11Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tornadoweb/tornado": { "stars": 22406, "owner": "tornadoweb", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T19:24:12Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tqdm/tqdm": { - "stars": 31040, + "stars": 31042, "owner": "tqdm", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-03T16:58:32Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "trustedsec/social-engineer-toolkit": { "stars": 14671, "owner": "trustedsec", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-10-21T15:46:17Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "twisted/treq": { "stars": 606, "owner": "twisted", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-03T01:47:06Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "twisted/twisted": { - "stars": 5951, + "stars": 5950, "owner": "twisted", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-09T23:19:56Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "tyiannak/pyAudioAnalysis": { "stars": 6234, "owner": "tyiannak", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-08-04T16:44:35Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "typeddjango/awesome-python-typing": { - "stars": 1950, + "stars": 1952, "owner": "typeddjango", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-28T08:10:43Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ultraplot/UltraPlot": { - "stars": 279, + "stars": 280, "owner": "Ultraplot", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T00:56:09Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "un33k/python-slugify": { "stars": 1599, "owner": "un33k", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-07T16:28:09Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "unclecode/crawl4ai": { - "stars": 62122, + "stars": 62156, "owner": "unclecode", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-20T03:31:12Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "unfoldadmin/django-unfold": { - "stars": 3369, + "stars": 3372, "owner": "unfoldadmin", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T11:04:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "uralbash/awesome-pyramid": { "stars": 570, "owner": "uralbash", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2021-07-08T12:28:10Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "urllib3/urllib3": { "stars": 4012, "owner": "urllib3", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T06:51:37Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "vadikko2/python-cqrs": { "stars": 44, "owner": "pypatterns", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-05T20:33:59Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" + }, + "vinta/awesome-python": { + "stars": 287742, + "owner": "vinta", + "last_commit_at": "2026-03-18T06:03:50Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "vinta/pangu.py": { "stars": 276, "owner": "vinta", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-03-30T17:57:13Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "vispy/vispy": { "stars": 3558, "owner": "vispy", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-02T19:30:57Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "vitali87/code-graph-rag": { - "stars": 2131, + "stars": 2139, "owner": "vitali87", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T00:56:06Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "vllm-project/vllm": { - "stars": 73457, + "stars": 73512, "owner": "vllm-project", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T10:30:29Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "wagtail/wagtail": { "stars": 20240, "owner": "wagtail", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-18T01:31:28Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "waylan/Python-Markdown": { "stars": 4186, "owner": "Python-Markdown", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-02-09T14:54:42Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "web2py/pydal": { "stars": 531, "owner": "web2py", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-14T00:25:51Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "wireservice/csvkit": { "stars": 6360, "owner": "wireservice", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-05T23:54:49Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "wooey/wooey": { - "stars": 2218, + "stars": 2219, "owner": "wooey", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2023-12-14T15:17:45Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "worldveil/dejavu": { "stars": 6736, "owner": "worldveil", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2020-06-03T05:58:03Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "xonsh/xonsh": { "stars": 9252, "owner": "xonsh", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T15:32:20Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "yfedoseev/pdf_oxide": { "stars": 431, "owner": "yfedoseev", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-11T04:36:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "yoloseem/awesome-sphinxdoc": { "stars": 973, "owner": "ygzgxyz", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-10-07T13:10:20Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ytdl-org/youtube-dl": { - "stars": 139894, + "stars": 139899, "owner": "ytdl-org", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2025-11-26T03:02:36Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "zappa/Zappa": { - "stars": 3676, + "stars": 3678, "owner": "zappa", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-15T01:53:26Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "zauberzeug/nicegui": { - "stars": 15518, + "stars": 15522, "owner": "zauberzeug", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-03-17T13:26:42Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "zoofIO/flexx": { "stars": 3343, "owner": "flexxui", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2024-01-06T22:16:26Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "zopefoundation/ZODB": { "stars": 752, "owner": "zopefoundation", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" + "last_commit_at": "2026-01-24T15:33:23Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" }, "ztane/python-Levenshtein": { "stars": 1278, "owner": "ztane", - "fetched_at": "2026-03-17T20:08:08.973003+00:00" - }, - "josephmisiti/awesome-machine-learning": { - "stars": 72017, - "owner": "josephmisiti", - "fetched_at": "2026-03-17T20:12:03.066921+00:00" - }, - "sorrycc/awesome-javascript": { - "stars": 34931, - "owner": "sorrycc", - "fetched_at": "2026-03-17T20:12:03.066921+00:00" - }, - "vinta/awesome-python": { - "stars": 287640, - "owner": "vinta", - "fetched_at": "2026-03-17T20:12:03.066921+00:00" + "last_commit_at": "2021-02-01T13:02:11Z", + "fetched_at": "2026-03-18T11:26:37.667512+00:00" } } diff --git a/website/fetch_github_stars.py b/website/fetch_github_stars.py index 4f9b50a3..24ae1e9d 100644 --- a/website/fetch_github_stars.py +++ b/website/fetch_github_stars.py @@ -10,14 +10,14 @@ from pathlib import Path import httpx -from build import extract_github_repo +from build import extract_github_repo, load_stars CACHE_MAX_AGE_DAYS = 7 DATA_DIR = Path(__file__).parent / "data" CACHE_FILE = DATA_DIR / "github_stars.json" README_PATH = Path(__file__).parent.parent / "README.md" GRAPHQL_URL = "https://api.github.com/graphql" -BATCH_SIZE = 100 +BATCH_SIZE = 50 def extract_github_repos(text: str) -> set[str]: @@ -30,17 +30,6 @@ def extract_github_repos(text: str) -> set[str]: return repos -def load_cache() -> dict: - """Load the star cache from disk. Returns empty dict if missing or corrupt.""" - if CACHE_FILE.exists(): - try: - return json.loads(CACHE_FILE.read_text(encoding="utf-8")) - except json.JSONDecodeError: - print(f"Warning: corrupt cache at {CACHE_FILE}, starting fresh.", file=sys.stderr) - return {} - return {} - - def save_cache(cache: dict) -> None: """Write the star cache to disk, creating data/ dir if needed.""" DATA_DIR.mkdir(parents=True, exist_ok=True) @@ -61,7 +50,7 @@ def build_graphql_query(repos: list[str]) -> str: continue parts.append( f'repo_{i}: repository(owner: "{owner}", name: "{name}") ' - f"{{ stargazerCount pushedAt owner {{ login }} }}" + f"{{ stargazerCount owner {{ login }} defaultBranchRef {{ target {{ ... on Commit {{ committedDate }} }} }} }}" ) if not parts: return "" @@ -78,10 +67,12 @@ def parse_graphql_response( node = data.get(f"repo_{i}") if node is None: continue + default_branch = node.get("defaultBranchRef") or {} + target = default_branch.get("target") or {} result[repo] = { "stars": node.get("stargazerCount", 0), "owner": node.get("owner", {}).get("login", ""), - "pushed_at": node.get("pushedAt", ""), + "last_commit_at": target.get("committedDate", ""), } return result @@ -114,7 +105,7 @@ def main() -> None: current_repos = extract_github_repos(readme_text) print(f"Found {len(current_repos)} GitHub repos in README.md") - cache = load_cache() + cache = load_stars(CACHE_FILE) now = datetime.now(timezone.utc) # Prune entries not in current README @@ -173,7 +164,7 @@ def main() -> None: cache[repo] = { "stars": results[repo]["stars"], "owner": results[repo]["owner"], - "pushed_at": results[repo]["pushed_at"], + "last_commit_at": results[repo]["last_commit_at"], "fetched_at": now_iso, } fetched_count += 1 diff --git a/website/readme_parser.py b/website/readme_parser.py new file mode 100644 index 00000000..97fd37af --- /dev/null +++ b/website/readme_parser.py @@ -0,0 +1,388 @@ +"""Parse README.md into structured section data using markdown-it-py AST.""" + +from __future__ import annotations + +import re +from typing import TypedDict + +from markdown_it import MarkdownIt +from markdown_it.tree import SyntaxTreeNode +from markupsafe import escape + + +class AlsoSee(TypedDict): + name: str + url: str + + +class ParsedEntry(TypedDict): + name: str + url: str + description: str # inline HTML, properly escaped + also_see: list[AlsoSee] + + +class ParsedSection(TypedDict): + name: str + slug: str + description: str # plain text, links resolved to text + entries: list[ParsedEntry] + entry_count: int + preview: str + content_html: str # rendered HTML, properly escaped + + +# --- Slugify ---------------------------------------------------------------- + +_SLUG_NON_ALNUM_RE = re.compile(r"[^a-z0-9\s-]") +_SLUG_WHITESPACE_RE = re.compile(r"[\s]+") +_SLUG_MULTI_DASH_RE = re.compile(r"-+") + + +def slugify(name: str) -> str: + """Convert a category name to a URL-friendly slug.""" + slug = name.lower() + slug = _SLUG_NON_ALNUM_RE.sub("", slug) + slug = _SLUG_WHITESPACE_RE.sub("-", slug.strip()) + slug = _SLUG_MULTI_DASH_RE.sub("-", slug) + return slug + + +# --- Inline renderers ------------------------------------------------------- + + +def render_inline_html(children: list[SyntaxTreeNode]) -> str: + """Render inline AST nodes to HTML with proper escaping.""" + parts: list[str] = [] + for child in children: + match child.type: + case "text": + parts.append(str(escape(child.content))) + case "softbreak": + parts.append(" ") + case "link": + href = str(escape(child.attrGet("href") or "")) + inner = render_inline_html(child.children) + parts.append( + f'{inner}' + ) + case "em": + parts.append(f"{render_inline_html(child.children)}") + case "strong": + parts.append(f"{render_inline_html(child.children)}") + case "code_inline": + parts.append(f"{escape(child.content)}")
+ case "html_inline":
+ parts.append(str(escape(child.content)))
+ return "".join(parts)
+
+
+def render_inline_text(children: list[SyntaxTreeNode]) -> str:
+ """Render inline AST nodes to plain text (links become their text)."""
+ parts: list[str] = []
+ for child in children:
+ match child.type:
+ case "text":
+ parts.append(child.content)
+ case "softbreak":
+ parts.append(" ")
+ case "code_inline":
+ parts.append(child.content)
+ case "em" | "strong" | "link":
+ parts.append(render_inline_text(child.children))
+ return "".join(parts)
+
+
+# --- AST helpers -------------------------------------------------------------
+
+
+def _heading_text(node: SyntaxTreeNode) -> str:
+ """Extract plain text from a heading node."""
+ for child in node.children:
+ if child.type == "inline":
+ return render_inline_text(child.children)
+ return ""
+
+
+def _extract_description(nodes: list[SyntaxTreeNode]) -> str:
+ """Extract description from the first paragraph if it's a single block.
+
+ Pattern: _Libraries for foo._ -> "Libraries for foo."
+ """
+ if not nodes:
+ return ""
+ first = nodes[0]
+ if first.type != "paragraph":
+ return ""
+ for child in first.children:
+ if child.type == "inline" and len(child.children) == 1:
+ em = child.children[0]
+ if em.type == "em":
+ return render_inline_text(em.children)
+ return ""
+
+
+# --- Entry extraction --------------------------------------------------------
+
+_DESC_SEP_RE = re.compile(r"^\s*[-\u2013\u2014]\s*")
+
+
+def _find_child(node: SyntaxTreeNode, child_type: str) -> SyntaxTreeNode | None:
+ """Find first direct child of a given type."""
+ for child in node.children:
+ if child.type == child_type:
+ return child
+ return None
+
+
+def _find_inline(node: SyntaxTreeNode) -> SyntaxTreeNode | None:
+ """Find the inline node in a list_item's paragraph."""
+ para = _find_child(node, "paragraph")
+ if para is None:
+ return None
+ return _find_child(para, "inline")
+
+
+def _find_first_link(inline: SyntaxTreeNode) -> SyntaxTreeNode | None:
+ """Find the first link node among inline children."""
+ for child in inline.children:
+ if child.type == "link":
+ return child
+ return None
+
+
+def _is_leading_link(inline: SyntaxTreeNode, link: SyntaxTreeNode) -> bool:
+ """Check if the link is the first child of inline (a real entry, not a subcategory label)."""
+ return bool(inline.children) and inline.children[0] is link
+
+
+def _extract_description_html(inline: SyntaxTreeNode, first_link: SyntaxTreeNode) -> str:
+ """Extract description HTML from inline content after the first link.
+
+ AST: [link("name"), text(" - Description.")] -> "Description."
+ The separator (- / en-dash / em-dash) is stripped.
+ """
+ link_idx = next((i for i, c in enumerate(inline.children) if c is first_link), None)
+ if link_idx is None:
+ return ""
+ desc_children = inline.children[link_idx + 1 :]
+ if not desc_children:
+ return ""
+ html = render_inline_html(desc_children)
+ return _DESC_SEP_RE.sub("", html)
+
+
+def _parse_list_entries(bullet_list: SyntaxTreeNode) -> list[ParsedEntry]:
+ """Extract entries from a bullet_list AST node.
+
+ Handles three patterns:
+ - Text-only list_item -> subcategory label -> recurse into nested list
+ - Link list_item with nested link-only items -> entry with also_see
+ - Link list_item without nesting -> simple entry
+ """
+ entries: list[ParsedEntry] = []
+
+ for list_item in bullet_list.children:
+ if list_item.type != "list_item":
+ continue
+
+ inline = _find_inline(list_item)
+ if inline is None:
+ continue
+
+ first_link = _find_first_link(inline)
+
+ if first_link is None or not _is_leading_link(inline, first_link):
+ # Subcategory label (plain text or text-before-link) — recurse into nested list
+ nested = _find_child(list_item, "bullet_list")
+ if nested:
+ entries.extend(_parse_list_entries(nested))
+ continue
+
+ # Entry with a link
+ name = render_inline_text(first_link.children)
+ url = first_link.attrGet("href") or ""
+ desc_html = _extract_description_html(inline, first_link)
+
+ # Collect also_see from nested bullet_list
+ also_see: list[AlsoSee] = []
+ nested = _find_child(list_item, "bullet_list")
+ if nested:
+ for sub_item in nested.children:
+ if sub_item.type != "list_item":
+ continue
+ sub_inline = _find_inline(sub_item)
+ if sub_inline:
+ sub_link = _find_first_link(sub_inline)
+ if sub_link:
+ also_see.append(AlsoSee(
+ name=render_inline_text(sub_link.children),
+ url=sub_link.attrGet("href") or "",
+ ))
+
+ entries.append(ParsedEntry(
+ name=name,
+ url=url,
+ description=desc_html,
+ also_see=also_see,
+ ))
+
+ return entries
+
+
+def _parse_section_entries(content_nodes: list[SyntaxTreeNode]) -> list[ParsedEntry]:
+ """Extract all entries from a section's content nodes."""
+ entries: list[ParsedEntry] = []
+ for node in content_nodes:
+ if node.type == "bullet_list":
+ entries.extend(_parse_list_entries(node))
+ return entries
+
+
+# --- Content HTML rendering --------------------------------------------------
+
+
+def _render_bullet_list_html(
+ bullet_list: SyntaxTreeNode,
+ *,
+ is_sub: bool = False,
+) -> str:
+ """Render a bullet_list node to HTML with entry/entry-sub/subcat classes."""
+ out: list[str] = []
+
+ for list_item in bullet_list.children:
+ if list_item.type != "list_item":
+ continue
+
+ inline = _find_inline(list_item)
+ if inline is None:
+ continue
+
+ first_link = _find_first_link(inline)
+
+ if first_link is None or not _is_leading_link(inline, first_link):
+ # Subcategory label (plain text or text-before-link)
+ label = str(escape(render_inline_text(inline.children)))
+ out.append(f'