FAQ#

General#

What is Bialet?#

Bialet is a full-stack web framework that integrates the Wren language (based on wren.io) 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

  • Windows x86_64

You can also build from source on any platform with a C17 compiler and SQLite3. libcurl is optional but recommended for production (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 Advanced Routing.

How do I handle forms?#

Use Request.isPost to check the method and Request.post("field") to read submitted values (returns null when missing — always provide a fallback with || ""). Redirect after processing with Response.redirect("/path"). See the Getting Started 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. Import it and use App.render to wrap your content:

// _app.wren
class Template {
  static layout(content) {
    return <html>
      <head><title>My App</title></head>
      <body>
        <nav>...</nav>
        {{ content }}
        <footer>...</footer>
      </body>
    </html>
  }
}
// index.wren
import "_app" for Template as App

return App.layout(<h1>Hello</h1>)

See Advanced Routing for more layout patterns.

Can I import external Wren modules?#

Yes, using import with a GitHub path:

See Advanced 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?#

See the full Deployment Guide covering reverse proxies (nginx, Apache, Caddy), systemd services, Docker, and TLS setup.

The short version: copy your app directory and the bialet binary to a server, run bialet /path/to/app, and put a reverse proxy in front of it.

Can I run multiple apps on one server?#

Yes. Run bialet with different ports and app directories:

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

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 -fsSL https://get.bialet.dev | sh
echo 'return <h1>Hello!</h1>' > index.wren
bialet dev

bialet dev opens http://127.0.0.1:7001 in your browser for you.