gflare
Zero-glue Gleam framework for Cloudflare Workers. Write Gleam, deploy to Cloudflare — no index.js, no wrangler.toml editing, no JavaScript.

Quick Example
import gflare/bindings.{type Env}
import gflare/worker.{type Context}
import gflare/request.{type HttpRequest}
import gflare/response
import gleam/javascript/promise
// This function handles every HTTP request to your worker
pub fn fetch(request: HttpRequest, env: Env, ctx: Context) {
response.new(200)
|> response.set_body("Hello from Gleam!")
|> promise.resolve
}
Features
- Pure Gleam bindings for Cloudflare Workers APIs
- KV, D1, R2, Queues, Durable Objects support
- Turso database over HTTP (no npm packages)
- SQL code generation (like squirrel for SQLite)
- Database migrations for D1 and Turso
- Typed error handling
- esbuild bundling, wrangler integration
Quick Start
gleam new my-worker
cd my-worker
gleam add gflare
gleam run -m gflare -- init
Write your handler, then:
gleam run -m gflare -- dev # Run locally
gleam run -m gflare -- deploy # Deploy to Cloudflare
Documentation
CLI Commands
| Command | Description |
gleam run -m gflare -- init | Initialize Cloudflare Workers |
gleam run -m gflare -- build | Build for Cloudflare Workers |
gleam run -m gflare -- dev | Build and start local dev server |
gleam run -m gflare -- deploy | Build and deploy to Cloudflare |
gleam run -m gflare -- db generate | Generate Gleam code from SQL |
gleam run -m gflare -- db generate --backend turso | Generate for Turso |
gleam run -m gflare -- db migrate create <name> | Create a migration |
gleam run -m gflare -- db migrate list | List migration files |
gleam run -m gflare -- db migrate run | Apply pending migrations |
gleam run -m gflare -- db migrate run --turso | Apply migrations to Turso |
How It Works
┌─────────────────────────────────────────────────┐
│ Your Gleam code (handlers + binding calls) │
├─────────────────────────────────────────────────┤
│ gflare library (types, FFI, wrappers) │
├─────────────────────────────────────────────────┤
│ gleam build │
│ → outputs .mjs files in build/dev/javascript/ │
├─────────────────────────────────────────────────┤
│ gflare CLI (detects handlers, generates glue) │
│ → generates index.js + wrangler.toml │
├─────────────────────────────────────────────────┤
│ esbuild (bundles into single file) │
├─────────────────────────────────────────────────┤
│ wrangler dev / wrangler deploy │
└─────────────────────────────────────────────────┘
gleam build compiles your Gleam to .mjs files
- The CLI scans the compiled output for exported handlers (
fetch, queue, etc.)
- It generates
index.js (Cloudflare Worker entrypoint) and wrangler.toml
esbuild bundles everything into a single file
wrangler runs locally or deploys to Cloudflare
License
MIT — see LICENSE for details.