From 4520a1e075200ed213dd619fbf0fc8217fc74015 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Tue, 15 Sep 2026 10:54:36 +0200 Subject: [PATCH 1/3] Document `fixed_booleans_in_json` compatibility option --- sync/advanced/compatibility.mdx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sync/advanced/compatibility.mdx b/sync/advanced/compatibility.mdx index b5f114045..51b5e7d36 100644 --- a/sync/advanced/compatibility.mdx +++ b/sync/advanced/compatibility.mdx @@ -105,6 +105,7 @@ This table lists all fixes currently supported: | `versioned_bucket_ids` | [Link](#versioned_bucket_ids) | 1.15.0 | 2 | | `fixed_json_extract` | [Link](#fixed_json_extract) | 1.15.0 | 2 | | `custom_postgres_types` | [Link](#custom_postgres_types) | 1.15.3 | 2 | +| `fixed_booleans_in_json` | [Link](#fixed_booleans_in_json). | 1.27.0 (TODO) | None | | `unstable_sqlite_expression_engine` | [Link](#unstable_sqlite_expression_engine). | 1.22.0 | None (unstable) | ### `timestamps_iso8601` @@ -180,6 +181,14 @@ With this fix applied: ``` - Multi-ranges sync as an array of ranges. +### `fixed_booleans_in_json` + +Most source databases supported by PowerSync have a dedicated type for boolean values. SQLite does not, and uses `0` and `1` integers by convention. For boolean columns, PowerSync correctly translates values to integers. + +Booleans can also appear in nested structures, e.g. in JSON objects or arrays, or plain Postgres composite types, ranges and arrays. These are synced as JSON which supports boolean literals, but the service still used to map boolean values embedded in such structures to integers. + +Enabling this option makes the service preserve booleans in JSON structures. + ### `unstable_sqlite_expression_engine` From fcc0d7a32d6c58f45a04adbaa8d82b0bb28244de Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Mon, 12 Oct 2026 15:43:55 +0200 Subject: [PATCH 2/3] Apply batched suggestions from code review Co-authored-by: benitav --- sync/advanced/compatibility.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sync/advanced/compatibility.mdx b/sync/advanced/compatibility.mdx index 51b5e7d36..87b3fd8cf 100644 --- a/sync/advanced/compatibility.mdx +++ b/sync/advanced/compatibility.mdx @@ -105,7 +105,7 @@ This table lists all fixes currently supported: | `versioned_bucket_ids` | [Link](#versioned_bucket_ids) | 1.15.0 | 2 | | `fixed_json_extract` | [Link](#fixed_json_extract) | 1.15.0 | 2 | | `custom_postgres_types` | [Link](#custom_postgres_types) | 1.15.3 | 2 | -| `fixed_booleans_in_json` | [Link](#fixed_booleans_in_json). | 1.27.0 (TODO) | None | +| `fixed_booleans_in_json` | [Link](#fixed_booleans_in_json). | 1.27.0 | None | | `unstable_sqlite_expression_engine` | [Link](#unstable_sqlite_expression_engine). | 1.22.0 | None (unstable) | ### `timestamps_iso8601` @@ -185,9 +185,9 @@ With this fix applied: Most source databases supported by PowerSync have a dedicated type for boolean values. SQLite does not, and uses `0` and `1` integers by convention. For boolean columns, PowerSync correctly translates values to integers. -Booleans can also appear in nested structures, e.g. in JSON objects or arrays, or plain Postgres composite types, ranges and arrays. These are synced as JSON which supports boolean literals, but the service still used to map boolean values embedded in such structures to integers. +Booleans can also appear in nested structures, e.g. in JSON objects or arrays, or plain Postgres composite types, ranges and arrays. These are synced as JSON which supports boolean literals, but the Service still used to map boolean values embedded in such structures to integers. -Enabling this option makes the service preserve booleans in JSON structures. +Enabling this option makes the Service preserve booleans in JSON structures. ### `unstable_sqlite_expression_engine` From aaeb330be96922bc18d5b999a5a93144cb7cc8af Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Mon, 12 Oct 2026 16:56:37 +0200 Subject: [PATCH 3/3] Address Claude feedback --- .../vale/config/vocabularies/PowerSync/accept.txt | 1 + sync/advanced/compatibility.mdx | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/vale/config/vocabularies/PowerSync/accept.txt b/.github/vale/config/vocabularies/PowerSync/accept.txt index 024557270..991997fce 100644 --- a/.github/vale/config/vocabularies/PowerSync/accept.txt +++ b/.github/vale/config/vocabularies/PowerSync/accept.txt @@ -10,6 +10,7 @@ backpressure baz binlog bitwise +booleans bundler bundlers cardinalities diff --git a/sync/advanced/compatibility.mdx b/sync/advanced/compatibility.mdx index 87b3fd8cf..d0d1a3c3e 100644 --- a/sync/advanced/compatibility.mdx +++ b/sync/advanced/compatibility.mdx @@ -105,8 +105,8 @@ This table lists all fixes currently supported: | `versioned_bucket_ids` | [Link](#versioned_bucket_ids) | 1.15.0 | 2 | | `fixed_json_extract` | [Link](#fixed_json_extract) | 1.15.0 | 2 | | `custom_postgres_types` | [Link](#custom_postgres_types) | 1.15.3 | 2 | -| `fixed_booleans_in_json` | [Link](#fixed_booleans_in_json). | 1.27.0 | None | -| `unstable_sqlite_expression_engine` | [Link](#unstable_sqlite_expression_engine). | 1.22.0 | None (unstable) | +| `fixed_booleans_in_json` | [Link](#fixed_booleans_in_json) | 1.27.0 | None | +| `unstable_sqlite_expression_engine` | [Link](#unstable_sqlite_expression_engine) | 1.22.0 | None (unstable) | ### `timestamps_iso8601` @@ -183,11 +183,14 @@ With this fix applied: ### `fixed_booleans_in_json` -Most source databases supported by PowerSync have a dedicated type for boolean values. SQLite does not, and uses `0` and `1` integers by convention. For boolean columns, PowerSync correctly translates values to integers. +Most source databases supported by PowerSync have a dedicated type for boolean values. SQLite does not. It represents booleans as the integers `0` and `1` by convention. For boolean columns, PowerSync correctly translates values to integers. -Booleans can also appear in nested structures, e.g. in JSON objects or arrays, or plain Postgres composite types, ranges and arrays. These are synced as JSON which supports boolean literals, but the Service still used to map boolean values embedded in such structures to integers. +Booleans can also appear in nested structures, e.g. in JSON objects or arrays, or plain Postgres composite types, ranges and arrays. These are synced as JSON, which supports boolean literals. Without this option, the Service maps boolean values embedded in such structures to integers. -Enabling this option makes the Service preserve booleans in JSON structures. +Enabling this option makes the Service preserve booleans in JSON structures. For instance, a MongoDB document field `settings: { notifications: true }` syncs as: + +- `{"notifications":1}` with the option disabled. +- `{"notifications":true}` with the option enabled. ### `unstable_sqlite_expression_engine`