v0.5.3 is now live!

Write Less Code,
Build More Features.

The Productive Framework. Developer-friendly, lightning fast, and designed for rapid development.

Nim Lang
Type Safe
Batteries Included
user_controller.nim
|

Everything you need to ship it.

🚀 The 1-Minute Challenge: From "jazzy new" to a secured API in less than 60 seconds.
Built-in Authentication
Tired of writing Auth? Registration, login, and profile management ready out-of-the-box. Secure JWT included.
Automatic Data Validation
Secure data, clean code. Auto-validate JSON/Form requests before they even reach your controller.
SQLite + PostgreSQL
One await-first API, versioned migrations, a typed ORM, and portable CRUD from local SQLite to production PostgreSQL.
Scaffolding CLI
Start with `jazzy new`, then create reviewable migrations and seeders from the CLI instead of hand-wiring project setup.
High-Performance Async
Security at speed. Powered by Mummy, featuring fully async middleware for CORS, Logging, and custom guards.
Developer-First Errors
Debug without the pain. Standardized, cleaner JSON error responses that your frontend developers will love.

Authentication? It's built-in.

Secure, session-less JWT authentication built right into the core. No external libraries needed.

AuthController.nim
proc login*(ctx: Context) {.async.} =
  let user = DB.table("users").where("email", ctx.input("email")).first()

  if not user.isNull() and verifyPassword(ctx.input("password"), user.getString("password")):
    let token = ctx.login(user)
    ctx.json(%*{"token": token, "message": "Welcome!"})
  else:
    ctx.status(401).json(%*{"error": "Invalid credentials"})

Member Login

Email
Password

Validation? Just define rules.

Expressive and modern validation syntax. Define your rules, let Jazzy handle the rest.

PostController.nim
proc createPost(ctx: Context) {.async.} =
  let data = ctx.validate(%*{
    "title": "required|min:3",
    "status": "in:draft,published"
  })
  
  # Logic...
  echo data.getString("title")

New Post

Title
required|min:3

A database workflow, not just a query builder.

Configure once in .env, migrate safely, model your data, then ship awaited CRUD. SQLite and PostgreSQL keep the same developer experience.

THE DATABASE PATH

Config to production API

Follow the guide
.env ready
DB_CONNECTION=postgres
DATABASE_URL=postgresql://jazzy:•••@db:5432/app
DB_POOL_MIN=1
DB_POOL_MAX=1

STEP 01

Configure

One driver switch. No connection boilerplate.

DriverSQLite ↔ PostgreSQL
Public APIawait-first
Migrationstransactional

Built with Jazzy

See what our community is building.