← back to gallery

after-astral

Day N since OpenAI bought uv, Ruff and ty — live community scoreboard

dev-toolspythonuvruffastralopenaiacquisitiontoolingleaderboard
Open product ↗

after-astral

Live public watch on the Python tooling ecosystem after OpenAI's
acquisition of Astral on 2026-03-19
(the company behind uv, ruff, and ty).

Two months in, are devs sticking with Astral's tools or quietly migrating?
This dashboard pulls real signals every six hours and shows the answer.

What you see

Stack

Data sources (all public, no API keys required)

| Source | Endpoint | Refresh |
|---|---|---|
| GitHub REST | api.github.com/repos/{o}/{r} | every 6 h |
| GitHub commits | api.github.com/repos/{o}/{r}/commits | every 6 h |
| GitHub forks | api.github.com/repos/{o}/{r}/forks?sort=newest | twice daily |
| GitHub code-search | api.github.com/search/code?q=... | twice daily |
| pypistats.org | /api/packages/{pkg}/recent | every 6 h |
| HN Algolia | hn.algolia.com/api/v1/search_by_date | hourly |
| Astral blog | https://astral.sh/blog (HTML) | twice daily |

Optionally set GITHUB_TOKEN to lift the GitHub rate limit from 60/h to
5000/h. Without it, the dashboard still works — just paginates more slowly.

Anti-mock guarantee

There is no fake data anywhere in this codebase. Every numeric value
on the dashboard comes from one of the public sources above. If a fetcher
fails, the previous snapshot stays in the DB and the matching panel shows
a "stale" badge. Verify by opening GET /after-astral/api/fetch-log.

Run locally

cp .env.example .env
npm install
npm start
# open http://localhost:4884/after-astral/

Endpoints

License

Part of the Holy AI showcase. Not affiliated with Astral or OpenAI.