I already posted this on Reddit r/mikrotik, but I thought i would post it here as well.
I've been running MikroTik hardware at home for a while and got tired of having to SSH in or dig through WinBox just to check what's going on with my network. So I built MikroDash, a self-hosted, real-time web dashboard for RouterOS.
I set out to try my hand at some vibe coding using Claude to make an idea a reality and this was the result. (I am not a programmer). I wanted to share this with the Mikrotik community as I am sure there are others out there that will find this just as useful as it is to me.
What it does:
Live traffic chart, CPU/RAM/storage gauges, temperature and uptime.
Wireless clients with signal quality, band (2.4/5/6 GHz), IP and TX/RX rates.
World map showing where your traffic is going in real time.
DHCP leases, WireGuard VPN peers, firewall rule hit counts, and a live log stream.
Browser push notifications for interface down, WireGuard drops, high CPU and ping loss.
It connects directly to the RouterOS binary API. No agents, no SNMP, no page refreshes. Everything streams live via Socket.IO.
Self-hosted, Docker-ready, MIT licensed.
Designed for local network use only. Do not expose to the internet.
I noticed that an ARM image is now available, so I gave it a try today.
The setup was a bit difficult, as I ran into TLS handshake errors. I wasn’t able to get it working via the API over SSL, so for a short evaluation I used the plain API instead.
The dashboard seems quite “unstable”. The connection count fluctuates significantly (for example between none, 1, and the real value of 70+), and I observed similar behavior in the resource monitor, where statistics briefly show as “unknown.” Overall, the data appears inconsistent. The interfaces dashboard was the weirdest of all. It sometimes showed 3Gbps rates on my LTE link, which is a 50/10 plan right now. No way this could push 3Gbps. And ether1 showed also 2Gbps+ values, but it is a gigabit port. Very very spooky.
From my perspective, the system feels quite unstable at the moment. Also, the requirement to use a test policy just to run a ping seems unnecessary - it would be helpful if this could be disabled.
ping bellow 1 ms, for example 0.350 ms is shown as 350 ms (millileconds). Actually it’s 350 us (microseconds).
ethernet status - router 1 - ether1 is permanently down., router 2 - ether1 is permanently up. When I switch from one router to another, I get notification - ether1 up (or down). But ether1 on router 1 is not the same interface as ether1 on router 2