0.456 (05 Jun 2026)

5 June, 2026

This release focuses on migration reliability, query correctness for fields with digit suffixes, and flow dashboard performance.

Module-Aware Subscriber Scaffolding

Subscribers defined on models inside a module now scaffold into the correct module directory. Previously, subscriber handlers always landed in the project-root subscribers/ folder, even when the declaring model lived in a module. They now follow the same convention as jobs, flows, and custom functions:

my-project/
├── modules/
│   └── orders/
│       ├── orders.keel
│       └── subscribers/
│           └── onOrderCreated.ts   ← now lands here

No action is needed for existing projects. New scaffolds will automatically use the right path.

Decimal and Negative Default Fixes

Two migration bugs affecting numeric @default values have been fixed:

  • Integer decimal defaults: a Decimal field with @default(0) or @default(10) produced invalid SQL, causing migrations to fail. These now render correctly.
  • Negative numeric defaults: fields with defaults like @default(-1) or @default(-1.5) caused a redundant migration on every keel run, even when nothing had changed. This is now fixed.
model Product {
    fields {
        discount Decimal? @default(0)
        temperature Number? @default(-1)
    }
}

Column Name Casing for Digit-Suffixed Fields

Fields with digits at the end of a word boundary (e.g. itemBarcode2) now resolve to the correct database column in useDatabase() queries, where clauses, joins, and orderBy. Previously these produced item_barcode2 instead of the correct item_barcode_2, causing queries to reference non-existent columns.

Better Docker Error Message

keel run and keel test now show a clear, single-line error when Docker is not running, instead of printing the raw Docker SDK error multiple times.

For any issues or feedback, please contact us at help@keel.so.

Thank you for using Keel!