Edition No. 10 · 4 Sep 2026

Twelve repositories for writing that has to be read

Readability checks, prose linters, translation memory, and the tools that catch what a spellchecker cannot.

By Genn·12 repositories·13 min read

Nine editions have been about plumbing. Analytics, uptime, queues, backups, ingest, vectors, transcripts, dashboards, a CRM, a chat widget, a session recorder. Roughly a hundred and sixty repositories, and almost every one of them is a mechanism that sits around the thing you are actually selling.

Not one of them has looked at the sentences. And the sentences are the product's front door: the landing page hero, the docs paragraph an AI assistant decides to quote, the video description, the onboarding email, the button label. For someone writing in two languages, one of them not native, that is the most under-inspected surface in the whole operation — and unlike RAM or disk, nothing on the box will ever warn you it is wrong.

So today the slate starts with the words, then follows them outward: how a reader gets back to you after they close the tab, what happens automatically once they do, and — in the products — how you find out whether what the machine wrote was any good.

Seven entries are marketing-shaped, three sharpen Grasppy or ScalpingMate, two are the bench. All twelve are new to the ledger; no repeats today. Four are genuine hidden gems under 3,000 stars. Five further candidates were verified and deliberately left out, named in the appendix with the reason.

This edition, in numbers

Repos12
Hidden gems (<3k stars)4
Marketing / product / bench7 / 3 / 2
New to the ledger12
Repeats0
Dropped on check5

Two things worth knowing, separate from the recommendations

- Nothing on the status board has moved off recommended in ten editions. That is not a scolding — it is a signal that the board is doing half its job. Marking something exclude is as valuable as installing it: it tells tomorrow's run to stop spending a slot on that category. If page builders, dubbing tools or backtesters are simply not for you, one word on the board removes them permanently. - Vale has changed hands. errata-ai/vale now redirects to vale-cli/vale. Old bookmarks and install scripts still resolve, but the canonical name is different now — worth knowing before an install guide confuses you.

If you only do three things

  1. Shlink (#4) — your YouTube channel currently has no measurable connection to your website. One container, one short subdomain, and every video description carries a link you can count. Dub (Ed.1 #2) was meant to solve this on 21 August and is still not installed, because self-hosting it is a Next.js project. This one is a container and a database.
  2. LanguageTool (#1) — a grammar and style checker with genuinely serious Russian rules, running on your own box so no product copy leaves it. Every English page you write is being read by native speakers, and every Russian page is being read by people who will notice English word order instantly.
  3. uv (#12) — twenty minutes, and it is the reason more of the other eleven actually get tried. uv run --with textstat script.py runs a tool from this page without installing anything permanently, and without the source venv/bin/activate dance that has broken more Sunday afternoons than any bug.

Every link in one place

The words themselves

Twelve repositories, checked and reviewed. Every version verified against the GitHub API and dated.

15k stars · LGPL-2.1 · v6.8 (2026-05-05)

Grammarly you can run yourself — and one of the very few checkers that takes Russian as seriously as English.

Repo detailsthe review · specs · pros & cons · install

What it is

An open-source spelling, grammar and style checker covering more than 25 languages, shipped as a self-hostable HTTP server with a simple JSON API. You post text at it; it returns a list of issues with suggested replacements, a rule identifier, and the character offsets to highlight.

Why it matters

Grasppy's pitch is comprehension. If the page making that pitch has slightly wrong prepositions, a buyer's confidence drops before they reach the demo — and they will never tell you why they left. You are writing marketing copy in two languages, and the Russian half is where a machine check earns most: LanguageTool's Russian rule set is one of the strongest in open source, not a token afterthought bolted onto an English engine. Running it yourself also means your unreleased landing copy, pricing lines and video scripts never get pasted into a third-party SaaS. Wire it into the Astro build (Ed.3 #4) and every page ships checked, in both languages, without you remembering to check.

Stars15k
LicenceLGPL-2.1
Latestv6.8 (2026-05-05)checked 7 Sep 2026
Written inJava
NeedsDocker
RunsLocally, on your own machine
Setup effort
3 / 5
Payoff
4 / 5
Good
  • Russian and English both treated as first-class, which almost nothing else in this ledger can claim.
  • Self-hosted HTTP API: FastAPI, the Astro build, and Claude Code can all call the same instance.
  • Browser extensions use the same server, so YouTube descriptions and email drafts get checked too.
Watch for
  • It is a JVM server, and with n-gram data it wants roughly 1–2 GB of RAM — a real cost on a Hetzner box already carrying two products. Check with Beszel (Ed.5 #8) first.
  • The free rule set is deliberately weaker than the vendor's paid cloud tier: strong on grammar and mechanics, thinner on rewriting and nuance.
  • LGPL-2.1 — fine to run as a separate service, but do not link it into a distributed binary without reading the licence carefully.
How to get it

Docker container on the VPS listening on an internal port; a thin FastAPI route proxies it for the app; a Node script in the Astro build fails the build on new errors.

6.1k stars · MIT · v3.20.0 (2026-09-02)

A linter for your voice — the difference between a site that sounds like a company and one that sounds like nine separate afternoons.

Repo detailsthe review · specs · pros & cons · install

What it is

A markup-aware command-line linter for prose. You point it at a style — Microsoft's, Google's, or a set of YAML rules you write yourself — and it flags passive voice, banned phrases, heading capitalisation and inconsistent product terms across Markdown, HTML and MDX, while ignoring the code and front-matter around them.

Why it matters

LanguageTool tells you a sentence is wrong. Vale tells you it is not yours. Writing docs, blog posts and video descriptions over months, the failure is not grammar, it is drift: "sub-topic" on Monday and "subtopic" on Friday, "map" in the hero and "graph" in the docs. Those wobbling terms are exactly the strings an AI answer engine would otherwise quote you by, so terminology consistency is an AI-search asset rather than a style hobby — the same argument geo-optimizer-skill (Ed.8 #3) makes about structure, applied to vocabulary. And since Claude Code writes a great deal of your copy, a checked-in rules file is the only way to make it write in your voice rather than a plausible average one.

Stars6.1k
LicenceMIT
Latestv3.20.0 (2026-09-02)checked 7 Sep 2026
Written inGo
NeedsDocker
RunsSelf-hosted on your own server
Setup effort
2 / 5
Payoff
4 / 5
Good
  • MIT, a single binary, no runtime to install — it will still work in three years.
  • Understands Markdown and MDX, so it drops straight into Astro and Starlight (Ed.4 #4) without mangling components.
  • Twenty lines of YAML gives you an enforceable house glossary — the cheapest brand consistency available.
Watch for
  • It ships almost no rules of its own: day one is installing or writing a style package, so the first session is configuration rather than results.
  • Off-the-shelf styles produce false positives on technical writing until tuned, and an ignored linter is worse than none.
  • The repository has moved — errata-ai/vale now redirects to vale-cli/vale. Ownership changes are worth watching on a tool you build a workflow around.
How to get it

A .vale.ini at the repo root, vale docs/ in the Astro build and in a git pre-commit hook.

03

textstat/textstat

💎 hidden gem

1.4k stars · MIT · 0.7.13 (2026-02-18)

One number that says whether the page you just wrote can be read by the person you wrote it for.

Repo detailsthe review · specs · pros & cons · install

What it is

A small Python library that scores a block of text for readability — Flesch Reading Ease, Flesch–Kincaid grade level, SMOG, Gunning fog and a dozen more — along with syllable, word and sentence counts. It supports several languages, Russian among them.

Why it matters

Grasppy exists to make dense text navigable. A landing page written at postgraduate density quietly contradicts that promise before anyone clicks Sign up, and no analytics tool will ever tell you that is the reason. This gives you one number per page, cheap enough to compute for every page on every build, so you can watch the trend rather than argue about a paragraph. It also grades your YouTube scripts, which is where sentence density costs you most directly — retention drops on complexity long before viewers leave a comment about it. Pair it with GoAccess (Ed.8 #4): rewrite the hero, watch the grade level drop, watch what happens to bounce.

Stars1.4k
LicenceMIT
Latest0.7.13 (2026-02-18)checked 7 Sep 2026
Written inPython
RunsLocally, on your own machine
Setup effort
1 / 5
Payoff
3 / 5
Good
  • One pip install, no models, no downloads, runs in milliseconds — the lowest-friction item on this page.
  • Handles Russian as well as English, so both halves of the site get the same treatment.
  • MIT and tiny, so it can sit inside Grasppy itself as a per-document statistic if you ever want it as a feature.
Watch for
  • Readability formulas count syllables, not clarity. A precise, well-written technical paragraph can legitimately score "difficult" — the number is a prompt to reread, never a target to optimise.
  • Russian formula coverage is thinner and less validated than English; treat the Russian scores as relative, not absolute.
  • Small library, modest maintenance cadence — fine for a scoring script, less so as a load-bearing product dependency.
How to get it

A Procrastinate (Ed.5 #10) job walks the built HTML, pulls the prose out with trafilatura (Ed.6 #5), scores it, and writes a row per page per day into research.db ( sqlite-utils , Ed.8 #5).

5.3k stars · MIT · v5.1.6 (2026-09-06)

The short link in the YouTube description, and the only honest answer to 'did that video do anything?'

Repo detailsthe review · specs · pros & cons · install

What it is

A self-hosted URL shortener running on your own domain, with a REST API, per-link visit statistics, tags, UTM handling and built-in QR-code generation. One PHP container plus a database, and a separate web UI if you want one.

Why it matters

Your YouTube channel and your website currently have no measurable relationship. You publish a tutorial, some people watch it, some number of visits arrive, and there is no way to connect the two. Dub (Ed.1 #2) was the answer offered on 21 August and it has sat untouched for two weeks, which is itself information: self-hosting a large Next.js application is not the shape of thing you will do on a Tuesday. Shlink is the shape you will. go.yourdomain/ru-map-01 in the description of every video, a QR code on the end card, and a stats endpoint that tells you which videos send people and which merely get watched. That is the number that turns the channel from a hobby into a channel with a job.

Stars5.3k
LicenceMIT
Latestv5.1.6 (2026-09-06)checked 7 Sep 2026
Written inPHP
NeedsDocker, PostgreSQL and MySQL
Setup effort
3 / 5
Payoff
4 / 5
Good
  • MIT and mature at v5.x, with a real release cadence — the least risky attribution tool in the ledger.
  • REST API means n8n or Claude Code can mint a tagged link per video automatically, so you never hand-make one.
  • QR codes are built in, which matters for end cards and for slides in a Slidev deck (Ed.5 #4).
Watch for
  • PHP/Symfony — a stack you do not otherwise run, so its upgrades are a separate chore from everything else on the box.
  • The admin UI is a second project (shlink-web-client) you also host; the core is API and CLI only.
  • A short-link domain needs its own DNS and TLS, and needs guarding — an open shortener gets abused and then blocklisted, which would take your links down mid-campaign.
Works well with

Pull visit data via the REST API into research.db beside the yt-dlp (Ed.6 #4) video metadata, and "video → clicks → signups" becomes a single SQL join.

How to get it

Docker on the Hetzner box behind its own short subdomain, pointed at a database.

05

web-push-libs/pywebpush

💎 hidden gem

375 stars · MPL-2.0 · 2.5.0 on PyPI (2026-08-29)

A way to reach a returning visitor who never gave you an email address.

Repo detailsthe review · specs · pros & cons · install

What it is

The Python implementation of Web Push: it encrypts a payload with the VAPID scheme and hands it to the browser's push service, which delivers a notification to the visitor's desktop or Android device. This is the server half; the browser half is a service worker and a permission prompt you write yourself.

Why it matters

Every audience tool in this ledger assumes an email address — Listmonk, the lead magnet, Mautic below. But most people who read one tutorial will not hand one over, and a push subscription costs them a single click and no personal data at all. For a channel publishing bilingual tutorials on a schedule, "the next video is up" is precisely the notification people accept and do not resent. It is also the only re-engagement channel that needs no sending domain, no SPF, no DKIM and no DMARC — none of the machinery checkdmarc (Ed.8 #1) exists to police, and none of the deliverability risk. At 374 stars this is genuinely under the radar, and it is the standard Python implementation.

Stars375
LicenceMPL-2.0
Latest2.5.0 on PyPI (2026-08-29)checked 7 Sep 2026
Written inPython
RunsLocally, on your own machine
Setup effort
3 / 5
Payoff
3 / 5
Good
  • Pure Python, MPL-2.0, drops straight into FastAPI — no third-party service, no per-notification cost, no visitor data leaving your box.
  • Works on desktop Chrome, Firefox and Edge, and on Android, which covers most of a technical audience.
  • No email address means no consent-and-deliverability chain to maintain, which for a solo founder is a genuine saving.
Watch for
  • 374 stars and effectively one maintainer, who says so plainly in the README. Read the source, vendor it, and do not build a business-critical channel on it without a fallback.
  • iOS Safari only supports push for sites installed to the home screen, which removes a large slice of your reachable audience before you start.
  • A permission prompt fired on page load is a bounce; an over-used channel is an unsubscribe you cannot win back. This one is easy to do badly.
How to get it

Subscriptions live in a Postgres table beside your users; the service worker ships with the Astro content site rather than the React SPA; sending fans out through a Procrastinate (Ed.5 #10) job so a slow push service never blocks a request.

10.5k stars · GPL-3.0 · 7.2.0 (2026-09-02)

The category ten editions have skipped: what happens on its own, after someone gives you their address.

Repo detailsthe review · specs · pros & cons · install

What it is

A full open-source marketing automation platform: contacts, segments, lead scoring, landing pages, forms, and multi-step campaigns with real branching — opened but did not click, wait three days, send the other version. The self-hosted equivalent of the marketing half of HubSpot.

Why it matters

Listmonk (Ed.2 #1) broadcasts to a list. Twenty (Ed.9 #1) records who people are. Nothing in the ledger acts when a person behaves a certain way, and for a solo founder that gap is expensive: it is the difference between a list and a funnel. The realistic use here is small and specific — one five-email onboarding sequence in English and the same one in Russian, triggered on signup, whose only job is getting a new user to their first finished Grasppy map. That is precisely the moment OpenReplay (Ed.9 #3) will show you people never reach. Automation is how you attend to it while asleep.

Stars10.5k
LicenceGPL-3.0
Latest7.2.0 (2026-09-02)checked 7 Sep 2026
Written inPHP
RunsSelf-hosted on your own server
Setup effort
4 / 5
Payoff
4 / 5
Good
  • GPL-3.0, self-hosted, with no seat limits and no per-contact pricing — the entire economic reason to run it rather than rent it.
  • Genuinely mature and actively released: 7.2.0 landed on 2 September, on a roughly two-to-three-week cadence.
  • Owns both the sequence and the landing page it points at, so a campaign is one system rather than three glued together.
Watch for
  • The heaviest install on this page: PHP/Symfony with cron jobs it genuinely depends on, and it wants MySQL or MariaDB — a second database engine beside your Postgres, with its own backup story in restic (Ed.8 #11).
  • It overlaps Listmonk directly. Running both means two subscriber lists drifting apart — pick one and delete the other.
  • The interface is from an older era of enterprise software and will cost you a confused afternoon before it costs you nothing.
How to get it

Docker on the VPS with its own MariaDB; a FastAPI webhook creates the contact on signup; contact events push into Twenty through n8n (Ed.1 #6).

34.3k stars · MIT, except the ee/ directories which are commercially licensed · v4.30.0 (2026-09-04)

LiteLLM meters what the AI costs. This one tells you whether it was any good.

Repo detailsthe review · specs · pros & cons · install

What it is

An LLM engineering platform. It traces every model call inside a request, stores prompts as versioned artefacts outside your code, runs evaluations over saved datasets, and gives you a UI to compare outputs across prompt and model versions side by side.

Why it matters

All of Grasppy's value sits in the quality of one output: the subtopic map. Today the only way you know whether a prompt change improved it is to open one conversation and have a feeling. Langfuse converts that into twenty real conversations saved as a dataset, a score per run, and a visible diff between prompt v3 and prompt v4 — which is what makes iteration compound rather than wander. It is also the direct answer to the decision this ledger has now deferred for seven editions: BERTopic vs turftopic vs LightRAG vs GraphRAG. You cannot pick a winner without a scoreboard. This is the scoreboard.

Stars34.3k
LicenceMIT, except the ee/ directories which are commercially licensed
Latestv4.30.0 (2026-09-04)checked 7 Sep 2026
Written inTypeScript
NeedsDocker Compose, Docker and ClickHouse
RunsSelf-hosted on your own server
Setup effort
3 / 5
Payoff
5 / 5
Good
  • MIT for everything you would actually use, with a first-class LiteLLM (Ed.5 #9) integration — cost and quality land in the same trace.
  • Prompt management moves prompts out of the codebase, so tuning wording stops requiring a deploy.
  • A free hosted tier means you can evaluate the whole idea before deciding whether it deserves space on your box.
Watch for
  • Self-hosting v3 and later wants Postgres, ClickHouse, Redis and S3-compatible storage — as heavy as OpenReplay, and you should not stand both up new in the same month.
  • The ee/ directories are commercially licensed; read them before assuming the whole repository is MIT.
  • It ships close to daily. That is momentum, but self-hosters inherit the churn — pin a version.
How to get it

Python SDK decorators on the Grasppy pipeline functions, pointed at the free cloud tier first, with Instructor (Ed.5 #11) still guaranteeing the shape of what comes back.

08

pemistahl/lingua-py

💎 hidden gem

1.8k stars · Apache-2.0 · v2.2.0 (2026-03-09)

Knowing which language a paragraph is in — before you spend a model call finding out.

Repo detailsthe review · specs · pros & cons · install

What it is

A language-detection library for Python covering 75 languages, built specifically to stay accurate on short and mixed-language text, which is where most detectors collapse. No neural network and no API call — it ships statistical models and runs entirely offline, returning a confidence value rather than a bare guess.

Why it matters

A Grasppy import is a chat log, and a genuinely bilingual chat log switches language mid-thread — often mid-paragraph. Almost everything downstream depends on knowing which: which stopword list, which cluster label language, which Presidio (Ed.7 #10) recogniser set, and whether a chunk deserves a cheap model or an expensive one. Deciding that per chunk with an LLM is a recurring bill; deciding it here takes microseconds and costs nothing. It also unlocks a small honest feature you can demo: telling the user "this conversation is 62% Russian" before they have read a word of it.

Stars1.8k
LicenceApache-2.0
Latestv2.2.0 (2026-03-09)checked 7 Sep 2026
Written inPython
NeedsPython 3
RunsLocally, on your own machine
Setup effort
1 / 5
Payoff
3 / 5
Good
  • Apache-2.0 and fully offline — nothing to call, nothing to pay for, nothing that can rate-limit you mid-import.
  • Unusually strong on the short fragments that chunking produces, which is exactly the failure case for simpler detectors.
  • Returns confidence values you can threshold, so ambiguous chunks can be routed differently instead of guessed at.
Watch for
  • Loading all 75 languages costs real memory. Restrict it to English and Russian at construction time and it becomes small — but you must remember to.
  • Requires Python 3.12 or newer; check the interpreter on the VPS before planning around it.
  • Single-author project. Stable and well-tested, but a bus factor of one is still a bus factor.
Replaces

The detected language becomes a column beside each chunk in Postgres, and every later stage reads it instead of re-guessing.

Works well with

The detected language becomes a column beside each chunk in Postgres, and every later stage reads it instead of re-guessing.

How to get it

Called between Chonkie (Ed.2 #10) chunking and the model call, inside the same Procrastinate job.

09

jealous/stockstats

💎 hidden gem

1.5k stars · BSD-3-Clause · v0.6.8 (2026-02-16)

Fifty indicators as DataFrame columns, under a licence you can actually ship.

Repo detailsthe review · specs · pros & cons · install

What it is

A thin wrapper that turns a pandas DataFrame of OHLCV bars into a StockDataFrame, where asking for df['macd'] or df['rsi_14'] computes the indicator on demand. More than fifty momentum, trend, volatility and volume indicators, with no compiled dependencies to install.

Why it matters

ScalpingMate's chain in this ledger is all research machinery: tsfresh generating 700 features, Optuna searching, arch testing whether the winner is luck, SHAP explaining what it leans on. What is missing is the unglamorous layer where a human-legible indicator is computed the same way every time — in the product, for a chart a paying user looks at and recognises. This is that layer, it installs in one command, and BSD-3-Clause means it can sit inside a paid ScalpingMate screen, unlike backtesting.py (AGPL) or vectorbt (Commons Clause).

Stars1.5k
LicenceBSD-3-Clause
Latestv0.6.8 (2026-02-16)checked 7 Sep 2026
Written inPython
NeedsPython 3
RunsLocally, on your own machine
Setup effort
1 / 5
Payoff
3 / 5
Good
  • BSD-3-Clause — genuinely shippable inside a commercial feature, which is rare in this corner of the ecosystem.
  • No TA-Lib C library to compile, which removes the classic install wall on a plain VPS.
  • The column-access API is small enough that Claude Code will get it right on the first attempt.
Watch for
  • Seven months since the last release and a small maintainer team — stable rather than abandoned, but verify before it becomes load-bearing.
  • Indicators are conveniences, not edges. Computing fifty of them is not a strategy, and it is an easy way to fool yourself into feeling productive.
  • On three years of one-minute EURUSD bars, casual column access recomputes far more than you expect. Cache deliberately.
Replaces

This is that layer, it installs in one command, and BSD-3-Clause means it can sit inside a paid ScalpingMate screen, unlike backtesting.py (AGPL) or vectorbt (Commons Clause).

Works well with

Sits directly beside the existing pandas loading in ScalpingMate.

How to get it

Sits directly beside the existing pandas loading in ScalpingMate.

33.7k stars · Apache-2.0 · 0.60.3 (2026-09-04)

A watcher on every competitor's pricing page, so you find out the day it changes rather than the quarter.

Repo detailsthe review · specs · pros & cons · install

What it is

A self-hosted website change monitor. You give it URLs, optionally point at one element on the page with a visual selector, and it notifies you — email, Telegram, Discord, ntfy or a webhook — the moment that content changes, with a diff of what moved.

Why it matters

RSSHub (Ed.4 #7) watches things that publish feeds. PRAW (Ed.7 #6) searches what has already been said. Neither notices that a competitor quietly changed their pricing, added a row to a comparison table, or started using the exact phrase you were about to build a page around. In a small market that is the highest-value signal there is, and nobody announces it. Three competitor pricing pages and two documentation homepages is a twenty-minute setup and a permanent early-warning system — and every diff it catches is a post you are first to write.

Stars33.7k
LicenceApache-2.0
Latest0.60.3 (2026-09-04)checked 7 Sep 2026
Written inPython
NeedsDocker Compose and Docker
RunsIn the browser, as an extension
Setup effort
2 / 5
Payoff
4 / 5
Good
  • Apache-2.0 and shipping constantly — 0.60.3 landed today, which is about as live as verification gets.
  • The visual element selector means you watch the price, not the cookie banner or the rotating testimonial.
  • Notifies into ntfy (Ed.7 #4), Telegram or n8n — all things you have already been handed.
Watch for
  • Watching JavaScript-heavy pages needs the browser-rendering mode and a headless Chrome sidecar — real RAM on a box already carrying a lot.
  • Watch too many pages and it becomes noise, and a noisy alert channel gets muted, which is worse than no alerts.
  • The project also sells a hosted tier, so check which conveniences assume it before designing around them.
Works well with

RSSHub (Ed.4 #7) watches things that publish feeds.

How to get it

Docker container on the VPS.

41.1k stars · MIT · v1.5.5 (2026-07-22)

SQL over three years of EURUSD bars in a file, with no server and no import step.

Repo detailsthe review · specs · pros & cons · install

What it is

An in-process analytical database — SQLite's shape, but built for scanning and aggregating columns rather than fetching individual rows. It queries CSV, Parquet and pandas DataFrames directly inside your Python process, with no server, no daemon and no loading step.

Why it matters

Two of your slow problems are the same problem. ScalpingMate has three years of EURUSD bars that pandas re-reads and re-filters on every experiment, and research.db is steadily accumulating yt-dlp metadata, comments, transcripts and Reddit pulls that SQLite will eventually be slow to aggregate. DuckDB answers both: SELECT ... FROM 'eurusd_*.parquet' returns in about a second on data larger than your RAM, and it will attach and query your existing SQLite file in place without a migration. The practical effect is that you stop waiting on your own data, which is what determines how many experiments you are actually willing to run.

Stars41.1k
LicenceMIT
Latestv1.5.5 (2026-07-22)checked 7 Sep 2026
Written inC++
Setup effort
1 / 5
Payoff
4 / 5
Good
  • MIT, one pip install, no server and no daemon — nothing new to back up beyond files you already have.
  • Reads Parquet and CSV directly, so there is no ETL ceremony between having data and asking it a question.
  • Attaches SQLite and Postgres, so it sits beside your stack rather than asking to replace any of it.
Watch for
  • It is an analytical engine, not a replacement for the Postgres behind Grasppy — concurrent writes are explicitly not its job.
  • Storage-format stability has improved but still moves between majors; pin the version and keep the source files.
  • One more SQL dialect's small differences to learn, which mostly bite in date handling.
How to get it

Inside the ScalpingMate research notebook ( marimo , Ed.6 #12) and behind an Evidence (Ed.8 #6) dashboard.

89.6k stars · Apache-2.0 · 0.12.10 (2026-09-04)

The end of `source venv/bin/activate` — and of the Sunday afternoon lost to a broken environment.

Repo detailsthe review · specs · pros & cons · install

What it is

A single Rust binary that replaces pip, venv, pip-tools and pyenv at once. It creates environments, installs packages 10–100× faster, produces a reproducible lock file, and will install Python itself if the machine does not have the right version.

Why it matters

Nearly every Python recommendation across ten editions — Docling, BERTopic, whisperX, tsfresh, Presidio, Marker, and three items on this page — arrives with a dependency tangle attached. For someone who builds through Claude Code rather than through years of Python habits, a broken environment is the specific failure that kills adoption of an otherwise excellent tool: the install fails, the afternoon goes, and the tool never gets a second try. uv run script.py builds and uses the right environment with no activation step at all, and uv run --with textstat --with trafilatura script.py lets you try something from this page without installing anything permanently. That one command is why more of this ledger will get tested instead of bookmarked.

Stars89.6k
LicenceApache-2.0
Latest0.12.10 (2026-09-04)checked 7 Sep 2026
Written inRust
NeedsPython 3
RunsLocally, on your own machine
Setup effort
1 / 5
Payoff
4 / 5
Good
  • One binary with no bootstrap Python required, so it works on a fresh VPS and on the Mac identically.
  • Genuinely 10–100× faster than pip, which changes what you are willing to try on a whim.
  • uv run --with makes throwaway experiments safe — nothing permanent is installed, nothing to clean up.
Watch for
  • Not a cure for packages that need compilers or CUDA — whisperX and Marker will still fight you on a CPU-only box.
  • Every tutorial you read will say pip install, so you will be translating instructions in your head for a while.
  • Still 0.x and moving quickly; behaviour occasionally shifts between minor versions.
Replaces

That one command is why more of this ledger will get tested instead of bookmarked.

Install
pip install

Checked, and left out

These were opened for this edition and did not make it, with the reason.

LinkStackOrg/LinkStack

LinkStackOrg/LinkStack (3.8k, AGPL-3.0) — self-hosted link-in-bio; verified alive but v4.8.6 was 2026-01-26, seven months quiet, and it is another PHP service to maintain. Shlink covers the measurable half of the job with a far better cadence. Backlogged.

crate-ci/typos

crate-ci/typos (4.0k, MIT/Apache-2.0, v1.48.0 2026-06-30) — verified healthy and good. Dropped as redundant: Vale and LanguageTool already cover customer-facing spelling, and three prose checkers means none gets run. Backlogged.

amperser/proselint

amperser/proselint (4.5k, BSD-3-Clause) — v0.16.0 on 2025-11-14, ten months quiet. Vale does the same job on a two-week cadence. Backlogged.

get-alex/alex

get-alex/alex (5.1k, MIT) — no release date readable from the GitHub page and npm returns 403 from this sandbox, so recency could not be proven. Backlogged; re-check from the Mac.

discourse/discourse

discourse/discourse (47.2k, GPL-2.0) — verified alive and dropped for the same reason apache/answer was on 2026-08-30: a forum with four posts signals the opposite of what he wants. Backlogged until there is steady traffic.

Share this edition
← PreviousNo. 9Next →No. 11

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.