element.version === currentVersion)) { versionNodes.unshift({ version: currentVersion, url: "#" }); } document.querySelector("#project-version").innerHTML = versionNodes.reduce( (acc, element) => { const status = currentVersion === element.version ? "selected disabled" : ""; return ` ${acc} `; }, `
gflare · v1.2.3

gflare

gflare logo

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

Package Version Hex Docs

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

GuideDescription
Getting StartedInstall, setup, and first worker
Configurationgleam.toml reference
BindingsHow bindings work
KVKey-value storage
D1SQLite database
TursoTurso database over HTTP
R2Object storage
QueuesMessage queues
Durable ObjectsStateful objects
Code GenerationSQL to Gleam code
MigrationsDatabase migrations
Error HandlingError patterns
RouterRouting and middleware
CORSCross-Origin Resource Sharing
Rate LimitingRequest rate limiting
ValidationRequest validation
LoggingStructured logging
TroubleshootingCommon issues

CLI Commands

CommandDescription
gleam run -m gflare -- initInitialize Cloudflare Workers
gleam run -m gflare -- buildBuild for Cloudflare Workers
gleam run -m gflare -- devBuild and start local dev server
gleam run -m gflare -- deployBuild and deploy to Cloudflare
gleam run -m gflare -- db generateGenerate Gleam code from SQL
gleam run -m gflare -- db generate --backend tursoGenerate for Turso
gleam run -m gflare -- db migrate create <name>Create a migration
gleam run -m gflare -- db migrate listList migration files
gleam run -m gflare -- db migrate runApply pending migrations
gleam run -m gflare -- db migrate run --tursoApply 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                 │
└─────────────────────────────────────────────────┘
  1. gleam build compiles your Gleam to .mjs files
  2. The CLI scans the compiled output for exported handlers (fetch, queue, etc.)
  3. It generates index.js (Cloudflare Worker entrypoint) and wrangler.toml
  4. esbuild bundles everything into a single file
  5. wrangler runs locally or deploys to Cloudflare

License

MIT — see LICENSE for details.

Search Document