v0.8.1
MikroDash is now Go and TypeScript
The rewrite proposed in #114 replaces the
Node.js implementation. It has been serving in production since 2026-08-30, and this is the first
published image of it.
Nothing about the dashboard changed, and that was the point. Every page, colour, keyboard
shortcut and setting is where you left it. The frontend reuses the original stylesheet, class names,
element ids and DOM shape verbatim; only the logic producing them was rewritten. That was the
acceptance criterion throughout, enforced by 136 checks that drive both implementations from one
payload and compare the rendered HTML character for character.
What you get
- ARMv7 support is back. It was dropped at 0.5.54 because the Node base image published no
32-bit ARM build, which stranded anyone on older hardware two years behind.linux/arm/v7is
published again alongside amd64 and arm64, so a Raspberry Pi 2/3, an older NanoPi or a 32-bit
router-adjacent box can run current MikroDash. - The image is 180 MB instead of 775 MB. A single static binary on Alpine: no Node runtime, no
node_modules, no native compilation at install time. Faster to pull, faster to start, and far
less surface to patch. - Nothing to migrate. Point the new image at your existing volume and it picks up every history
sample, alert, audit row, saved layout, user and encrypted setting exactly as they are. - Geolocation needs no account. The city database is DB-IP City Lite, fetched fresh when the
image is built: no sign-up, no licence key, no token that expires and quietly breaks the map
months later. Point-geoat a volume if you would rather supply your own. - A type-checked frontend. A whole class of bug that used to surface as a button that silently
did nothing is now caught before the code ships. - Rollback is one command. The Node release is still there:
docker runthe0.7.40image
against the same volume. Anything the Go release wrote, the Node release can still read.
Upgrading
Pull and restart. Your docker-compose.yml needs no change, and the volume is used as-is.
One thing worth knowing: docker restart is not a redeploy. It keeps the image the container
was created from, so a newly pulled image is ignored while the app comes back looking perfectly
healthy. Use docker compose up -d, or docker rm -f then docker run.
Fixed
- Everything in 0.7.40 is included, including the certificate-check and router-enable fixes and the
read-only account that could read a device's public IP address. - 0.8.0 was tagged but never published. Its image build failed on the 32-bit ARM target it had
just restored: an AS number is 32-bit unsigned, and on a 32-bit build a large private ASN could
not be parsed at all, so a private BGP peer would have been labelled upstream. Two related
constants would not compile there either. Fixed and verified on all three architectures. - Two defects the cutover itself surfaced: a migration flag that made the app proxy some routes to
itself and silently disable background polling and history retention, and twelve verification
checks that would have become a permanent silent skip.
Internal
- The Node implementation is removed from the tree. It remains in this repository's history and at
thev0.7.40tag. - The verification travels with the repo: every check compares against a committed recording of the
old implementation, so a fresh clone can runsh tools/verify.shand get a meaningful answer. The
final comparison against the real Node source ran immediately before deletion and was green.