Edition No. 18 · 12 Sep 2026
Twelve repositories for keeping what you built running
Backups, logs, logins, invoices and a database report — plus one project with no release since 2023 that shipped code last month.
Saturday, 12 September 2026 · Open Props has not cut a release in three years, and it is not dead
The web version carries the English / Русский switch. The Russian text is in the file radar-2026-09-12-ru.md, delivered into the chat on the day. This archive stays English only.
Today is about the boring half of a software business. Backups that work. Logs you can read. A login page. Email that arrives. An invoice. A test that runs against a real database. None of it is exciting, and all of it is the difference between a project and a product.
One of today's twelve taught a lesson worth the whole edition. Open Props last tagged a release in September 2023. Three years. Everything about that looks like a dead project. Its code was pushed on 11 August 2026, one month ago, and its package manager entry is eight versions ahead of the last tag. The project simply stopped tagging releases. This radar has been wrong about that exact thing before, and it is written into the rules now: a release date is not a code date.
Two things worth knowing, separate from the recommendations
A project with no release since 2023 is shipping code every month. Open Props (#9) last tagged a release on 29 September 2023. Its package manager entry is on 1.7.23, eight versions past that tag, and its code was last pushed on 11 August 2026. Reading the release page alone would have put it on the do-not-recommend list, and that would have been wrong. This radar made that exact mistake on 8 September with four projects in one run, and the rule written that day is the reason Open Props was checked properly today: a release date tells you when someone last tagged a version, and nothing else.
useSend started tagging releases. When it was checked on 9 September it had 508 commits and no releases at all, and that was the reason it kept losing its slot. It now has v1.9.8, published on 30 August 2026. Nothing about the project changed except a habit, and a habit was all that stood between it and an edition. That is worth remembering the next time something is held back for the same reason.
Every link in one place
| # | Repository | What it does | Stars | Licence | Website |
|---|---|---|---|---|---|
| 1 | pgbackrest/pgbackrest | PostgreSQL backup and point-in-time restore | 4.2k | MIT | pgbackrest.org |
| 2 | amir20/dozzle | Live container logs in a browser | 14.1k | MIT | dozzle.dev |
| 3 | NginxProxyManager/nginx-proxy-manager | HTTPS and routing with a web screen | 34.1k | MIT | nginxproxymanager.com |
| 4 | pocket-id/pocket-id | Sign-in with passkeys only | 9.0k | BSD-2-Clause | pocket-id.org |
| 5 | usesend/useSend | Your own email sending service | 4.7k | AGPL-3.0 | usesend.com |
| 6 | darold/pgbadger | Finds your slowest database queries | 4.1k | PostgreSQL License | pgbadger.darold.net |
| 7 | testcontainers/testcontainers-python | Tests against a real database 💎 | 2.2k | Apache-2.0 | testcontainers-python.readthedocs.io |
| 8 | InvoiceShelf/InvoiceShelf | Invoices on your own server 💎 | 1.8k | AGPL-3.0 | invoiceshelf.com |
| 9 | argyleink/open-props | Ready-made design values for CSS | 5.5k | MIT | open-props.style |
| 10 | SYSTRAN/faster-whisper | Speech to text, four times faster | 25.0k | MIT | — |
| 11 | dcajasn/Riskfolio-Lib | How to split money between strategies | 4.4k | BSD-3-Clause | portfoliooptimization.org |
| 12 | plausible/community-edition | Website visitor counting, self-hosted 💎 | 2.8k | MIT | plausible.io/blog/community-edition |
Open Props has not cut a release in three years, and it is not dead
Twelve repositories, checked and reviewed. Every version verified against the GitHub API and dated.
4.2k stars · MIT · v2.58.0 (2026-01-19), re-read from /releases/latest on 2026-09-12
Point-in-time backup and restore for PostgreSQL, which a file-level snapshot cannot give you.
▶Repo detailsthe review · specs · pros & cons · install
What it is
pgBackRest is a backup program written for PostgreSQL and nothing else. It takes full and partial backups, keeps a copy of every change made since the last one, checks that what it wrote can be read back, and restores to a point in time you name.What it is good for. Anyone who runs their own database on their own server. Edition 8 recommended restic, which is an excellent tool for files, and Edition 15 recommended Healthchecks, which tells you when a job did not run. Neither of those solves the database problem, because a file-level copy of a live PostgreSQL folder can be internally inconsistent. This is the tool that closes that hole, and it is the only kind of backup that lets you undo a mistake made at 14:30 by restoring to 14:29. Grasppy stores everything in PostgreSQL on one Hetzner server, so this is the single highest-value item in this edition for you.
- It can restore to any minute you choose, not only to the moment of the last backup.
- It can write backups to a second disk and to S3-style cloud storage at the same time, so one dead machine does not take the backups with it.
- It reads its own backups back and checks them, so a broken backup is found before you need it.
- Setup is a configuration file and a scheduled job, not one command. Expect two to three hours the first time.
- It works with PostgreSQL only. It will not back up your files, your images or anything else.
- A backup you have never restored is a guess. You have to rehearse a restore once, on a spare machine, or you do not know that it works.
# On the Hetzner server, as root. Debian or Ubuntu: sudo apt update sudo apt install pgbackrest # Tell it where to keep backups and which database to protect. sudo mkdir -p /var/lib/pgbackrest sudo chown postgres:postgres /var/lib/pgbackrest sudo tee /etc/pgbackrest/pgbackrest.conf > /dev/null <<'EOF' [global] repo1-path=/var/lib/pgbackrest repo1-retention-full=2 start-fast=y [main] pg1-path=/var/lib/postgresql/16/main EOF # Then, in postgresql.conf, switch on change logging and point it at pgBackRest: # archive_mode = on # archive_command = 'pgbackrest --stanza=main archive-push %p' # Restart PostgreSQL, then: sudo -u postgres pgbackrest --stanza=main stanza-create sudo -u postgres pgbackrest --stanza=main check sudo -u postgres pgbackrest --stanza=main --type=full backup
14.1k stars · MIT · v11.0.0 (2026-09-11), read from /releases/latest on 2026-09-12
A web page that shows the live output of every container on your server, with search across all of them.
▶Repo detailsthe review · specs · pros & cons · install
What it is
Dozzle is a small program that reads the output of the containers running on your machine and shows it in a browser. A container is a sealed box that holds one program and everything it needs, so it cannot interfere with anything else on the server.What it is good for. Anyone running more than one thing in Docker who is tired of remembering command names. It is the fastest way to answer "what happened at 11pm" without SSH, which is the text-only remote connection to a server. It also shows several containers side by side, which is how you spot that the failure in one was caused by another. Grasppy and ScalpingMate both run as containers on your Hetzner box, so one Dozzle covers both.
- One command and it is running. Removing it is just as fast.
- It stores nothing by default, so it cannot fill your disk.
- It shows many containers at once, with live search and filtering across all of them.
- It needs access to the Docker socket, which is the control channel for Docker on that machine. That access is equal to being root on the server, so Dozzle must never be exposed to the open internet without a password.
- It shows you what is happening now. It is not a place to keep and search a year of logs.
- Its own sign-in is switched off by default. You have to turn it on or keep the page behind something else.
# On the server: docker run -d --name dozzle \ -v /var/run/docker.sock:/var/run/docker.sock \ -v dozzle_data:/data \ -p 127.0.0.1:8080:8080 \ amir20/dozzle:latest
34.1k stars · MIT · v2.15.1 (2026-06-03), read from /releases/latest on 2026-09-12
A web screen for pointing domain names at programs, with free HTTPS certificates that renew on their own.
▶Repo detailsthe review · specs · pros & cons · install
What it is
Nginx Proxy Manager is a container that runs the nginx web server together with a management screen. HTTPS is the padlock in the address bar, and the certificate that provides it comes free from Let's Encrypt. This program asks for it, installs it and renews it before it expires.What it is good for. Anyone who self-hosts more than one thing and does not want to write nginx configuration files. It removes the most common reason a self-hosted tool never gets exposed properly: the certificate step. It is also how you put a password in front of an internal page like Dozzle, and how you give Pocket ID (#4) the HTTPS it requires in order to work at all.
- Free certificates that renew themselves, set up by ticking a box.
- One screen listing every domain on the machine, so you can see what is pointing where.
- It can put a login box in front of any page you have not secured yourself.
- It expects to own ports 80 and 443. If something else is already serving your site on those ports, moving over needs a planned change, not a quick try.
- It adds a moving part in front of your site. When it is down, everything behind it is down.
- The management screen has a default password. Change it in the first minute, and never expose that screen to the internet.
mkdir -p ~/npm && cd ~/npm
cat > docker-compose.yml <<'EOF'
services:
app:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '127.0.0.1:81:81'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
EOF
docker compose up -d9.0k stars · BSD-2-Clause · v2.14.0 (2026-08-18), re-read from /releases/latest on 2026-09-12
A small OIDC identity provider that signs people in with passkeys and nothing else.
▶Repo detailsthe review · specs · pros & cons · install
What it is
Pocket ID is an identity provider. That means other programs hand the sign-in step over to it, and it tells them who the person is. It supports passkeys only, which are the keys your phone or computer stores for you and unlocks with a fingerprint, a face or a PIN.What it is good for. A solo builder who has one or two private tools on a server and wants a proper login in front of them. It is also a real answer for a product's own sign-in page. Edition 11 recommended Logto for the same job. Logto does far more, including passwords, social logins and organisations, and it is the right choice if you need those. Pocket ID is the right choice if you want one small program that does one thing and finishes in an evening. If Grasppy's sign-in is still on your list, these two are the choice to make.
- No passwords to store, reset, or have stolen.
- It is one small program with a small database, so it is cheap to run and easy to understand.
- It speaks the standard sign-in language, so most self-hosted tools accept it without changes.
- It only works over HTTPS, because passkeys refuse to run otherwise. You need entry 3 or a similar arrangement first.
- Passkeys are tied to devices. Losing every device you own is a real support problem, so set up more than one and keep a recovery route.
- Passkey-only means some visitors on older phones or shared computers will struggle. That is a product decision, not a bug.
mkdir -p ~/pocket-id && cd ~/pocket-id
cat > docker-compose.yml <<'EOF'
services:
pocket-id:
image: ghcr.io/pocket-id/pocket-id:v2
restart: unless-stopped
env_file: .env
ports:
- '127.0.0.1:1411:1411'
volumes:
- ./data:/app/data
EOF
echo "APP_URL=https://id.example.com" > .env
echo "TRUST_PROXY=true" >> .env
docker compose up -d4.7k stars · AGPL-3.0 · v1.9.8 (2026-08-30)
Self-hosted alternative to Resend, SendGrid and Postmark — the sending layer Listmonk and Mautic both assume.
▶Repo detailsthe review · specs · pros & cons · install
What it is
useSend is a self-hosted alternative to paid email services such as Resend, SendGrid and Postmark. It gives your app a simple way to ask for an email to be sent, and it hands the message to Amazon SES for delivery while keeping the record of it on your own server.What it is good for. Anyone whose product sends email to individual people, as opposed to a newsletter to a list. Edition 2 recommended Listmonk and Edition 10 recommended Mautic, and both of those write email but assume you already have something that delivers it. Edition 15 recommended Postal, which is the heavier answer: your own full mail server, and a request to Hetzner to unblock the outgoing mail port. useSend is the lighter answer, because Amazon does the delivering. Grasppy will need password resets and signup confirmations before it needs a newsletter.
- Sending through Amazon SES costs about ten cents per thousand emails, far below the usual monthly plans.
- You keep the record of every message on your own server, including whether it arrived and whether it bounced.
- It has a normal web interface plus a programming interface, so you are not reading a database by hand.
- It is licensed AGPL-3.0. Running it for your own business is fine. Building it into a product you sell means reading that licence carefully first.
- It depends on Amazon SES, and getting an SES account out of Amazon's restricted starting mode takes a short application.
- Email delivery still needs the boring domain settings done correctly. Edition 8's checkdmarc is the tool that tells you whether you got them right.
mkdir -p ~/usesend && cd ~/usesend curl -fsSL https://raw.githubusercontent.com/usesend/useSend/main/docker-compose.yml -o docker-compose.yml # Read the file, then set your own values in an .env beside it: # DATABASE_URL, NEXTAUTH_SECRET, AWS_ACCESS_KEY, AWS_SECRET_KEY, AWS_DEFAULT_REGION docker compose up -d
4.1k stars · PostgreSQL License · v13.2 (2025-12-29), read from /releases/latest on 2026-09-12 with the year shown in full
It reads PostgreSQL's own log file and produces one HTML page naming the slowest queries, in order.
▶Repo detailsthe review · specs · pros & cons · install
What it is
pgBadger is a single program that reads PostgreSQL log files and produces a self-contained HTML report. The report shows the slowest queries, the most frequent ones, connection counts, locks and errors, with charts over time.What it is good for. Anyone whose own app is getting slower and who does not know why. It answers the question directly instead of asking you to install monitoring and wait a week. It costs nothing to run, it does not stay running, and the report is one file you can open on a laptop. Grasppy maps long conversations, which is exactly the kind of work that ends up doing too many small database queries in a loop. This will show you if that is happening.
- It works on log files you already have, so it can tell you something about last week.
- It leaves nothing running on the server. You run it, you read the page, it is over.
- The report is a single HTML file. No database, no server, no dashboard to maintain.
- To get a useful report you must first switch on query logging in PostgreSQL. That writes more to disk, so watch your free space for a day.
- It is written in Perl, an older programming language. It installs fine, but it is not a
pip install. - The last tagged release was 29 December 2025. That is normal for a mature tool, but it means there is no recent release to point at.
# Debian and Ubuntu package it directly: sudo apt update sudo apt install pgbadger # Switch on query logging in postgresql.conf: # log_min_duration_statement = 0 # log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h ' # log_checkpoints = on # log_lock_waits = on # log_temp_files = 0 # Reload PostgreSQL, let it run for a day, then: pgbadger /var/log/postgresql/postgresql-16-main.log -o ~/report.html
2.2k stars · Apache-2.0 · 4.15.0 on PyPI (2026-07-24); GitHub's newest tag is testcontainers-v4.15.0 (2026-07-24) and a v4.15.0-rc4 candidate sits above it
Tests get a real, empty PostgreSQL started in a container and thrown away afterwards.
▶Repo detailsthe review · specs · pros & cons · install
What it is
Testcontainers for Python is a library you add to your test code. It starts real services inside Docker containers for the duration of a test run, hands your code the address to connect to, and removes them when the run ends.What it is good for. Anyone with a real database behind their app who has been putting off writing tests. The usual shortcut is to test against SQLite, a small file-based database, and hope it behaves like the real one. It does not, and the differences show up in production. Grasppy is FastAPI and PostgreSQL, so this is the piece that lets Claude Code write tests that actually prove something. It also sits neatly beside pglite from yesterday's edition: pglite gives a browser a Postgres engine with no server, and this gives a test run the real server in a throwaway container.
- Tests run against the same database engine as production, so a passing test means more.
- Each run starts empty, so tests cannot pollute each other or leave rubbish behind.
- It supports far more than databases. Redis, message queues and object storage all work the same way.
- Every test run pulls and starts containers, so the first run is slow and the rest add a few seconds each.
- It needs Docker available wherever the tests run, including on any build machine you use later.
- The latest release on GitHub is a release candidate, which is a version offered for testing. Install from PyPI, where 4.15.0 is the finished release.
cd ~/grasppy source venv/bin/activate pip install "testcontainers[postgres]" pytest
1.8k stars · AGPL-3.0 · 2.4.2 (2026-07-29), read from /releases/latest on 2026-09-12
Self-hosted invoicing and expense tracking with several currencies, and the maintained continuation of Crater.
▶Repo detailsthe review · specs · pros & cons · install
What it is
InvoiceShelf is a self-hosted invoicing application, and the maintained continuation of an older project called Crater. It handles customers, estimates, invoices, recurring invoices, payments and expenses, with a web interface and a phone-friendly layout.What it is good for. A solo founder or a small business that sends invoices and does not want a monthly subscription for the privilege. Edition 11 recommended Polar and Lago, which are for selling a product to many customers automatically. This is the other half: the handful of invoices you send to named people, in whatever currency they asked for. It is a genuinely small project at 1.8k stars, and that is the point of the gem badge.
- More than one currency, more than one company, and tax rules you can set yourself.
- Recurring invoices go out on their own, which is the part everybody forgets to do.
- Official Docker images, with a choice of SQLite, MariaDB or PostgreSQL behind it.
- It is licensed AGPL-3.0. Fine for your own business. Read it before building it into something you sell.
- It is a PHP application, which is another kind of program to keep updated on your server.
- It makes and tracks invoices. It does not take the payment, so something else still has to do that.
mkdir -p ~/invoiceshelf && cd ~/invoiceshelf git clone https://github.com/InvoiceShelf/docker.git . # Pick one of the provided compose files: SQLite, MariaDB or PostgreSQL. cp .env.example .env # Edit .env — set APP_URL and the database password — then: docker compose up -d
5.5k stars · MIT · v1.6.0 (2023-09-29)
CSS custom properties for spacing, colour, shadows and easing — design tokens without a framework.
▶Repo detailsspecs · pros & cons · install
- Plain CSS. No build step, no framework, and you can use only the parts you want.
- It covers the values people usually get wrong, especially shadows and easing.
- The values have sensible dark-mode partners already defined.
- The last tagged release on GitHub is v1.6.0 from 29 September 2023. The package manager entry is on 1.7.23 and the code was pushed on 11 August 2026, so the project is active. It simply stopped tagging releases, and that is confusing when you first look.
- It gives you values, not components. There is nothing here that looks like a button until you build one.
- Dropping the whole set into a page adds CSS you may not use. Import only the parts you need.
cd ~/your-site npm install open-props
25.3k stars · MIT · v1.2.1 (2025-10-31)
Whisper transcription up to 4x faster with less memory, and it runs on plain CPU.
▶Repo detailsthe review · specs · pros & cons · install
What it is
faster-whisper is a reimplementation of OpenAI's Whisper model using CTranslate2, a fast engine for running this kind of model. It produces the same text as Whisper, with word-level timings, and runs on a processor alone if you have no graphics card.What it is good for. Anyone who records audio or video regularly and wants the text. Edition 2 recommended whisperX and Edition 13 recommended whisper.cpp. This is the third answer to the same question, and it is worth saying plainly which is which. whisperX is still the best at telling speakers apart. whisper.cpp is the easiest to install on a Mac and needs nothing from Python. faster-whisper is the one to use from Python code, and it is the fastest of the three on a normal processor. For a channel published in two languages, the transcript is the thing three other jobs depend on.
- About four times faster than the original, with lower memory use.
- It runs on an ordinary processor, so no graphics card is needed.
- It is a Python library, so it drops straight into a script that then makes the subtitle file.
- The latest release is 1.2.1 from 31 October 2025, and the last code landed 19 November 2025. That is within our eighteen-month line, but it is quieter than the alternatives.
- The first run downloads a model file of several hundred megabytes. Do that once, on a good connection.
- Accuracy on Russian is good but not perfect. Plan to read the transcript before it becomes a subtitle.
cd ~/youtube python3 -m venv venv source venv/bin/activate pip install faster-whisper
4.5k stars · BSD-3-Clause · 7.3.0 on PyPI (2026-05-31)
Portfolio optimisation with a large library of risk measures — how capital should be split across strategies.
▶Repo detailsthe review · specs · pros & cons · install
What it is
Riskfolio-Lib is a Python library for portfolio optimisation. It takes the returns of several assets or strategies and produces the mix that best balances return against a risk measure you choose, of which it supports a large number.What it is good for. Anyone with several things to allocate between: strategies, instruments, or time windows. Edition 13 recommended ffn, which answers "which of these candidates is best". This answers the next question, which is "how much of each". ScalpingMate runs one strategy on EURUSD today, so this is a tool for later rather than this weekend. It becomes useful the moment there is a second strategy, or the same strategy on a second pair.
- A very large set of risk measures, not only the textbook one.
- It draws the results, so the output is a chart rather than a wall of numbers.
- It works directly with pandas, the standard Python table library, so your existing data fits.
- This is finance mathematics. It gives confident answers to questions you may be asking wrongly.
- It optimises on past returns. Past returns are not a promise, and on a single strategy it will tell you to put everything in it.
- Installing it pulls in a solver library, so the first install is larger and slower than most.
cd ~/scalpingmate source venv/bin/activate pip install Riskfolio-Lib
2.8k stars · MIT · no releases; rolling docker-compose.yml
The self-host distribution for Plausible Analytics (the analytics engine itself lives in plausible/analytics).
▶Repo detailsthe review · specs · pros & cons · install
What it is
This repository is the self-hosted distribution of Plausible Analytics: a set of Docker instructions plus the settings you need. Plausible itself counts page views and visitors without storing anything that identifies a person, which is why it needs no consent banner in Europe.What it is good for. Anyone who wants honest visitor numbers without the legal weight of Google Analytics. It is worth being straight about the crowd it joins. Edition 1 and Edition 5 recommended Umami, which does nearly the same job and is also MIT-licensed. Edition 11 recommended PostHog, which does far more and is easiest on their hosted free tier. Edition 9 recommended Counterscale, for Cloudflare. Edition 8 recommended GoAccess, which reads your server's own log files. You have five ways to count visitors on this radar now and none of them is installed. Pick one this month.
- No cookies, so no consent banner and a much shorter privacy policy.
- The tracking script is about one kilobyte, so it does not slow the page down.
- The whole thing is MIT-licensed and runs on your own machine, so the numbers are yours.
- It is a real service to keep running: a container, a PostgreSQL database and a ClickHouse database beside it. Expect 2 GB of memory or more.
- This repository publishes no GitHub releases. You install a named branch, which the quickstart gives as
v3.2.1. The code here was last pushed on 15 May 2026, so it is current, but there is no release page to read. - It counts pages and visits. It will not replay a session or tell you why somebody left.
git clone -b v3.2.1 --single-branch https://github.com/plausible/community-edition plausible-ce cd plausible-ce touch .env echo "BASE_URL=https://plausible.example.com" >> .env echo "SECRET_KEY_BASE=$(openssl rand -base64 48)" >> .env docker compose up -d
Checked, and left out
These were opened for this edition and did not make it, with the reason.
azimuttapp/azimutt
azimuttapp/azimutt — UNVERIFIED. A database schema explorer, 2.1k stars, MIT, and it would have been a fourth hidden gem. It publishes no GitHub releases, its npm package carries no readable publish date, and this sandbox cannot read commit dates, so recent code could not be proven either way. Recorded as unverified with the reason stated; explicitly NOT called dormant. Re-check from the Mac, where the API is readable.
hunvreus/basecoat
hunvreus/basecoat — VERIFIED ALIVE, last code 21 July 2026 (Mac sweep, 9 September). shadcn/ui's look in plain HTML with no React. Left out only because open-props took the single design slot and the twelve were full. Stays queued and is near the front.
Coming tomorrow