FAQ#

General#

What is Bialet?#

Bialet is a full-stack web framework that integrates the Wren language with an HTTP server and a built-in SQLite database in a single binary. You write HTML with embedded queries and logic in .wren files — no build steps, no configuration files, no separate database server.

Why the name “Bialet”?#

Bialet is named after Juan Bialet Massé, an Argentine physician, lawyer, and educator known for his practical, no-nonsense approach to solving problems.

Is Bialet production-ready?#

Bialet is stable and used in production for small to medium traffic sites. It’s well-suited for CRUD apps, dashboards, internal tools, and prototypes. If you need horizontal scaling, WebSocket support, or high-throughput architectures, you may want to evaluate other frameworks.

How does Bialet compare to PHP / Flask / Rails / Django?#

Bialet is closer to PHP in philosophy: files map to URLs, no build step, and you write server-rendered HTML. Unlike PHP, Bialet bundles SQLite and the entire runtime in a single binary. Compared to Flask or Rails, Bialet is simpler and more opinionated — there’s no ORM, no middleware stack, and no routing DSL. The trade-off is less flexibility for less complexity.

When should I use Bialet?#

  • Prototyping and internal tools

  • Simple CRUD applications

  • Learning web development without configuration overhead

  • Single-server deployments where you want zero infrastructure

When should I NOT use Bialet?#

  • Applications requiring horizontal scaling or load balancing

  • Real-time features (WebSockets, SSE) — not currently supported

  • Teams that need a mature ecosystem of plugins and libraries

  • Projects where you must use PostgreSQL, MySQL, or other databases

What license is Bialet?#

MIT. You can use, modify, and distribute it freely.

Technical#

Can I use JavaScript?#

Yes. JavaScript is welcome but never required. Include <script> tags in your HTML, link to external JS files, or use libraries like Alpine.js for interactivity. Bialet apps are classic multi-page applications — use forms and links for navigation, and sprinkle JS where you need client-side behavior.

Can I use other databases besides SQLite?#

No. Bialet is built around SQLite. The database file (_db.sqlite3) is created automatically in your app directory. This keeps deployment simple: copy your files, and the database comes along.

What platforms are supported?#

Pre-built binaries for:

  • macOS ARM (Apple Silicon)

  • Linux x86_64

  • Linux ARM64

You can also build from source on any platform with a C17 compiler, SQLite3, and libcurl (see Installation).

Can I use CSS frameworks?#

Yes. Link any CSS file in your _app.wren template or include a <link> in your HTML. The Getting Started tutorial uses Flowbite + Tailwind, but Pico CSS, Bootstrap, or plain CSS work fine.

How does routing work?#

Bialet uses file-based routing. A request to /about maps to about.wren (or about.html). For dynamic routes, create a _route.wren file in a directory and use Request.route(pos) to read URL segments. See Structure & Routing.

How do I handle forms?#

Use Request.isPost to check the method and Request.post("field") to read submitted values. Redirect after processing with Response.redirect("/path"). See the Getting Started tutorial. tutorial for a complete example.

How do database queries work?#

Use backtick strings for prepared queries:

var users = `SELECT id, name FROM users WHERE active = ?`.fetch(1)

Query methods: .fetch(), .first(), .val(), .toNum(), .toBool(). See Database for details.

DB values come back as strings. How do I work with numbers?#

Use query.toNum() for direct numeric retrieval, or Num.fromString() for manual conversion:

var count = `SELECT COUNT(*) as c FROM votes`.toNum
var age = Num.fromString(row["age"])

How do I create reusable layouts?#

Create an _app.wren file with a Template class. This file is automatically loaded and its class is available to all pages in your app. Use the Site variable to access it:

// _app.wren
class Template {
  static head() { return "<head>...</head>" }
  static body() { return "</body></html>" }
}
// index.wren
Site.head()
Response.out("<h1>Hello</h1>")
Site.body()

Can I import external Wren modules?#

Yes, using import with a GitHub path:

import "gh:bialet/extra/mcp" for Mcp

See Structure & Routing.

Does Bialet support HTTPS?#

Bialet itself serves HTTP. For HTTPS in production, put a reverse proxy like nginx or Caddy in front of it. For local development, HTTP on localhost is fine.

How do I deploy a Bialet app?#

Copy your app directory and the bialet binary to a server, then run:

bialet /path/to/app

That’s it. No build pipeline, no CI/CD required. Use Docker Compose (see Installation) if you prefer containers.

Can I run multiple apps on one server?#

Yes. Run bialet with different -p (port) and -A (app directory) flags:

bialet -A /apps/site1 -p 7001 &
bialet -A /apps/site2 -p 7002 &

Does Bialet support WebSockets?#

Not currently. Bialet is designed for request/response HTTP. For real-time features, consider polling or integrating an external WebSocket service.

Is there a live-reload / hot-reload feature?#

On Linux, Bialet uses inotify to watch .wren files and automatically reload when they change. On macOS, restart the server manually for now.

Community#

How do I report a bug?#

Open an issue on GitHub Issues.

How can I contribute?#

See the Contributing Guide for setup, coding guidelines, and pull request workflow.

What’s planned for future releases?#

See the Roadmap for planned features and improvements.

Where can I ask questions?#

Is there a way to try Bialet online?#

Not yet, but you can install and run it in seconds:

curl -sSL https://get.bialet.dev | sh
echo 'return <h1>Hello!</h1>' > index.wren
bialet