Repository navigation
v1.1.0
1.1.0
Case-Insensitive Validation Rules
Unique and Exists validation rules are now case-insensitive by default — "Admin@Example.COM" and "admin@example.com" are correctly treated as the same value. New UniqueSensitive and ExistsSensitive variants are available when exact casing matters (API keys, tokens, etc.).
- Unique(DbPool, String) — case-insensitive uniqueness check (uses
LOWER()) - UniqueSensitive(DbPool, String) — case-sensitive uniqueness check
- Exists(DbPool, String) — case-insensitive existence check (uses
LOWER()) - ExistsSensitive(DbPool, String) — case-sensitive existence check
Int Route Parameters
Route parameters typed as Int in controller function signatures are now automatically parsed from the URL string. If parsing fails, a 404 response is returned — no more manual int.parse boilerplate in every handler.
/// @get "/users/:id"
pub fn show(ctx: Context(App), id: Int) -> Response {
// id is already an Int — no parsing needed
}Flexible Controller Discovery
Controllers are no longer limited to src/app/http/controllers/. The route compiler now discovers controllers anywhere under src/ by naming convention:
*_controller.gleam— e.g.,src/app/billing/invoice_controller.gleamcontroller.gleam— e.g.,src/app/billing/controller.gleam
The legacy src/app/http/controllers/ directory is still supported for backwards compatibility.
Bug Fixes
- SQLite placeholder conversion —
$1placeholders inside SQL string literals (e.g., Argon2 hashes) are no longer incorrectly converted to? - Database error message — missing database parameter errors now correctly reference
.envandconfig/database.tomlinstead of the non-existentdatabase_provider.gleam