---
url: /blog/2026/v0.6.4.md
description: >-
  v0.6.4 moves derived code out of the project root, and seeds new source
  folders with a default page and a default API route.
---

Two small changes in `v0.6.4`. Neither needs anything from you, but both deserve a note.

## lib/ is now var/lib/

All the time, all derived code went into `lib/` at the project root.

To be honest, I cannot recall why. I just got used to having a `lib/` at the root
and never gave it a thought.

But after the big changes of the last months, it started to look a bit alien next to `src/`.
The project root is about source code, and nothing there should cause a hop during a visual scan.

Then there are `var/` and `tmp/`, the other beasts.
They are automatically treated as something transient, a sibling of the source code
and not a part of it. Which is exactly what derived code is.

So as of v0.6.4, `lib/` goes into `var/`.

It is an internal change, with no implications for your code. Nothing to update.
Just delete the old `lib/` and rerun the dev server:

```sh
rm -rf lib
```

One thing to expect: the first start will take longer on large codebases,
because all the derived types are recomputed, with the full dependency graph.
Once.

One rough edge, so you do not lose time to it:
TypeScript files in `var/lib` do not resolve in the editor.
The IDE's language server has trouble with them,
while `typecheck` passes, and files in `src/` resolve just fine.

So if your editor underlines an import pointing into `var/lib` and `typecheck` is green,
that is this, not your code.

## A default page and a default route

The second change fixes an awkward first impression.

You create a new project, open `localhost:4556`, and get a 404.
Not exactly the welcome a framework should give.

Now a source folder is seeded with a default index page and a default API index route,
so the first thing you see is something that works.
