Edition No. 10 · 4 Sep 2026
The words themselves

Grammar and style checkers, readability scores, short links that count, browser notifications, and the tools that watch what happens next.
Refreshed on 12 October 2026. The repositories are the ones first published; any that are no longer maintained are left out.
4 September 2026. Twelve open-source repositories. This edition groups around written text: checking it, measuring it, and following what happens after somebody has read it. Every repository was opened and checked again on 12 October 2026, and all twelve are still maintained.
We aim for twelve every day. Some candidates fall out while we check them — those are listed at the end, with the reason.
Three things worth knowing, separate from the recommendations
- A repository name is not a stable address. errata-ai/vale now answers as vale-cli/vale. Old links still resolve, because GitHub redirects them, but the project's name has changed and so has the address in a configuration file written from it. Its default branch is v3 rather than main, which trips up anybody cloning a single branch by habit. - A project with no releases is not a quiet project. languagetool-org/languagetool publishes no GitHub releases at all, yet its newest code landed on 12 October 2026. The version number lives in a changelog file inside the repository, where 6.8 is dated 5 May 2026 and 6.9 is marked unreleased. Judging that project by its releases page would have called it dead; judging it by its code says the opposite. - A release date with no year is not a date. GitHub prints "21 Sep" and "28 Sep" without a year on release pages, for old releases as well as new ones. Every date in this refresh that mattered was settled against a second source: the package index for the Python projects, and a mirror of GitHub's own data, which carries full timestamps, for the rest.
If you only do three things
- astral-sh/uv (#12) — twenty minutes, and it makes the next two easier. It installs Python packages and builds the folder they live in, and it does both far faster than the older tools. The command
uv run --with textstat script.pytries a tool from this page without installing anything permanently. - shlinkio/shlink (#4) — an hour, once a short domain name points at the machine. It serves short links from a domain you control and counts every visit to each one. That turns "we published something" into a number.
- languagetool-org/languagetool (#1) — an afternoon. It checks spelling, grammar and style in more than twenty-five languages, and it runs on a machine you control, so unreleased text never leaves it. ---
Every link in one place
| # | Repository | What it is | Stars | Licence | Project site |
|---|---|---|---|---|---|
| 1 | languagetool-org/languagetool | Spelling, grammar and style in many languages | 15,125 | LGPL-2.1 | languagetool.org |
| 2 | vale-cli/vale | Checks prose against a style guide | 6,170 | MIT | vale.sh |
| 3 | textstat/textstat 💎 | Scores how hard a piece of text is to read | 1,379 | MIT | textstat.org |
| 4 | shlinkio/shlink | A URL shortener you run yourself | 5,219 | MIT | shlink.io |
| 5 | web-push-libs/pywebpush 💎 | Sends browser notifications from Python | 378 | MPL-2.0 | none listed |
| 6 | mautic/mautic | Marketing campaigns that run on their own | 10,697 | GPL-3.0 | mautic.org |
| 7 | langfuse/langfuse | Records and scores what a language model did | 35,702 | MIT, except ee/ | langfuse.com |
| 8 | pemistahl/lingua-py 💎 | Works out which language a text is in | 1,809 | Apache-2.0 | none listed |
| 9 | jealous/stockstats 💎 | Trading indicators as table columns | 1,523 | BSD-3-Clause | none listed |
| 10 | dgtlmoon/changedetection.io | Tells you when a web page changes | 34,919 | Apache-2.0 | changedetection.io |
| 11 | duckdb/duckdb | SQL over files, with no server to run | 40,764 | MIT | duckdb.org |
| 12 | astral-sh/uv | Python packaging and environments, fast | 90,625 | MIT / Apache-2.0 | docs.astral.sh/uv |
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) · Track this in Scout · Share this tool
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 does
It reads a block of text and returns a list of findings. Each finding carries the position in the text, a short message, and one or more suggested replacements. The README names English, Spanish, French, German, Portuguese, Polish and Dutch, and says more than twenty other languages are covered too. There are three ways to use it: a desktop program, a browser add-on, and an HTTP server you run yourself. The server is the one that matters for anything automated, because any program can send text to it and read the findings back. Rules are written as XML files, so a house rule can be added without writing Java code. What it does not do is rewrite text on its own. It reports findings and offers replacements, and a person still chooses. It also publishes no releases on GitHub at all: the version number lives in a changelog file inside the repository, where 6.8 is dated 5 May 2026 and 6.9 is still marked unreleased.
Why it matters
Who it suits. Anyone publishing text in more than one language who cannot have a native reader check every page. It also suits anyone whose draft copy must not be pasted into a website run by someone else, because the whole thing runs locally. The breadth of languages is the reason to choose this one over a plain spell checker. Skip it if a commercial checker is already in place and only one language is involved.
Verdict. Worth an afternoon when the text matters and more than one language is in play. Two things to know first. It needs a Java runtime, and it behaves like a service rather than a single file you drop into place, so somebody has to run it and watch it. And the licence is LGPL-2.1, which is comfortable when the checker runs as a separate service and is worth reading closely before linking it into a program you distribute. If the goal is only spelling inside code and documentation, crate-ci/typos is much smaller at 4,200 stars. For house style rather than grammar, entry 2 on this page is the better tool, and the two are often run side by side.
- More than twenty-five languages, with grammar rules rather than only a word list.
- Runs as a service you control, so nothing is sent to a third party.
- Rules are plain XML files, so a local rule needs no Java.
- It needs Java installed, and it has to be run and kept running like any other service.
- It publishes no GitHub releases, so the current version has to be read out of a changelog file.
- No memory or processor figures are published anywhere, so a machine cannot be sized from the documentation.
git clone --depth 5 https://github.com/languagetool-org/languagetool.git cd languagetool ./build.sh languagetool-standalone package -DskipTests

6.1k stars · MIT · v3.20.0 (2026-09-02) · Track this in Scout · Share this tool
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 does
You point it at files and it reports style problems. It understands markup, so its rules skip code spans, links and fenced blocks instead of complaining about them. Markdown, AsciiDoc, reStructuredText and HTML are all supported, and the documentation lists more. It also pulls comments and docstrings out of source files and checks those as prose. Styles come from published packages — Microsoft's and Google's among them — which you name in a configuration file and download with vale sync. Custom rules are short YAML files, which is how a banned word or a required spelling becomes enforceable. What it does not do is bring opinions of its own: the README says plainly that it "doesn't ship opinions of its own", so with no style configured it reports almost nothing.
Why it matters
Who it suits. Teams and individuals producing documentation, release notes and web copy over a long period, who want one vocabulary rather than an average of everyone's habits. It suits writing that a machine will later quote, because consistent terms are what a reader or a search tool sees first. Skip it if the text is short, occasional, and written by one person in one sitting; the setup would cost more than the drift.
Verdict. Worth two hours, and the honest warning is that the second hour is tuning. Off-the-shelf styles produce false reports on technical writing until adjusted, and a checker that cries wolf gets switched off, which is worse than not having one. Once a small set of local rules exists, this is the cheapest way to keep one voice across hundreds of pages. Note the repository moved: errata-ai/vale now redirects to vale-cli/vale, and its default branch is v3 rather than main. For grammar rather than style, entry 1 on this page is the complement, and the two are commonly run together.
- MIT licensed, a single binary, and no runtime to install alongside it.
- Understands markup, so code and links are skipped rather than flagged.
- Twenty lines of YAML turn a house glossary into something a machine enforces.
- It ships almost no rules, so there are no useful results until a style is chosen and downloaded.
- Published styles report false problems on technical prose until they are tuned.
- The repository has changed owner names once already, which is worth watching on a tool a workflow depends on.
brew install vale vale sync vale docs/

1.4k stars · MIT · 0.7.13 (2026-02-18) · Track this in Scout · Share this tool
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 does
You hand it a string and ask for a score. It implements Flesch Reading Ease, Flesch-Kincaid Grade, Gunning Fog, the SMOG index, the Automated Readability Index, the Coleman-Liau index, Linsear Write, Dale-Chall, Spache and McAlpine EFLAW, plus a combined score called text_standard. It also estimates reading time. Several formulas have variants for languages other than its default, and there are formulas written specifically for Spanish, Arabic, Italian and German text. There are no models to download and no network call. What it does not do is judge whether writing is clear. The formulas count syllables and sentence lengths, so a precise, well-written technical paragraph can legitimately score as difficult. The number is a reason to read a page again, not a target to chase.
Why it matters
Who it suits. Anyone publishing pages who wants one cheap number per page, computed on every build, so a trend is visible instead of an argument about one paragraph. It also suits anyone writing a script to be read aloud, where sentence length costs the listener directly. Skip it if the writing is for specialists who expect dense prose; the score will tell you what you already intended.
Verdict. The lowest-effort item on this page and a reasonable one to try first. Two honest limits. The formulas were built for English and the variants for other languages are less tested, so treat those scores as relative rather than absolute. And the project moves slowly: version 0.7.13 was released on 18 February 2026, which is also the date of its newest code change, so eight months have passed with nothing new. That is fine for a scoring script and worth knowing before it becomes load-bearing. cdimascio/py-readability-metrics is the smaller alternative at 407 stars and covers fewer formulas.
- One
pip install, no models and no downloads, and results in milliseconds. - More than a dozen formulas, plus a combined score and a reading-time estimate.
- MIT licensed and tiny, so it can sit inside a program as a per-document statistic.
- A readability score counts syllables, not clarity, so it can be wrong about good writing.
- Formulas outside its default are thinner and less validated.
- One release and one code change in the past year, both on 18 February 2026.
python3 -m venv venv source venv/bin/activate pip install textstat

5.3k stars · MIT · v5.1.6 (2026-09-06) · Track this in Scout · Share this tool
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 does
It serves short links from a domain you control. Every visit is recorded, so each link has its own count. There are two ways to drive it. The REST API — a web interface that other programs call — is fully documented and has a sandbox listing every endpoint. The command line is run as bin/cli, and every command accepts --help. The two cover mostly the same operations, with one exception: API keys can only be created from the command line, or by setting an environment variable at first start. It works with MySQL, MariaDB, PostgreSQL, Microsoft SQL and SQLite. What it does not do is run on an old PHP installation: the README requires PHP 8.4 or 8.5, plus the json, curl, pdo, intl, gd and either gmp or bcmath extensions.
Why it matters
Who it suits. Anyone publishing links in places that report nothing back — video descriptions, printed material, slides, a podcast note — who wants to know which of them worked. It also suits anyone who would rather not hand visit data to a third-party shortening service. Skip it if every link already lands on a page with its own analytics and the source is already recorded; this adds a count you can then compare.
Verdict. The least risky attribution tool of its kind: MIT licensed, mature at version 5.x, and releasing steadily, with 5.1.7 on 21 September 2026 after 5.1.6 on 6 September. Three practical notes. It is a PHP and Symfony application, which is a separate upgrade job from everything else on a machine. The administration interface is a second project you also host, because the core is API and command line only. And a short domain needs its own DNS and TLS certificate, and it needs guarding, because an open shortener gets abused and then blocked, which would take every published link down at once. dubinc/dub at 24,864 stars is the larger alternative with a much bigger application to host.
- MIT licensed and mature, with releases every few weeks.
- A documented web API, so links can be created by a script rather than by hand.
- Works with five different databases, including SQLite for a small install.
- PHP 8.4 or 8.5 and six extensions, which is a stack many teams do not otherwise run.
- The administration interface is a separate project to host; the core has no web interface.
- A short domain needs its own DNS and certificate, and an unguarded shortener attracts abuse.
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.
docker run \ --name my_shlink \ -p 8080:8080 \ -e DEFAULT_DOMAIN=s.example.com \ -e IS_HTTPS_ENABLED=true \ -e GEOLITE_LICENSE_KEY=your_geolite_key \ shlinkio/shlink:stable

375 stars · MPL-2.0 · 2.5.0 on PyPI (2026-08-29) · Track this in Scout · Share this tool
A way to reach a returning visitor who never gave you an email address.
▶Repo detailsthe review · specs · pros & cons · install
What it does
The main call is webpush(). You give it the subscription record a browser produced, the message, and a signing key. It encrypts the message, adds the authentication headers the push service expects, and posts it to the address in the subscription. Those headers follow the VAPID scheme, which is how a push service knows which site a message came from. The library fills in sensible defaults: if the audience claim is missing it is taken from the subscription address, and if the expiry is missing or already past it is set to twelve hours ahead. Windows push needs an extra header, which the README documents and warns is non-standard. What it does not do is cover the browser side. The permission prompt, the service worker and the display of the notification are all code you write yourself. One content encoding, aesgcm, is marked deprecated, and the README says some browsers can no longer decrypt it.
Why it matters
Who it suits. Anyone running a site whose readers come back for new material, who would like a way to tell them without asking for an email address first. A push subscription costs the reader one click and no personal details. It also avoids the whole business of sending domains and mail authentication, because nothing is being emailed. Skip it if the audience is mostly on iPhones: Apple only delivers web push to sites the reader has added to the home screen.
Verdict. The standard Python implementation, and genuinely small: 378 stars and one maintainer, which the package page states plainly while also marking it a critical project. That combination is the thing to weigh. Read the source, pin the version, and keep a second way to reach people. Also note one inconsistency: the README still points at the project's old address while the repository now lives under web-push-libs. Version 2.5.0 was published on 29 August 2026 and code landed on 1 September, so it is maintained rather than dormant. The sister project web-push-libs/web-push does the same job for Node.js at 3,532 stars.
- Pure Python, MPL-2.0, no third-party service, and no cost per notification.
- Sensible defaults for the signing claims, so the common case is a few lines.
- No email address means no sending domain and no mail authentication to maintain.
- 378 stars and a single maintainer, stated on the package page itself.
- Apple only delivers web push to sites installed to the home screen, which removes part of any audience.
- A badly timed permission prompt loses the reader immediately, and this makes it easy to ask too early.
python3 -m venv venv source venv/bin/activate pip install pywebpush

10.5k stars · GPL-3.0 · 7.2.0 (2026-09-02) · Track this in Scout · Share this tool
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 does
It stores contacts and sorts them into segments by what they are and what they have done. It builds landing pages and forms, so the page a campaign points at lives in the same system as the campaign. It scores leads, raising a number as somebody opens, clicks and visits. The part that earns the name is the campaign builder: multi-step sequences with real branching, where the next step depends on what the person did. It is self-hosted, meaning it runs on hardware you choose rather than as a service you rent, so there are no seat limits and no price per contact. What it does not do is tell you what it needs: the README lists no requirements at all and links to a separate page for them, and it warns that installing from the repository is for people comfortable on the command line.
Why it matters
Who it suits. Anyone who already has a list and wants a planned sequence rather than one broadcast at a time — a short onboarding series, a lapsed-reader series, a follow-up after a form is filled in. It suits a small team most, because the economics of a rented platform turn on the number of contacts and this has none. Skip it if a simple newsletter sender is doing the job; this is a considerably larger thing to operate.
Verdict. Genuinely mature and actively released: 7.2.1 arrived on 23 September 2026, three weeks after 7.2.0 on 2 September, and code landed on 3 October. The weight is the real cost. It is a PHP and Symfony application that depends on scheduled jobs actually running, and it needs its own database, which may well be a second database engine beside an existing one, with its own backups. It also overlaps a plain newsletter sender almost completely, so running both means two lists drifting apart; pick one. knadh/listmonk at 23,753 stars is the much lighter choice when broadcasting is all that is needed. The licence is GPL-3.0, which matters if any of it is to be embedded in something distributed.
- Self-hosted with no seat limits and no price per contact, which is the whole economic case.
- Actively released, with a new version roughly every few weeks.
- Owns both the campaign and the landing page it points at, so one system instead of three.
- The README publishes no requirements and no versions; both are on a page it links to.
- It depends on scheduled jobs running reliably, which is a second thing to watch.
- The interface comes from an older era of business software and costs a confused afternoon before it costs nothing.
git clone https://github.com/mautic/mautic.git cd mautic composer install

34.3k stars · MIT, except the ee/ directories which are commercially licensed · v4.30.0 (2026-09-04) · Track this in Scout · Share this tool
LiteLLM meters what the AI costs. This one tells you whether it was any good.
▶Repo detailsthe review · specs · pros & cons · install
What it does
It records a trace for every request: which model calls happened, in what order, with what inputs and outputs. Prompts are stored and versioned outside the code, so changing wording does not mean shipping new code. Evaluations run over saved datasets, and can be scored by another model acting as a judge, by code you write, by a user's feedback, or by hand. A playground lets you try a prompt and a model setting before committing to it. There is a full API with a published specification, plus software kits for Python and JavaScript. Self-hosting comes in four shapes: Docker Compose locally, Docker Compose on one machine, Kubernetes with Helm, which the project calls its preferred route for production, and Terraform templates for three large cloud providers. What it does not do is run your model calls. It watches and records them, so something else is still making them.
Why it matters
Who it suits. Teams whose product quality is mostly the quality of one model's output, and who are currently changing prompts on instinct. It suits anyone deciding between two approaches, because a decision like that needs a score, and this is the thing that produces one. Skip it while the model is a small side feature; the install is too large to justify for that.
Verdict. The clear leader in its category by attention, and a real platform rather than a logging helper. Weigh the hosting honestly. It is built around ClickHouse, a separate analytical database, and the documentation adds Redis and object storage for a production install, so this is several moving parts rather than one container. It also releases almost daily, and self-hosters inherit that pace, so pin a version. One licensing detail: the repository is MIT except the ee folders, which are commercially licensed, so read those before assuming the whole thing is free to modify. There is a hosted tier, which is a sensible way to judge the idea before giving it space on a machine. Arize-ai/phoenix at 11,803 stars and comet-ml/opik at 22,440 stars are the two closest alternatives.
- Prompts live outside the code and carry versions, so wording changes without a deploy.
- Evaluations, datasets and traces are one system, so a score can be traced back to the call that earned it.
- A documented API with Python and JavaScript kits, so it fits a program rather than replacing it.
- A production install wants several separate services, which is a real operational cost.
- Releases land almost daily, so an unpinned self-host changes under you.
- The
eefolders are not under the main licence, which is easy to miss.
git clone --depth=1 https://github.com/langfuse/langfuse.git cd langfuse docker compose up

1.8k stars · Apache-2.0 · v2.2.0 (2026-03-09) · Track this in Scout · Share this tool
Knowing which language a paragraph is in — before you spend a model call finding out.
▶Repo detailsthe review · specs · pros & cons · install
What it does
A detector is created first, optionally restricted to the languages that matter, and then asked about a piece of text. It returns the most likely language, and a separate call returns a confidence value between zero and one for every candidate, with the values adding up to one. It was built for short and mixed-language text, which is where simpler detectors fail. The models are stored as finite-state transducers, a compact way of holding a large word list, which is why the memory cost is a few dozen megabytes rather than hundreds. Everything runs offline once installed. There is also a low-accuracy mode that loads only a small subset of each model; the README states that it reduces accuracy for texts under 120 characters. What it does not do is translate anything, and it needs a recent interpreter: Python 3.12 or later.
Why it matters
Who it suits. Anyone importing text written by many people, where the language is not recorded and almost everything downstream depends on knowing it — which word list to use, which rules to apply, which model to send a piece to. It also suits anyone who wants to show a reader a fact about their own material, such as how much of a document is in each language. Skip it if every piece of text already carries a language tag you trust.
Verdict. Worth twenty minutes, and it replaces a recurring cost with a free one: deciding the language with a model call is a bill that never stops, while deciding it here takes microseconds. Two things to remember. Loading all seventy-five languages costs real memory, so restrict the list when the detector is built. And this is a single-author project, stable and well tested, but with one person behind it. Version 2.2.0 was published on 9 March 2026 and code landed on 20 July 2026, so it is maintained and unhurried. The same author's Rust version, pemistahl/lingua-rs, is at 1,144 stars with code on 5 October 2026.
- Apache-2.0 and fully offline, so nothing can rate-limit it or charge for it.
- Unusually accurate on short fragments, which is the normal failure case elsewhere.
- Returns confidence values you can threshold, so an ambiguous piece can be routed differently.
- Loading all seventy-five languages costs real memory unless the list is restricted.
- Requires Python 3.12 or later, which rules out older installations.
- One author, so stability today is not the same as cover tomorrow.
The detected language becomes a column beside each chunk in Postgres, and every later stage reads it instead of re-guessing.
The detected language becomes a column beside each chunk in Postgres, and every later stage reads it instead of re-guessing.
python3 -m venv venv source venv/bin/activate pip install lingua-language-detector

1.5k stars · BSD-3-Clause · v0.6.8 (2026-02-16) · Track this in Scout · Share this tool
Fifty indicators as DataFrame columns, under a licence you can actually ship.
▶Repo detailsthe review · specs · pros & cons · install
What it does
You wrap a table of open, high, low, close and volume values, either with wrap or with StockDataFrame.retype. After that, asking for a column computes the indicator behind it on first access and keeps the result. The naming is the whole interface: df['rsi'] and df['close_20_sma'] do what their names say. The summary table in the README documents forty-six indicators across momentum, trend, volatility and volume, plus a set of utilities for shifts, differences and comparisons. Deleting a column forces it to be recalculated. There are no compiled dependencies, so there is no C library to build first. What it does not do is behave per table: the configurable parameters are class-level and global, so changing one does not affect results already computed, and existing columns have to be deleted to re-evaluate them. The README also warns that init_all() generates a great many columns and should be used with caution.
Why it matters
Who it suits. Anyone computing a human-recognisable indicator the same way every time, especially inside a product that a paying customer looks at. The licence is the specific reason: BSD-3-Clause allows it to be shipped inside a commercial feature, which several better-known libraries in this corner do not. It also suits research code, because the column naming is small enough to remember. Skip it if an indicator library is already in place and working; this is a convenience, not a new capability.
Verdict. Worth twenty minutes, and the reason to pick it over the alternatives is almost entirely the licence and the lack of a compiler step. Three cautions. Version 0.6.8 was released on 16 February 2026, so eight months have passed without a release, although code landed on 28 September 2026, which makes it quiet rather than finished. Indicators are conveniences and not strategies, and computing forty-six of them is an easy way to feel productive without learning anything. And on years of minute-by-minute prices, casual column access recomputes far more than you expect, so cache deliberately. TA-Lib/ta-lib-python at 12,266 stars is the established alternative and needs a C library built first; bukosabino/ta at 5,100 stars is pure Python like this one.
- BSD-3-Clause, so it can be shipped inside a commercial feature.
- No C library to compile, which removes the usual install wall on a plain machine.
- The column naming is small and predictable, so the calling code stays short.
- Configurable parameters are global rather than per table, which surprises people once.
- Eight months since the last release, with eleven issues open and a small maintainer team.
- Repeated column access on a long price history recomputes more than it looks like it does.
This is that layer, it installs in one command, and BSD-3-Clause means it can sit inside a paid product screen, unlike backtesting.py (AGPL) or vectorbt (Commons Clause).
Sits directly beside existing pandas loading code.
python3 -m venv venv source venv/bin/activate pip install stockstats

33.7k stars · Apache-2.0 · 0.60.3 (2026-09-04) · Track this in Scout · Share this tool
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 does
You add addresses to watch and choose how often each is checked. A visual selector lets a person click the part of the page that matters, so the price is watched and the cookie banner is not. When something changes you get a notification with a difference showing what moved. Notifications go to Discord, email, Slack, Telegram and webhooks, among many others, because it uses a general-purpose notification library underneath. There are two ways to fetch a page: a fast built-in fetcher for ordinary pages, and a Chrome-based fetcher for pages that build themselves with scripts. The visual selector and the multi-step browsing feature both need that browser fetcher enabled. What it does not do is scale for free: the project also sells a hosted subscription at $8.99 a month that includes a browser, proxies and support, so check which conveniences assume it.
Why it matters
Who it suits. Anyone who needs to hear about a change on a page they do not control: a competitor's pricing, a supplier's terms, a documentation homepage, a job listing, a government notice. It is at its best watching a small number of pages that matter a lot. Skip it if the pages you care about publish a feed, because reading the feed is cheaper and more reliable.
Verdict. Twenty minutes for the first few watches, and it keeps paying as long as the list stays short. Release 0.60.9 landed on 12 October 2026, the same day its newest code did, and 0.60.8 was two weeks earlier, so this is one of the most actively released projects on the page. Two warnings. Watching script-heavy pages means running a headless browser beside it, which is real memory on a machine that is already busy. And the failure here is noise: too many watches produce too many alerts, the channel gets muted, and a muted channel is worse than none. Start with five pages.
- Apache-2.0 and releasing constantly, with versions days apart.
- The visual selector watches one element, so ordinary page furniture does not trigger alerts.
- Notifies into many chat services and plain webhooks, so it fits whatever is already in use.
- Script-heavy pages need a browser-based fetcher, and that needs real memory.
- Too many watches turn into noise, and a noisy channel gets ignored.
- A paid hosted tier exists, so some conveniences are documented with it in mind.
RSSHub (Ed.4 #7) watches things that publish feeds.
docker run -d --name changedetection -p 5000:5000 \ -v changedetection-data:/datastore \ dgtlmoon/changedetection.io

41.1k stars · MIT · v1.5.5 (2026-07-22) · Track this in Scout · Share this tool
SQL over three years of price bars in a file, with no server and no import step.
▶Repo detailsthe review · specs · pros & cons · install
What it does
It answers SQL questions over data, in the same process as the program asking. It reads CSV and Parquet files directly in the FROM clause, so SELECT * FROM 'myfile.csv' works with no import step at all. The SQL it accepts is substantial: nested correlated subqueries, window functions, and complex types including arrays, structs and maps. It ships as a standalone command-line program and as clients for Python, R, Java and WebAssembly, so the same engine serves a terminal and an application. The design is column-oriented, built for scanning and aggregating rather than fetching single rows one at a time. What it does not provide is a server: it is an in-process system by its own description, so there is nothing for another machine to connect to. Its README also states no limits of any kind, listing only what is needed to build it.
Why it matters
Who it suits. Anyone who keeps asking questions of the same large files and is tired of waiting: logs, exports, price histories, measurements, anything that arrives as CSV or Parquet. It also suits a notebook user whose data has outgrown loading everything into memory first. Skip it if the data lives in an application database and the questions are part of that application; this is for analysis, not for serving a website.
Verdict. Among the highest returns per minute spent on this page, and the reason is that it removes a step rather than adding a tool. Version 1.5.6 arrived on 28 September 2026 and the Python package carries the same date, so the two agree. Two notes. It is an analytical engine, so judge it on scanning and aggregating, not on many programs writing at once. And one more SQL dialect's small differences have to be learned, which mostly bite in date handling. pola-rs/polars at 39,092 stars is the alternative if you prefer a table interface in code to writing SQL; ClickHouse/ClickHouse at 49,679 stars is the server-based answer when many people need the same data at once.
- MIT licensed, one install command, and no server or background process.
- Reads CSV and Parquet in place, so there is no import step between having data and asking it something.
- One engine with clients for several languages, plus a command-line program.
- It runs inside a process, so it is not something a second machine connects to.
- The README publishes no limits or figures at all, only build requirements.
- Another SQL dialect to learn, and the differences show up first in date handling.
python3 -m venv venv source venv/bin/activate pip install duckdb

89.6k stars · Apache-2.0 · 0.12.10 (2026-09-04) · Track this in Scout · Share this tool
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 does
It installs packages and manages the isolated folders they live in. Its README says it replaces pip, pip-tools, pipx, poetry, pyenv, twine and virtualenv, among others, and claims it installs ten to a hundred times faster than pip, with the benchmarks published in the repository. It installs Python versions and switches between them, so a project needing an older interpreter does not need a separate version manager. It runs packaged command-line tools without installing them permanently, through uvx. It writes one lock file that records exactly what a project resolved to. It supports workspaces for projects made of several packages, and single-file scripts that declare their own dependencies inline. A shared cache means a package downloaded once is not downloaded again. What it does not change is what a package needs in order to build: anything requiring a compiler still requires one.
Why it matters
Who it suits. Anyone who installs Python tools regularly and has lost time to a broken environment, and anyone who writes short scripts that need two libraries and should not need a project. It suits a new Python user most of all, because the old sequence of commands is the part that most often ends an attempt before it starts. Skip it only if an existing packaging setup is working and shared across a team that would all have to change.
Verdict. Twenty minutes, and the best-value item on this page, because it is what makes the other eleven easier to try. uv run --with textstat script.py runs a tool from this page with nothing installed permanently and nothing to clean up afterwards. Two honest caveats. It is still on a zero-point version number — 0.13.0 was published on 9 October 2026 — and behaviour occasionally shifts between minor versions, so pin it in anything that matters. And every tutorial you read will still say pip install, so you will be translating instructions in your head for a while. python-poetry/poetry at 34,290 stars is the established alternative with a different project model.
- One binary, no bootstrap interpreter required, so a fresh machine and a laptop behave the same.
- Ten to a hundred times faster than pip by its own published benchmarks, which changes what you try on a whim.
- Running a tool with
--withinstalls nothing permanently, so an experiment leaves no trace.
- Still a zero-point version, and behaviour sometimes changes between minor versions.
- Most documentation elsewhere still gives the older commands, so instructions need translating.
- It cannot remove a package's own build requirements: a compiler is still a compiler.
That one command is why more of this ledger will get tested instead of bookmarked.
curl -LsSf https://astral.sh/uv/install.sh | sh exec $SHELL uv --version
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.
Know a repository we should check?






























