Tools
Tools: Static Serving, H3, and the Last Piece of v0.1
2026-02-18
0 views
admin
Static Serving from src/ ## The Real Story: H3 ## The Last Piece: velnora init ## v0.1 — The Skeleton Is Complete Last post, the Kernel was booting, the Host was listening, and projects were being discovered and routed. The skeleton was alive — but it had no skin. The Host could tell you about a project, but it could not actually serve one. That is what changed this week. The Host now serves files from src/ — just serving. No fallback logic, no integration detection. I did not even try to find any integration today because they do not exist yet at all. The entry point is src/index.html. Simple. For later, this will be moved to the fallback section — once integrations are real, static serving becomes the baseline when nothing else claims the request. But for now, it is the only thing running. I also added a simple JSON endpoint — $path/__json — to see a small JSON about the app itself. Just for debug, or maybe later for the app. It depends. It may be needed or it will be removed. Future releases will show. But the real story here is H3. H3 is the HTTP framework I chose for Velnora's Host early on, but this was the first time I actually went deep with it. And the experience was something different. If you come from Express — req, res, next() — H3 will feel weird at first. There is no req and res. You get an event object. You do not call res.send(). You return the response. If you return nothing, the next handler runs. That is it. Middleware is not a stack you push onto. It is a set of event handlers composed together. The framework decides what runs. You just define handlers and compose them. For the first few hours, my muscle memory kept fighting it. I kept reaching for Express patterns that do not exist here. The documentation is good but minimal — the UnJS ecosystem assumes you read source code. That is fine, but it is a different experience. Once I stopped mapping H3 onto Express and started thinking in its own terms, things clicked. The code got shorter. The composition got cleaner. Static serving slotted in naturally alongside the Vite middleware. Static serving is now the baseline. Every project in a Velnora workspace gets it for free. No config needed. With serving working, there was one thing left for v0.1 — a way to start a workspace from nothing. I built the velnora init <directory> command. The directory is required for now. Later, when the questionary is implemented — including questions from integrations — it will be optional or changed. But the decision here was deliberate: keep it minimal, keep it honest. The init command does not pretend to know what your workspace looks like yet. It just gives you the two files that make a valid Velnora workspace — a config and a package.json — and gets out of your way. The rest is manual for now, alas. This is where the questionary will live later. But for v0.1, scaffolding an empty workspace is enough to close the loop. And with this, v0.1 is done. There is nothing flashy to show — no UI, no dashboard, no demo. But the pipeline is real. The Kernel boots, the Host serves, discovery works, and velnora init scaffolds a workspace. That is the whole point of v0.1: prove the pipeline exists. I will tag it as v0.1, but I will not publish yet. There is no rush. The code is there, the tag marks the milestone, and that is enough for now. Next: I am going to analyze the v0.2 release scope to decide which task comes first. The skeleton is standing — now it needs muscle. Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse
how-totutorialguidedev.toaimlkernel