2025-10-01 12:39:28 +02:00
2025-10-01 12:33:55 +02:00
2025-10-01 12:33:55 +02:00
2025-10-01 12:33:55 +02:00
2025-10-01 12:33:55 +02:00
2025-10-01 12:33:55 +02:00
2025-10-01 12:33:55 +02:00
2025-10-01 12:39:28 +02:00
2025-10-01 12:07:25 +02:00
2025-10-01 12:33:55 +02:00

Luxtools Web Application Scaffold

Luxtools is a minimal-but-complete scaffold for a retro-styled web application built with the Nim programming language. It demonstrates how to deliver an interactive HTMX front end backed by a Nim HTTP server that compiles down to a single distributable binary.

Why these choices?

  • Nim: Nim's ahead-of-time compilation and small standard library make it ideal for producing a single self-contained binary. Its async HTTP primitives provide great performance with minimal boilerplate.
  • HTMX: HTMX keeps the frontend simple by embracing hypermedia. We can ship almost entirely server-rendered HTML snippets, allowing Nim to stay in control without a bulky SPA build step.
  • TUI.CSS: This lightweight CSS framework offers a retro terminal aesthetic with zero JavaScript and a tiny footprint—perfect for a nostalgic interface while remaining easy to customize.
  • Single binary delivery: HTML templates and the entire static/ tree of vendored assets are embedded at compile time via staticRead, so the server ships with everything it needs. The compiled binary serves those resources directly from an in-memory table, while a separate www/ directory remains available for user-provided uploads.

Project layout

luxtools/
├── bin/                  # Output directory for release binaries
├── static/              # Vendored assets compiled into the binary static table
├── src/
│   └── luxtools.nim      # Main server entrypoint
├── templates/
│   └── index.html        # HTMX-powered landing page (compiled into the binary)
├── www/                 # Runtime asset directory served from disk
├── tests/
│   └── test_rendering.nim# Lightweight regression tests for HTML helpers
├── luxtools.nimble       # Nimble manifest with build/test tasks
└── README.md             # You're here

Running the app

nimble run

This command compiles the server (in debug mode) and starts it at http://127.0.0.1:5000. The console output confirms the address. Open the URL in a browser to see the TUI.CSS interface. The counter widget uses hx-post to mutate state on the server, and the clock panel uses hx-get with a timed trigger.

Building the single binary

nimble build

A release-optimized executable is emitted to bin/luxtools (or bin/luxtools.exe on Windows). Because the HTML is embedded at compile time, shipping this one file is enough.

Testing

nimble test

The test suite checks the generated HTMX markup to catch regressions in the HTML helpers without spinning up the HTTP server.

Next steps (optional)

  • Add persistence by wiring Nim's database libraries or a lightweight KV store.
  • Serve additional HTMX endpoints (e.g., todo lists, metrics dashboards).
  • Extend the styling by composing more TUI.CSS components or creating custom themes.
Description
Personal collection of tools bundled into a single applicaiton
Readme 1.3 MiB
Languages
CSS 65.1%
Go 17.7%
JavaScript 12.2%
HTML 5%