Small on purpose.#

It should have stayed this simple.

One executable: an HTTP server, SQLite, and the Wren scripting language. Build data-driven web apps from .wren files. No package manager, no YAML, no separate database server, no build step. The Linux x86_64 binary is 3.7 MB.

curl -fsSL https://get.bialet.dev | sh
Install for Windows Download for Windows (.zip)

Zero installation required. Just extract and run.

Download the binaries (all platforms)

Zero installation required. Just extract and run.

Other platforms, Homebrew, and Docker · MIT licensed · v1.2.7

The guestbook example.

Under a minute, start to styled

  • A page, a form handler, a migration.
  • bialet serves the files. No build step.
  • Then a stylesheet and a layout class.

Rather type it than watch it? The quick start has the same files, in order, with the reasoning between them.

Build this guestbook

$ bialet dev → 127.0.0.1:7001


Building with AI?

Paste this into Claude, ChatGPT, or Cursor so it writes idiomatic .wren code from the first response.

View the full prompt →

Or feed the whole site to your tool: llms.txt (index) and llms-full.txt (every page, plain text).


What you get#

One executable does the work: it serves HTTP, opens the SQLite file, and runs your Wren code. There is no stack to assemble around it.

One executable

Copy the binary to a server and run it. No runtime to install, no node_modules. 3.7 MB on Linux x86_64.

SQLite is included

The database is one file. No connection strings, no service to provision, no separate process. WAL mode is one flag.

No build step

Save a .wren file and refresh the browser. No compiler, no bundler, no watch process.

HTML, CSS, and SQL

Server-rendered pages, standard HTML and CSS, and SQL you write yourself. Add JavaScript only if you want it.


What it costs#

The tradeoffs

Small means bounded. These are the limits that come with it.

  • One worker per process, with instant queueing. Requests are served sequentially per worker. For parallel concurrency on multi-core servers, spin up multiple local instances behind Caddy or nginx. See Deployment.

  • HTTP/1.0, no native TLS. Bialet serves HTTP. Put nginx, Apache, or Caddy in front for HTTPS, HTTP/2, rate limiting, request buffering, and static-asset caching. See Deployment.

  • Wren, with basic tooling. Apps are written in Wren. The VS Code and Vim plugins provide syntax highlighting; autocomplete and an LSP are on the roadmap.

  • No WebSockets. Request/response HTTP only. Use polling or an external service for realtime features.


Where it fits#

Internal tools and admin panels

One process, one SQLite file, and a few users on one small server.

Prototypes and small sites

One directory to deploy. Add a reverse proxy when the site goes public.

Learning and teaching

HTML, SQL, and one scripting language. Nothing else to install.

Not a fit if you need multi-server horizontal scaling, in-process TLS, WebSockets, or a package ecosystem. Bialet does not provide them. See Why Bialet? for the longer version.


Maintained by one developer

Bialet is stable for personal use. There is no commercial support or SLA. Bugs go to GitHub Issues; questions and project showcases go to GitHub Discussions. Planned work is in the roadmap.

Join the discussion →

© 2026, Rodrigo Arce  ·  GitHub  ·  bialet.dev