Small on purpose.#
It should have stayed this simple.
Bialet is a small web framework with everything you need and nothing you don't. Write a little Wren, store your data in SQLite, and serve your application.
curl -fsSL https://get.bialet.dev | sh
No installation: extract and run.
From zero to styled in under a minute
- A page, a form handler, a migration.
bialetserves 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.
$ bialet dev → 127.0.0.1:7001
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, no bundler. 3.7 MB on Linux.
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. Wren is a small, class-based, object-oriented language.
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 and the measured numbers in Performance.
HTTP/1.1, one request per connection. No keep-alive, 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. See Wren Language Guide for what the language does and does not give you.
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.
Built with Bialet#
dev.ar is a free .dev.ar subdomain service
running on Bialet: server-rendered pages, a session login, and a redirect
dashboard. Over 22 days it served about 160,000 requests — two-thirds of them
scanner traffic answered with a 403 or 404 — with fewer than 0.1% 5xx
responses. Built with Bialet