Home

Presenting ilias, yet another dashboard because obviously the world needed one more

$$5620
https://piefed.social/u/halfdane posted on Mar 1, 2026 11:02

You know how it goes. You’re happily using Homer or Homepage for your home-lab dashboard. It’s great. It looks nice. It does its job. But then one evening you think: “Wouldn’t it be cool if the dashboard actually showed whether my services are alive without building a custom tile for homer?”

And instead of, oh I don’t know, contributing to homer or using Uptime Kuma next to it like a reasonable person, you go full not-invented-here and build your own thing from scratch.

So here’s ilias, a static HTML dashboard generator that actually checks your stuff.

OfozH6AxZoPCIc7.png

What makes it different from Homer / Homarr / Dashy / the other 47 dashboards?

It actually runs arbitrary checks. You give it a YAML config with HTTP endpoints and shell commands, and it:

  1. Executes all the checks in parallel (so treat it like a shell script and don’t be stupid!)
  2. Matches results against rules you define (status codes, exit codes, regex on output)
  3. Bakes everything into a single, self-contained HTML file. No JavaScript, no API server, no database, no Docker container running in the background

The output is literally one .html file. You can scp it to a Raspberry Pi running nginx, open it from a USB stick, email it to yourself … it just works. It’s HTML and CSS. That’s it.

The “why should I care” summary

  • Zero runtime dependencies. No Node.js, no Docker, no database. One tiny binary, one HTML file out.
  • Active health checks. HTTP requests, shell commands, regex matching on output. Not just a bookmark page.
  • Generate blocks. Run a command before rendering: pipe a Prometheus query into a chart, embed the image as a banner: now your dashboard can show graphs.
  • Single HTML file output. Icons, CSS, images, everything is inlined. The file is fully self-contained.
  • NixOS module included. Systemd timer, nginx vhost, sandboxed service. If you’re a NixOS person, it’s services.ilias.enable = true and you’re done (after verifying my code ofc, I’m just a rando on the internet!).
  • ~1,100 lines of Go. One external dependency (gopkg.in/yaml.v3). That’s the whole thing. You can read the entire codebase during lunch.

Quick taste

Minimal config:

title: My Lab  
groups:  
  - name: Services  
    tiles:  
      - name: Jellyfin  
        icon: https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/jellyfin.svg  
        link: http://jellyfin.lan:8096  
        slots:  
          - name: status  
            check:  
              type: http  
              target: http://jellyfin.lan:8096/health  
            rules:  
              - match: { code: 200 }  
                status: { id: ok, label: "✅" }  
              - match: {}  
                status: { id: down, label: "❌" }  
ilias generate -c config.yaml -o index.html  

Done. Open index.html. Your Jellyfin tile shows ✅ or ❌ based on whether /health returns 200.

Want to check disk space too? Add a command check:

      - name: Disk  
        slots:  
          - name: root  
            check:  
              type: command  
              target: "df / --output=pcent | tail -1 | tr -d ' '"  
            rules:  
              - match: { output: "^[0-6]\\d%$" }  
                status: { id: ok, label: "✅ <70%" }  
              - match: { output: "^[7-8]\\d%$" }  
                status: { id: warn, label: "⚠️ 70-89%" }  
              - match: {}  
                status: { id: full, label: "🔴 ≥90%" }  

Hover over any status to see the raw command output in a tooltip. Regex matching on stdout. Exit codes. The works.

“But what about…”

Uptime Kuma? Uptime Kuma is excellent for monitoring with alerting, history, and notifications. ilias can’t do any of that! It’s for when you want a single glanceable status page that you regenerate every 5 minutes via cron ro whatever. No history, no alerts, no database. Just “is everything green right now.”

Homer? Homer is a beautiful bookmark dashboard. ilias took that idea and asked “what if the bookmarks could tell you if my random, unsupported service behind them is actually working?” If you just want a pretty link page or use the services already supported, Homer is great. If you want status checks for everything baked in, give ilias a try.

Links

https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more
Reply
$$5627
https://lemmy.world/u/themachine posted on Mar 1, 2026 11:25
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

Ok, you might have finally gotten me to consider a “dashboard”. I’ve been wanting a simple public facing service status page and this sounds like a nice solution.

https://lemmy.world/comment/22411385
Reply
$$5628
https://piefed.social/u/halfdane posted on Mar 1, 2026 11:29
In reply to: https://lemmy.world/comment/22411385

Awesome, thanks for the consideration!

Please don’t immediately start public facing however - I literally just bashed the thing together in an afternoon, so who knows what kind of exploitable information leaks it might bring!

I’m personally using it from within a tailnet, so not public facing.

https://piefed.social/comment/10341994
Reply
$$5632
https://lemmy.world/u/Sinirlan posted on Mar 1, 2026 11:47
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

There is no such thing as “too much dashboards” friend ;)

https://lemmy.world/comment/22411561
Reply
$$5634
https://lemmy.world/u/ifGoingToCrashDont posted on Mar 1, 2026 12:01
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

Awesome work. Stuff like this is what makes selfhosted the best community on lemmy!

https://lemmy.world/comment/22411712
Reply
$$5653
https://lemmy.dbzer0.com/u/black_flag posted on Mar 1, 2026 13:00
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

I’ve gone to write something almost exactly like this several times and never quite finished. I like how this is set up. It seems like one thing that could be improved is parameterizing the configs a bit so that e.g. matching a 200 status gives a standard label that doesn’t need added to every job

https://lemmy.dbzer0.com/comment/24694616
Reply
$$5655
https://piefed.social/u/halfdane posted on Mar 1, 2026 13:04
In reply to: https://lemmy.dbzer0.com/comment/24694616

Hu, never thought of that - that’s a pretty neat idea! Thank you 🤗

https://piefed.social/comment/10342785
Reply
$$5687
https://sopuli.xyz/u/watson387 posted on Mar 1, 2026 14:24
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

This is a great idea! Nice work man!

https://sopuli.xyz/comment/22172254
Reply
$$5710
https://infosec.pub/u/TheButtonJustSpins posted on Mar 1, 2026 15:21
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

Just FYI, Homepage has ping functionality to check if your services are up. siteMonitor

https://infosec.pub/comment/20633731
Reply
$$5714
https://piefed.social/u/halfdane posted on Mar 1, 2026 15:38
In reply to: https://infosec.pub/comment/20633731

Yes, I’m aware of that, but I always found it weird to have a live service for something that hardly ever changes. And then I had the idea of this whole “fully self contained html”, and now I can’t imagine it another way 😆

That’s just opinions though, and if Homepage strikes your fancy go for it - it’s an awesome project.

https://piefed.social/comment/10344420
Reply
$$5719
https://piefed.social/u/halfdane posted on Mar 1, 2026 15:44
In reply to: https://lemmy.dbzer0.com/comment/24694616

Loved that idea so much that I went and implemented it: - The checks now have an automatic type inferrence and shorthand - introduced default rules that are used when nothing’s configured - realized that yaml-anchors always worked thanks to the lib I’m using.

So now with this preamble:

# Defaults are used when nothing is defined at the slot level. They can be overridden by defining rules directly on a slot.
defaults:
  rules:
    - match:
        code: 0
      status: { id: ok, label: "✅" }
    - match: {}
      status: { id: error, label: "❌" }

# YAML anchors: reusable fragments ilias doesn't interpret directly... 
# it's all just yaml
_anchors:
  pct_rules: &pct_rules           # works for disk, memory, CPU …
    - match:
        output: "^[0-6]\\d%$|^[0-9]%$"
      status: { id: ok, label: "✅ <70%" }
    - match:
        output: "^[7-8]\\d%$"
      status: { id: warn, label: "⚠️ 70–89%" }
    - match: {}
      status: { id: critical, label: "🔴 ≥90%" }

I can now have a tile like this:

      - name: Memory
        slots: # combine anchors and default rules as well as check shorthands
          - name: usage
            check: "free | awk '/^Mem:/ {printf \"%.0f%\", $3/$2 * 100}'"
            rules: *pct_rules
          - name: available
            check: "free -h | awk '/^Mem:/ {print $7 \" free\"}'"
            # uses default rules
          - name: total
            check: "free -h | awk '/^Mem:/ {print $2 \" total\"}'"
            # uses default rules

And the best? It’s fully backwards compatible ❤️

Thanks again for the suggestion!

https://piefed.social/comment/10344500
Reply
$$5742
https://lemmy.world/u/themachine posted on Mar 1, 2026 16:36
In reply to: https://piefed.social/comment/10341994

Ah, well, then perhaps I will monitor it.

For internal use I just monitor everything with zabbix. What Ive been wanting is (as I said) a public “status screen” that my few users can hit just to verify if things are in fact down or if it’s just them.

https://lemmy.world/comment/22415620
Reply
$$5792
https://piefed.social/u/halfdane posted on Mar 1, 2026 18:07
In reply to: https://lemmy.world/comment/22415620

Well, Ilias can certainly fill this niche. With a caveat:

Currently all output from checks are accessible as tooltips (so they’re in the HTML source), but for usecases such as yours it might be helpful to have the ability to suppress that kind of information leakage.

I think I’ll implement that in the coming days …

https://piefed.social/comment/10346285
Reply
$$5805
https://piefed.social/u/halfdane posted on Mar 1, 2026 19:13
In reply to: https://lemmy.world/comment/22415620

Couldn’t stop worrying about this, so I added: - --no-tooltips param: Don’t include check output for hover tooltips - --no-timestamp param: Omit the “Generated at” timestamp to hide system clock and monitoring cadence.

If you’re using these, I feel much better about making the html publicly accessible, but when you set up a config please remember that links-tags can expose your internal topology and the tile/slot name might do the same! Don’t go naming your tiles something like “Database Primary”, “Payment Service Worker”, or “Internal Auth API”!

(unless you wanna place a honeypot)

https://piefed.social/comment/10347073
Reply
$$5806
https://lemmy.today/u/altphoto posted on Mar 1, 2026 19:14
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

Hey everyone! I think I got a cool idea for a dashboard!

https://lemmy.today/comment/22591446
Reply
$$5808
https://piefed.social/u/halfdane posted on Mar 1, 2026 19:21
In reply to: https://lemmy.today/comment/22591446

Is it … a new tool? I love new tools 🥹

https://piefed.social/comment/10347185
Reply
$$5811
https://lemmy.today/u/altphoto posted on Mar 1, 2026 19:32
In reply to: https://piefed.social/comment/10347185

Its just an idea….

When my router says “threat” and gives me an IP address, this address gets added to a big ass database that all routers see. Then every router in the world blocks their ass out…..get them to go to a government office and ID themselves as an adult if they want back in.

https://lemmy.today/comment/22591836
Reply
$$5820
https://piefed.social/u/halfdane posted on Mar 1, 2026 20:04
In reply to: https://lemmy.today/comment/22591836

Wow, I can really see this taking off in the international dashboading-scene!

https://piefed.social/comment/10347671
Reply
$$5822
https://sh.itjust.works/u/WhyJiffie posted on Mar 1, 2026 20:06
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

wonderful! now somebody needs to rewrite this in Rust and we are done!

https://sh.itjust.works/comment/24047580
Reply
$$5823
https://piefed.social/u/halfdane posted on Mar 1, 2026 20:09
In reply to: https://sh.itjust.works/comment/24047580

Go for it 👍

https://piefed.social/comment/10347722
Reply
$$5824
https://c.im/users/meltedcheese posted on Mar 1, 2026 20:11
In reply to: https://lemmy.today/comment/22591836

@altphoto @selfhosted This is essentially what Pi-Hole does. It handles your DNS queries and blocks any that you want. It automatically updates blocklists from a variety of sources available. Some IPs are trackers, advertisers, malware, phishing and other notorious or otherwise obnoxious. You decide. Works great. I have about 1.7 million IP addresses blocked, but only a couple thousand or so show up on any day. Amounts to between 5% and 8% of my total traffic. I cannot fully express my joy with the FREE software. I have a dedicated Raspberry Pi 4B on my network for this purpose, but it can run on almost any Linux variant. #RPi #homelab #DNS #PiHole

https://c.im/users/meltedcheese/statuses/116155738814987928
Reply
$$5826
https://sh.itjust.works/u/WhyJiffie posted on Mar 1, 2026 20:12
In reply to: https://lemmy.today/comment/22591836

soo.. servers your router doesn’t like for whatever reason blocked for everyone else? with gov ID checks? why would we want that?

and how is this a dashboard idea?

https://sh.itjust.works/comment/24047639
Reply
$$5833
https://lemmy.decronym.xyz/u/Decronym posted on Mar 1, 2026 20:20
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:

Fewer Letters More Letters
DNS Domain Name Service/System
IP Internet Protocol
PiHole Network-wide ad-blocker (DNS sinkhole)
RPi Raspberry Pi brand of SBC
SBC Single-Board Computer

[Thread #124 for this comm, first seen 1st Mar 2026, 20:20] [FAQ] [Full list] [Contact] [Source code]

https://lemmy.decronym.xyz/comment/14576
Reply
$$5834
https://lemmy.world/u/papelitofeliz posted on Mar 1, 2026 20:20
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

I’m sorry if this is a dumb question, I am on my phone and did not check much of the repo. I was thinking of adding a dashboard to my stack, and was thinking about Prometheus + grafana because of versatility but the main con is the complexity. How are the graphs generated on your example? Are they static images generated manually?

https://lemmy.world/comment/22419477
Reply
$$5886
https://sh.itjust.works/u/WhyJiffie posted on Mar 1, 2026 21:28
In reply to: https://piefed.social/comment/10347722

it was just a joke, to the “one more dashboard” part :D its fine

https://sh.itjust.works/comment/24048659
Reply
$$5929
https://lemmy.today/u/altphoto posted on Mar 1, 2026 22:33
In reply to: https://piefed.social/comment/10347671

Thanks its super unique LOL.

https://lemmy.today/comment/22595392
Reply
$$5930
https://lemmy.today/u/altphoto posted on Mar 1, 2026 22:36
In reply to: https://sh.itjust.works/comment/24047639

It’s just an idea! Geez!

https://lemmy.today/comment/22595433
Reply
$$5932
https://sh.itjust.works/u/WhyJiffie posted on Mar 1, 2026 22:39
In reply to: https://lemmy.today/comment/22595433

ok, but who is the target audience for that? I am interested now

https://sh.itjust.works/comment/24049759
Reply
$$5936
https://lemmy.today/u/altphoto posted on Mar 1, 2026 22:45
In reply to: https://sh.itjust.works/comment/24049759

Its a sarcastic comment because this post was started as “yet another….”

https://lemmy.today/comment/22595620
Reply
$$6007
https://scrapetacular.ydns.eu/u/admin posted on Mar 2, 2026 02:17
In reply to: https://lemmy.today/comment/22591836

The only problem is it probably IS an adult human, a 85 year old running windows XP to check the church newsletter every Sunday.

(the newsletter is also hosted on xp)

https://scrapetacular.ydns.eu/activities/a6850906-2a52-4418-a9af-673eec6c6c42
Reply
$$6012
https://lemmy.world/u/CeeBee_Eh posted on Mar 2, 2026 02:34
In reply to: https://piefed.social/c/selfhosted/p/1830079/presenting-ilias-yet-another-dashboard-because-obviously-the-world-needed-one-more

You had me at “no Node.js”

https://lemmy.world/comment/22424105
Reply
$$6017
https://scrapetacular.ydns.eu/u/admin posted on Mar 2, 2026 02:41
In reply to: https://lemmy.today/comment/22591446

Gonna need a dashboard to keep track of my favorite dashboard projects, you in?

https://scrapetacular.ydns.eu/activities/bcfa477a-44a4-4bd9-99b4-18c76b29c678
Reply
$$6052
https://piefed.social/u/halfdane posted on Mar 2, 2026 04:34
In reply to: https://lemmy.world/comment/22419477

I love grafana, but it’s a resource hog, and my machine isn’t powerful. Prometheus/node_exporter however is as lightweight as it can get.

So I made a little Python script that fetches the data from Prometheus and uses mathplotlib to generate a graph.

The dashboard calls that python script for every configured graph and embeds the image so it looks nice.

You can find the script in one of my other repos (Prometheus-renderer probably), but there are dozen similar ones: search github for Prometheus renderer and you’ll see

If there are other things unclear, please don’t hesitate to ask

https://piefed.social/comment/10351971
Reply
$$6061
https://lemmy.today/u/altphoto posted on Mar 2, 2026 05:04
In reply to: https://scrapetacular.ydns.eu/activities/bcfa477a-44a4-4bd9-99b4-18c76b29c678

Excellent! A dashboard dashboard!

https://lemmy.today/comment/22600808
Reply
$$6233
https://lemmy.dbzer0.com/u/black_flag posted on Mar 2, 2026 14:22
In reply to: https://piefed.social/comment/10344500

Cool ❤

https://lemmy.dbzer0.com/comment/24714156
Reply