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 hereNo 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
Decimalfield 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 everykeel 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!