One thing that has lived rent-free in my head for a long time is that Preact never really had the meta-framework experience our community deserved. We have always had ways to make Preact work in other ecosystems.

A lot of those paths came with the preact/compat tax, moving targets, or a developer experience that fundamentally belonged to someone else's stack. An example of this is, we supported Next.js back when the pages router was still the dominant model, but once the app router arrived that story effectively broke. Up to this day only the pages router really works.

A few weeks ago a post on X pushed me to try and give our community the meta-framework again. I had originally imagined doing the usual maintainer thing: build a small MVP, provide all the moving pieces, and hope the ecosystem carries the rest. I have tried versions of that before and it never really worked out. Too many pieces were missing, things that I didn’t anticipate for. Having learned from prior experience I took a different approach, I decided to just build the thing.

That sounds slightly dramatic I know. Instead of treating the framework as a thin wrapper, I started from the system I actually wanted:

  • selective rendering choice per page

  • a manifest-driven model for pages, and an opt-in to just use a filesystem-driven approach

  • first-class Vite integration, and their wonderful environments API

  • deployment adapters to enable anyone to deploy anywhere (starting with Cloudflare and Vercel)

  • no forced compat mode for Preact users

The vision mattered, it’s what I was going to use as the constraint going forward. Giving the agents I used this constraint in the form of a vision file was genuinely helpful, it gave the right context every time the agent started executing a task.

I typed the architecture and constraints into specs, iterated on those specs, and let the model work through pieces of implementation. If you look through the docs (this folder should actually be renamed to .agents/docs because the actual user-facing docs are at examples/docs) in the repository, you can see that evolution in public. The combination of the vision file with the agent updating its own docs provided a solid base for any future development.

That is the version of AI-assisted development I actually believe in. The time-consuming part was getting files written which is now accelerated, the hard part was getting a nice architecture and providing proper guardrails. The agent put out a lot of versions and after me trying out a bunch that adhered to my specifications Pracht actually started feeling good enough. The remaining work became familiar maintainer work:

  • do we have any regression hotspots? Are they sufficiently tested?

  • do we need to document any security concerns?

  • do we have any DX footguns?

I had to start over a bunch of times because of regressions, the verification and guardrails became a problem for the initial development, to prevent future regressions we built a pretty extensive end-to-end suite with playwright. Hopefully this enables contributions to face less regression risk while still being open to agentic development.

I am happy with where it landed, Pracht now gives the Preact community a cleaner path to SSR, SSG, and CSR deployments without forcing users into someone else's assumptions. The fundamentals are there. It hooks into Vite, keeps the rendering model as lean as possible, and gives our community the possibility to define what the next chapter of the ecosystem should look like.

The broader lesson for me is more interesting than the launch itself, AI makes it easy to produce code, but with that velocity comes a quality tax. Our velocity might be endless with AI but we should instead use it to throw away most work, learn and produce stellar results instead. Let’s lift all of our products to their best possible version like this.

If the vision is weak, faster output just ends up being messy. A clear vision and the willingness to discard work ends up with a cleaner surface area.

Check out the repository, check out the docs and leave some feedback!

Keep reading