Edition No. 20 · 14 Sep 2026
Twelve repositories for your database, your money and your files
Two of them have moved their development off GitHub to Codeberg, and their releases still appear here as if nothing had changed.
Twenty editions in, and today two of the twelve carry the same short note in their README: development has moved to Codeberg. gallery-dl (#10) and audiowaveform (#12) both still publish their releases on GitHub, so from the outside nothing looks different. The code and the discussion have gone somewhere else. It is worth knowing before you open an issue that nobody will read.
The rest of the day is spread wider than any edition so far: ten of the sixteen areas, from PostgreSQL query plans to plain text accounting to a picture of a sound file. Nine of the twelve are new to this ledger. Three have fewer than three thousand stars.
We aim for twelve every day. Some candidates fall out while we check them — those are listed at the end, with the reason.
If you only do three things
- FiloSottile/age (#4) — tonight, five minutes, one command to install. It locks a file so only you can open it. Every database copy you move off the server should go through it. Nothing keeps running afterwards.
- dalibo/pev2 (#2) — ten minutes, nothing to install at all. Paste your slow query's plan into a web page and it shows you which step is slow. Edition 18 gave you pgBadger, which names the slow query. This tells you why it is slow.
- OliveTin/OliveTin (#5) — this weekend, about an hour. It turns the commands you run by hand into buttons on a web page you can press from your phone. You cannot mistype a button.
Every link in one place
| # | Repository | Official site or docs | Stars | Licence | Latest |
|---|---|---|---|---|---|
| 1 | xataio/pgroll | pgroll.com | 6.5k | Apache-2.0 | v0.16.2 (12 May 2026) |
| 2 | dalibo/pev2 | explain.dalibo.com | 3.5k | PostgreSQL Licence | v1.22.0 (18 Jun 2026) |
| 3 | locustio/locust | locust.cloud | 28.1k | MIT | 2.46.5 (7 Sep 2026) |
| 4 | FiloSottile/age | age-encryption.org | 23.6k | BSD-3-Clause | v1.3.2 (29 Aug 2026) |
| 5 | OliveTin/OliveTin | olivetin.app | 3.7k | AGPL-3.0 | 3000.15.0 (19 Jun 2026) |
| 6 | sigoden/argc 💎 | repository README | 1.1k | Apache-2.0 or MIT | v1.24.0 (20 May 2026) |
| 7 | actualbudget/actual | actualbudget.org | 27.2k | MIT | v26.9.0 (1 Sep 2026) |
| 8 | simonmichael/hledger | hledger.org | 4.5k | GPL-3.0 | 1.52.1 (28 Apr 2026) |
| 9 | espocrm/espocrm | espocrm.com | 3.2k | AGPL-3.0 | 10.0.8 (8 Sep 2026) |
| 10 | mikf/gallery-dl | gdl-org.github.io/docs | 19.2k | GPL-2.0 | v1.32.12 (12 Sep 2026) |
| 11 | microlinkhq/metascraper 💎 | metascraper.js.org | 2.7k | MIT | v5.51.0 (16 Jun 2026) |
| 12 | bbc/audiowaveform 💎 | codeberg.org/chrisn/audiowaveform | 2.2k | GPL-3.0 | 1.10.3 (20 Aug 2026) |
Two of today's twelve have moved off GitHub to Codeberg
Twelve repositories, checked and reviewed. Every version verified against the GitHub API and dated.
6.5k stars · Apache-2.0 · v0.16.2 (2026-05-12), read from the About sidebar on the repository page · Track this in Scout
Applies PostgreSQL schema changes as two-phase migrations, so old and new versions of your code both keep working while the change is in progress and one command undoes it.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A command-line program that applies PostgreSQL schema changes as two-phase migrations, so old and new versions of your code can both read the database while the change is in progress. You start a change, deploy your new code, and then either complete the change or roll it back with a single command.What it is good for. Anyone with one database sitting behind a live application, which is almost every solo builder. The problem it removes is not really downtime — it is fear. A schema change you can undo in one second is a change you will actually make, and a change you cannot undo is one you put off for months. For Grasppy, whose data lives in PostgreSQL on a single Hetzner server, this is the difference between shipping a new field this week and shipping it when you feel brave.
- One command undoes a change, so you never write a reverse migration by hand.
- Old code and new code both keep working during the change, so you deploy when you like.
- It is one program that runs and exits. There is no service to keep alive.
- PostgreSQL only. If you use MySQL or SQLite it is of no use to you.
- You describe the change in the tool's own format, written in JSON, rather than in plain SQL. That is a new thing to learn.
- The version number is 0.16.2, so the project is still before 1.0 and the format can change between releases. Pin the version you use.
- ariga/atlas
Also manages database schema changes as files you keep in git, but you write the shape you want and it works out the steps, where pgroll asks you to write the steps yourself.
Track this in Scout - golang-migrate/migrate
The same job of applying numbered changes in order, across many database types, but with no two-phase trick, so a long change still locks the table.
Track this in Scout - amacneil/dbmate
A smaller tool for the same job, plain SQL files and one binary, and a good choice if you do not need zero downtime.
Track this in Scout
# The easiest route if Go is already on the machine: go install github.com/xataio/pgroll@latest # Otherwise download the Linux build from the releases page: # https://github.com/xataio/pgroll/releases/latest # then make it runnable and put it on your path: chmod +x ./pgroll sudo mv ./pgroll /usr/local/bin/pgroll pgroll --version # Prepare the database once (it adds its own bookkeeping tables): pgroll init --postgres-url "postgres://user:password@localhost:5432/yourdb" # Then start a change, and complete it when your new code is live: pgroll start migrations/01_add_column.json pgroll complete
3.5k stars · PostgreSQL Licence · v1.22.0 (2026-06-18), read from the About sidebar on the repository page · Track this in Scout
Draws a PostgreSQL query plan as a tree with timings and row counts, and marks the step that is actually costing you the time.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A viewer for PostgreSQL query plans that runs in a browser. You paste the output of EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) and it draws the plan as a tree with the time, the row counts and the worst step marked.What it is good for. Anyone whose app has one page that is slower than the rest. Edition 18 gave you pgBadger (#6), which reads your database's log file and names your slowest queries in order. That answers which. This answers why, and the two together are the whole job. For Grasppy, whose map screen does real work for every request, this is the first place to look when the map takes four seconds instead of one.
- There is nothing to install. The page at explain.dalibo.com works today, on a phone.
- It marks the steps where the database guessed the number of rows badly, and that guess is usually the real fault.
- You can run your own copy, so a query plan from a private database never has to leave your machine.
- PostgreSQL only.
- Using the hosted page means pasting your query text onto somebody else's website. For anything sensitive, run your own copy instead.
- It explains the problem and does not fix it. You still have to add the index or rewrite the query yourself.
- ankane/pghero
A performance dashboard for the whole database rather than one query, showing slow queries, unused indexes and index suggestions, so it finds problems where pev2 explains one.
Track this in Scout - AlexTatiyants/pev
The original Postgres Explain Visualizer, which pev2 was rewritten from by Dalibo; still available and still simpler, with fewer measurements shown.
Track this in Scout
darold/pgbadgerSolves the other half: it reads PostgreSQL's log file and reports your slowest queries across a whole day, rather than explaining any single one.
Track this in Scout
# Nothing to install for the normal route. First get the plan, in psql: # # EXPLAIN (ANALYZE, BUFFERS, VERBOSE, FORMAT JSON) SELECT ... ; # # Copy the whole result, then open https://explain.dalibo.com and paste it. # For a private plan, take the standalone page from the releases list at # https://github.com/dalibo/pev2/releases/latest # It is a single HTML file. Save it and open it with your browser — no # server and no internet connection needed.
28.1k stars · MIT · 2.46.5 (2026-09-07), read from /releases/latest; the bare date '07 Sep' is in the past, so it is 2026 · Track this in Scout
Starts many simulated visitors from a short Python file and shows response times, throughput and failures on a live web page while the test runs.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A load-testing tool in which the test itself is ordinary Python code. It starts many simulated visitors, each following the steps you wrote, and shows response times, requests per second and failures in a live web page while the test runs.What it is good for. Any solo builder who is about to be written about, posted, or launched. One mention on a busy site is fifty people in a minute, and the first thing you learn should not be that the server fell over. Nineteen editions of this radar have handed over tools to build, measure and monitor, and not one has asked whether the thing holds up. Grasppy's map screen does real work per request, which makes it exactly the kind of page that is fine for one person and slow for twenty.
- The test is Python, so you write it the way you write everything else and keep it in git beside the code.
- A live web page shows the numbers as the test runs, so you can stop the moment you learn something.
- MIT licence, and there is no service to keep running between tests.
- You have to describe what a visitor does. A lazy description gives you a comforting answer that is wrong.
- Running the test from your own laptop measures your home internet as much as your server. Run it from a second cheap server for a real number.
- It does not run a browser, so the JavaScript on your page is never measured. This tests your server, not the page a person sees.
- grafana/k6
The same job with tests written in JavaScript instead of Python, faster per machine, but licensed AGPL-3.0, which matters if you ever ship it inside something.
Track this in Scout - tsenart/vegeta
Hits one address at a fixed rate from the command line, which is far simpler and gives no way to describe a visitor's journey.
Track this in Scout - hatoo/oha
The same one-address speed test with a live picture in your terminal, pleasant for a quick check and not meant for a scripted journey.
Track this in Scout
# Python 3.10 or newer
python3 -m venv venv
source venv/bin/activate
pip install locust
# Write a file called locustfile.py, for example:
cat > locustfile.py <<'EOF'
from locust import HttpUser, task, between
class Visitor(HttpUser):
wait_time = between(1, 3)
@task
def home(self):
self.client.get("/")
EOF
locust -f locustfile.py --host https://example.com
# then open http://localhost:8089 and choose how many visitors23.6k stars · BSD-3-Clause · v1.3.2 (2026-08-29), read from /releases/latest; the bare date '29 Aug' is in the past, so it is 2026 · Track this in Scout
Locks one file with a single command using short text keys, and unlocks it with another, with no key ring and almost no options.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A file encryption tool with one job and almost no options. It uses short text keys instead of a key ring, it works as an ordinary command you can put in a pipe, and there is a Go library behind it for programs that need the same thing.What it is good for. Everybody who copies a file off their own machine. Edition 8 gave you restic (#11) for backups and Edition 18 gave you pgBackRest (#1) for the database, and both of those encrypt what they store. This is for everything else: the one-off database dump, the export you email to yourself, the secret file a script has to read on a server you do not fully trust. For Grasppy, a pg_dump encrypted before it leaves the Hetzner server is one extra command on the same line, and it is the cheapest safety on this page.
- Two commands and one key file. It is small enough that you will actually use it, which is the whole point.
- The keys are short lines of text, so you can keep one in a password manager and paste it when you need it.
- It also accepts an ordinary SSH key, so you may already have everything you need.
- If you lose the private key, the file is gone forever and nobody on earth can help you. Store the key somewhere separate from the encrypted files.
- It encrypts and does nothing else. There is no signing, no key server and no way to share with a group by name.
- The design is deliberately finished. If you need a feature it does not have, it will not be added, by choice.
- str4d/rage
The same file format and the same commands, written in Rust instead of Go, useful if you already build with Rust.
Track this in Scout - getsops/sops
Solves a nearby problem: it encrypts only the values inside a YAML or JSON settings file, so the file stays readable and reviewable in git.
Track this in Scout
restic/resticEncrypts as part of a full backup program with snapshots and de-duplication, so it replaces age for backups and is far too heavy for one file.
Track this in Scout
# Debian or Ubuntu sudo apt install age # macOS brew install age # Make your key once. Keep the private key safe; the public key is printed. age-keygen -o ~/age-key.txt # Lock a file, using the public key that age-keygen printed: age -r age1qqq...yourpublickey -o dump.sql.age dump.sql # Unlock it again: age -d -i ~/age-key.txt -o dump.sql dump.sql.age # Or do it in one line, straight out of PostgreSQL: pg_dump yourdb | age -r age1qqq...yourpublickey > dump.sql.age
3.7k stars · AGPL-3.0 · 3000.15.0 (2026-06-19), read from the About sidebar on the repository page · Track this in Scout
Shows a grid of buttons on a web page, each one bound to a shell command you wrote down in advance, and prints the output of every run.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A small web application that shows a grid of buttons, each one bound to a command you defined in a settings file. It shows the output of each run, and it can take typed values from the person pressing the button when you list which values are allowed.What it is good for. Anyone who is not a full-time programmer and still has to operate a server. It removes two different problems at once: remembering the command, and typing it wrong at eleven at night. It is also the safe way to let somebody else run one job without giving them a login. Gennady runs ScalpingMate backtests and Grasppy maintenance jobs by hand, and a button on a phone beats a remembered command every time.
- You can only run what you wrote down in advance, so a whole class of mistake becomes impossible by design.
- It works on a phone, so you can act while you are away from your desk.
- It shows the output of each run, so you can see whether the command actually worked.
- AGPL-3.0. That is a licence that requires you to publish your changes if you offer the changed program to others over a network. Running it as it comes is fine; building a product on it is not.
- It runs commands as whatever user you start it as. Give it its own user with only the permissions those commands need.
- Never put it on the open internet without a login page in front of it. A web page that runs commands is exactly what an attacker is looking for.
- msoap/shell2http
The same idea reduced to its smallest form: each command becomes a web address, with no buttons and no screen, which makes it good for scripts and poor for people.
Track this in Scout - rundeck/rundeck
The same self-service idea built for a team, with users, roles, schedules and audit logs, at the cost of running a Java application.
Track this in Scout
dagucloud/daguSolves the other half: it runs jobs on a timer and chains steps together, where OliveTin runs one command when a person asks.
Track this in Scout
# Needs Docker. Put your settings file in /etc/OliveTin/config.yaml first.
sudo mkdir -p /etc/OliveTin
sudo tee /etc/OliveTin/config.yaml >/dev/null <<'EOF'
listenAddressSingleHTTPFrontend: 0.0.0.0:1337
logLevel: INFO
actions:
- title: Show disk space
shell: df -h
- title: Restart the app
shell: systemctl restart myapp
EOF
docker create --name olivetin -p 1337:1337 \
-v /etc/OliveTin/:/config:ro docker.io/jamesread/olivetin
docker start olivetin
# then open http://your-server:1337 — behind a password, not on the open internet1.1k stars · Apache-2.0 and MIT · v1.24.0 (2026-05-20) · Track this in Scout
Turns comments above bash functions into a real command-line interface with flags, subcommands and usage text, and doubles as a task runner through an Argcfile.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A framework for bash, the standard command language on Linux and Mac, that reads tags written as comments and generates the argument parsing, the help screen and the tab completion for you. The same file doubles as a task runner, which is a tidier replacement for a folder of one-line scripts.What it is good for. Anyone with a folder of scripts they wrote and then forgot. The problem it removes is the small daily cost of not remembering. It matters more than it looks for somebody who builds with a coding assistant: an assistant writes a far better script when the script's shape is declared in comments it can read, and a help screen is the cheapest documentation there is.
- The description of the command lives inside the script, so it cannot drift away from the code.
- One small program, with nothing to install beside it.
- You get help text, argument checking and tab completion for nothing.
- Bash only. A Python or JavaScript script gets no benefit at all.
- The comment tags are one more small language to learn, and they only work with this tool.
- A very small project at 1.1k stars. If the author stops, your scripts keep working, but nothing new arrives.
casey/justThe same job of collecting small project commands into one file, with its own simple syntax rather than bash comments, and no generated help for arguments.
Track this in Scout- go-task/task
The same task-running idea written in YAML, with dependencies between tasks and file-change detection, aimed more at builds than at wrapping your own scripts.
Track this in Scout - matejak/argbash
Does only the argument-parsing half, and does it by generating plain bash code you keep, so the finished script needs nothing installed to run.
Track this in Scout
# The easiest route if Rust's package manager is installed:
cargo install argc
# Otherwise take the binary for your system from
# https://github.com/sigoden/argc/releases/latest
chmod +x ./argc
sudo mv ./argc /usr/local/bin/argc
# A one-file example. Save it as Argcfile.sh:
cat > Argcfile.sh <<'EOF'
#!/usr/bin/env bash
# @describe Small jobs for this project
# @cmd Back up the database
# @arg name! The database name
backup() {
pg_dump "$1" > "$1-$(date +%F).sql"
}
eval "$(argc --argc-eval "$0" "$@")"
EOF
chmod +x Argcfile.sh
./Argcfile.sh backup --help27.2k stars · MIT · v26.9.0 (2026-09-01), read from /releases/latest; the About sidebar showed the older v26.6.0, so the latest page is the one to trust · Track this in Scout
An envelope-method budgeting application that keeps its data on your own device or your own server and works offline, syncing when the connection returns.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A budgeting application built around the envelope method, where you assign every available amount to a named category before any of it is spent. It keeps its data on your own device or your own small server and syncs between the two.What it is good for. A solo founder whose business money and personal money live in the same account, which is most of them in the first two years. It answers one question that no dashboard answers: how much of what is in the account is already promised to something. It is not accounting — Edition 18 gave you InvoiceShelf (#8) for invoices, and hledger below is for the books.
- MIT licence and self-hosted, so your bank data is not sitting inside somebody's sales platform.
- It works offline and syncs afterwards, so a plane or a bad connection changes nothing.
- It imports the file formats most banks offer, including CSV, OFX and QFX.
- It is a personal budgeting tool, not business accounting. Your accountant will still want proper books.
- Automatic bank connections need a separate service that you set up and maintain yourself. That is the fiddly part, and many people skip it and import files by hand.
- Envelope budgeting needs two or three weeks of habit before it starts repaying the effort. It is a method, not a screen.
- firefly-iii/firefly-iii
The same self-hosted personal finance job with proper double-entry bookkeeping and a REST API, heavier to run because it needs PHP and a database.
Track this in Scout - ghostfolio/ghostfolio
Tracks what your investments are worth rather than what your spending is planned to be, so it answers the opposite question.
Track this in Scout
simonmichael/hledgerRecords what already happened in a plain text file instead of planning what will happen, which is why both are on this page.
Track this in Scout
# Needs Docker. mkdir -p ~/actual-data docker run --pull=always --restart=unless-stopped -d \ -p 5006:5006 \ -v ~/actual-data:/data \ --name my_actual_budget \ actualbudget/actual-server:latest # then open http://localhost:5006 and set a password on first use # to update later: docker pull actualbudget/actual-server:latest
4.5k stars · GPL-3.0 · 1.52.1 (2026-04-28), read from the About sidebar on the repository page · Track this in Scout
Keeps double-entry accounts in a plain text journal file you write yourself, and prints balance sheets, income statements and registers from it.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A double-entry accounting program that reads a plain text journal file. It offers a command-line interface, a terminal interface and a small web interface, and it prints balance sheets, income statements and account registers.What it is good for. Anyone who wants accounts they can read, compare and keep forever, and anyone who has been burned by a finance app shutting down. It also suits a one-person business with few transactions per month, where the typing is genuinely small and the auditability is genuinely useful. It pairs with Actual above: Actual is for deciding, this is for recording.
- Your data is a plain text file you own, in a format that two other programs also read, so you are never locked in.
- Real double-entry accounting, which means the numbers have to balance and a mistake shows itself.
- Unusually careful documentation and a steady release every few months, going back many years.
- You type the entries, or you write a small importer. There is no bank connection at all.
- Double-entry accounting is a genuine subject, and the first week is confusing even with good documentation.
- GPL-3.0. You may use it freely, but anything you build from its code must also be GPL.
- ledger/ledger
The original plain text accounting program that hledger was modelled on, faster on very large files and harder to learn, with a stricter file format.
Track this in Scout - beancount/beancount
The same plain text idea with a stricter language and a Python plugin system, which suits people who want to write their own checks and reports.
Track this in Scout - beancount/fava
Solves the presentation half: a good-looking web interface over a Beancount file, with charts and filters that the command line does not give you.
Track this in Scout
# Debian or Ubuntu
sudo apt install hledger
# macOS
brew install hledger
# Make your first journal file:
mkdir -p ~/finance
cat > ~/finance/2026.journal <<'EOF'
2026-09-14 opening balances
assets:bank:checking 1000
equity:opening balances
2026-09-14 Hetzner server
expenses:hosting 12
assets:bank:checking
EOF
hledger -f ~/finance/2026.journal balance
hledger -f ~/finance/2026.journal incomestatement3.2k stars · AGPL-3.0 · 10.0.8 (2026-09-08) · Track this in Scout
A full CRM with a no-code entity and field designer, email integration, automation, reports and a knowledge base, run on your own PHP and MySQL server.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A full customer relationship manager written in PHP with a MySQL database. It covers contacts, leads, opportunities, email, a calendar and case tracking, and it has a designer screen for adding your own record types and fields.What it is good for. Any solo builder at the point where five enquiries a month have become five threads they cannot remember by Friday. The honest comparison matters more than the tool here. Edition 9 gave you Twenty (#1), which has been on this board since 3 September and is still not installed. Twenty is newer, better looking and wants Node.js and PostgreSQL. EspoCRM is older, plainer, and runs on the cheapest hosting there is. Pick on which one you will actually log into, not on which screenshot you prefer.
- Mature and steady, with a new version most months and a long history behind it.
- You can add your own record types and fields from a screen, with no code at all.
- PHP and MySQL run on ordinary cheap shared hosting, so it does not need a server of its own.
- AGPL-3.0, and a number of useful extensions are sold separately rather than included.
- PHP and MySQL mean a second kind of server beside a Python or JavaScript application, which is real work to keep patched.
- It was designed for a sales team. One person will use perhaps a fifth of it, and the unused four fifths are still on the screen.
twentyhq/twentyThe same CRM job with a much more modern interface and a Node.js and PostgreSQL stack, and enterprise files under a separate paid licence.
Track this in Scout- krayin/laravel-crm
The same PHP and MySQL approach built on the Laravel framework, which is friendlier if you or a contractor already know Laravel.
Track this in Scout - frappe/crm
The same job with a lighter, more focused screen aimed at sales pipelines, at the cost of pulling in the Frappe platform underneath it.
Track this in Scout
# Needs Docker. A database container first: docker run --name mysql -e MYSQL_ROOT_PASSWORD=change-this -d mysql:8 # Then EspoCRM itself, on port 8080: docker run --name my-espocrm -p 8080:80 --link mysql:mysql -d espocrm/espocrm # then open http://localhost:8080 — the first login is admin / password, # and changing it is the first thing to do. # For a real install use the Docker Compose setup in the documentation at # https://docs.espocrm.com/administration/docker/installation/ # which also runs the background daemon and the websocket service.
19.2k stars · GPL-2.0 · v1.32.12 (2026-09-12), read from PyPI; the GitHub sidebar still showed v1.32.9 on the morning of the edition · Track this in Scout
A command-line downloader for image galleries and collections across hundreds of sites, with configurable filename templates and three ways to authenticate.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A command-line program that downloads image galleries and collections from several hundred sites. It handles paging, file naming, skipping what you already have, and keeping the metadata, and you configure all of that in one JSON file.What it is good for. Anyone researching what competitors publish. Edition 6 gave you yt-dlp (#4) for video and left the pictures uncovered, and pictures are where a lot of the signal is. For a YouTube channel it collects every thumbnail a competitor has ever used, which is the cheapest thumbnail research available. Download for research and keep it to research: somebody else's images are still theirs.
- Several hundred sites are supported, and new ones arrive in almost every release.
- It records where each file came from, so your research stays traceable months later.
- It hands video addresses over to yt-dlp, so the two together cover pictures and video with one habit.
- GPL-2.0, so you cannot build a closed product around it.
- Many sites need your own login details written into the settings file, which leaves a secret sitting on disk. Lock that file down, or encrypt it with age (#4).
- Active development has moved to Codeberg. The GitHub page is now a mirror. Releases still appear here, and the version on PyPI was newer than the one GitHub was showing on the morning this was written, but issues and new code live at codeberg.org/mikf/gallery-dl.
yt-dlp/yt-dlpThe same command-line approach for video and audio instead of images, and gallery-dl hands video links to it rather than competing.
Track this in Scout- Bionus/imgbrd-grabber
The same bulk image downloading with a window you click instead of a command, aimed at imageboards, so it is friendlier and covers far fewer sites.
Track this in Scout - instaloader/instaloader
The same job for one site only, Instagram, and it goes deeper there with captions, stories and comments than a general tool does.
Track this in Scout
# Python 3.9 or newer python3 -m venv venv source venv/bin/activate pip install -U gallery-dl gallery-dl --version # Download a whole gallery into a tidy folder: gallery-dl -d ~/research "https://www.reddit.com/r/somesubreddit/" # See what it would do, without downloading anything: gallery-dl --simulate "https://www.reddit.com/r/somesubreddit/"
2.7k stars · MIT · v5.51.0 (2026-06-16), read from the About sidebar on the repository page · Track this in Scout
Reads a page's title, description, image, author, date and publisher out of Open Graph, Twitter Cards, JSON-LD, Microdata, RDFa and plain HTML, in a set order of preference.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A JavaScript library that extracts a page's title, description, image, author, date and publisher from Open Graph tags, Twitter Cards, JSON-LD, Microdata, RDFa and the plain HTML, in a defined order of preference. It is built as small rule packs, so you install only the pieces you want.What it is good for. Anyone whose product accepts a link from a person. The problem it removes is that no two websites describe themselves the same way, and writing that guesswork yourself takes a week and never finishes. For Grasppy, where somebody pastes a link and expects a card, this fills in the title and the picture before any of the heavy reading starts. Edition 17 gave you astro-og-canvas (#7), which makes those preview pictures for your own pages. This one reads other people's.
- It checks six sources and falls back sensibly, so it still returns something useful on a badly built page.
- MIT licence, small, and a library rather than a service you have to pay for or run.
- You choose only the rule packs you need, so it stays light in your project.
- JavaScript and Node.js only. A Python backend needs a small service beside it, or a different tool.
- It reads the HTML it is handed and does not run the page's own code, so a page built entirely in the browser returns almost nothing.
- You still have to fetch the page yourself, and fetching links a stranger gave you is its own security job. Set a timeout and a size limit.
- mozilla/readability
Pulls out the readable article body rather than the summary card fields, so it answers what the page says where metascraper answers how the page describes itself.
Track this in Scout
adbar/trafilaturaThe same extraction job for Python instead of JavaScript, covering both text and metadata, and it can crawl a site as well.
Track this in Scout
firecrawl/firecrawlDoes the fetching as well as the extraction, as a service you run or pay for, which is far more than a library and far more to operate.
Track this in Scout
# Needs Node.js 18 or newer
npm install metascraper \
metascraper-title \
metascraper-description \
metascraper-image \
metascraper-url
# A minimal use, in a file called preview.mjs:
cat > preview.mjs <<'EOF'
import createMetascraper from 'metascraper'
import title from 'metascraper-title'
import description from 'metascraper-description'
import image from 'metascraper-image'
const scraper = createMetascraper([title(), description(), image()])
const targetUrl = process.argv[2]
const html = await (await fetch(targetUrl)).text()
console.log(await scraper({ html, url: targetUrl }))
EOF
node preview.mjs https://example.com2.2k stars · GPL-3.0 · 1.10.3 (2026-08-20), read from /releases/latest; the bare date '20 Aug' is in the past, so it is 2026 · Track this in Scout
Reads MP3, WAV, FLAC, Ogg Vorbis and Opus and writes either a PNG image of the waveform or the peak data behind it, from the command line.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A command-line program written in C++ that reads MP3, WAV, FLAC, Ogg Vorbis and Opus and writes either a PNG image of the waveform or a data file of the peaks. It was built at the BBC to feed their browser component peaks.js.What it is good for. Anyone who publishes audio or video and wants to see the shape of it before editing. The problem it removes is scrubbing back and forth to find where you stopped talking. Edition 13 gave Gennady auto-editor (#3), which cuts silence out automatically; this is the other approach, where you look at the silence and decide by eye. It is also the piece you need if you ever want a waveform drawn on your own website under a recording.
- Very fast, because it does one job in C++ and nothing else.
- It writes both a picture and the raw numbers, so you can use its output in a web page rather than only looking at it.
- It reads the common sound formats directly, with no conversion step first.
- GPL-3.0, so you cannot bundle it inside a closed product.
- Ongoing development has moved to Codeberg, at codeberg.org/chrisn/audiowaveform. Releases still appear on GitHub — 1.10.3 landed on 20 August 2026 — but the GitHub page is a mirror.
- It is a building block, not a program with a window. You get a file, and something else has to display it.
- bbc/peaks.js
Solves the other half: it is the browser component that draws and lets you click on the data this program produces, by the same maintainer, and it has also moved to Codeberg.
Track this in Scout - katspaugh/wavesurfer.js
Draws the waveform in the browser from the audio file itself, so it needs no pre-computed data and does more work on the visitor's machine.
Track this in Scout - naomiaro/waveform-playlist
Goes further than drawing and gives a multi-track editor in the browser with fades, cues and export, which is a whole application rather than a building block.
Track this in Scout
# Debian or Ubuntu sudo apt install audiowaveform # macOS brew tap bbc/audiowaveform brew install audiowaveform # Make a picture of an episode's sound: audiowaveform -i episode.mp3 -o episode.png -w 1800 -h 280 # Or get the numbers, for drawing on a web page later: audiowaveform -i episode.mp3 -o episode.json -b 8 # Straight from a video, using ffmpeg to pull the sound out first: ffmpeg -i episode.mp4 -f wav - | audiowaveform --input-format wav -o episode.png
Checked, and left out
These were opened for this edition and did not make it, with the reason.
resemble-ai/resemble-enhance - UNVERIFIED, and explicitly NOT called dormant. 2.4k stars, MIT, speech denoising and enhancement. Newest PyPI release is 0.0.1
resemble-ai/resemble-enhance - UNVERIFIED, and explicitly NOT called dormant. 2.4k stars, MIT, speech denoising and enhancement. Newest PyPI release is 0.0.1 (14 December 2023) plus a development build (4 January 2024), and there are no GitHub releases at all, so recency could not be proven in either direction from this sandbox. Recorded because this ledger still has no maintained open-source speech denoiser, a gap first named in Edition 13 and still open. Needs a sweep from the Mac.
pyannote/pyannote-audio - ALIVE: 4.0.7 on PyPI, 30 June 2026, MIT, 10.4k stars. Works out who spoke when in a recording. Left out because whisperX
pyannote/pyannote-audio - ALIVE: 4.0.7 on PyPI, 30 June 2026, MIT, 10.4k stars. Works out who spoke when in a recording. Left out because whisperX (Ed. 2 #4) already covers speaker separation in this ledger and audiowaveform took the audio slot. Queued.
stanfordnlp/dspy - ALIVE: 3.3.1 on PyPI, 21 August 2026, MIT, 36.7k stars. Tunes the instructions sent to a language model instead of rewriting prompts by hand. Left out only because the twelve were full. Queued, near the front.
stanfordnlp/dspy - ALIVE: 3.3.1 on PyPI, 21 August 2026, MIT, 36.7k stars. Tunes the instructions sent to a language model instead of rewriting prompts by hand. Left out only because the twelve were full. Queued, near the front.
marp-team/marp-cli - ALIVE: 4.4.1 on registry.npmjs.org, MIT, 3.8k stars. Turns a Markdown file into slides, a PDF or a PowerPoint from the command line. Left out because it overlaps Slidev
marp-team/marp-cli - ALIVE: 4.4.1 on registry.npmjs.org, MIT, 3.8k stars. Turns a Markdown file into slides, a PDF or a PowerPoint from the command line. Left out because it overlaps Slidev (Ed. 12 #4); queued so the two can be compared properly.
HypoPG/hypopg - 1.7k stars, a PostgreSQL extension that lets you test whether an index would help before building it, which pairs with pev2
HypoPG/hypopg - 1.7k stars, a PostgreSQL extension that lets you test whether an index would help before building it, which pairs with pev2 (#2). Newest release is 1.4.2 (29 June 2025), fourteen months ago, and commit dates cannot be read from here, so the release date is stated plainly rather than converted into a verdict. Queued for a sweep from the Mac.
Coming tomorrow


























