DATE:
AUTHOR:
PowerSync Product Team
PowerSync Service

PowerSync Service: v1.15.8

DATE:
AUTHOR: PowerSync Product Team

We are pleased to announce the release of version 1.15.8 of the PowerSync Service. The PowerSync Service is published to Docker Hub as journeyapps/powersync-service for use in self-hosted setups. PowerSync Cloud instances receive Service updates automatically.

See the full changelog below.

Have any questions or feedback? Chat with us and the PowerSync community on Discord.

Changelog

v1.15.8 - 2025-10-17

  • [IMPROVED] Compact action to only process buckets changed since the last run. (PR #375)

  • [IMPROVED] Minor performance and stability improvements by upgrading the MongoDB driver. (PR #374)

  • [FIXED] Sync Streams: Support table aliases in sync stream queries. (PR #377)

  • [FIXED] Checksum calculation timeouts during initial replication on deployments with many buckets. (PR #375)

1.15.7 - 2025-09-19

  • [FIXED] SnapshotTooOld error when evaluating parameter queries in some cases. (PR #366)

1.15.6 - 2025-09-10

  • [IMPROVED] Input type conversion now happens during the source DB streams to correctly handle custom types in primary keys. (PR #363)

1.15.5 -2025-09-08

  • [IMPROVED] Node 22.19.0 other minor dependency updates. (PR #361)

1.15.4 - 2025-09-08

  • [IMPROVED] Avoid frequent write checkpoint lookups when the user does not have one. (PR #355)

  • [IMPROVED] Allow null as stream parameter to represent not providing any parameters. (PR #357)

1.15.3 - 2025-09-04

  • [ADDED] The custom_postgres_types compatibility option in the config: block in Sync Rules. When enabled, domain, composite, enum, range, multirange and custom array types will get synced in a JSON representation instead of the raw Postgres wire format. (PR #352)

  • [FIXED] Checksum calculation issues with large buckets. (PR #354)

1.15.2 (2025-09-02)

  • [FIXED] [MongoDB Storage]: "E11000 duplicate key error collection: powersync_demo.bucket_state" in some cases on a Sync Rules deploy. (PR #346)

  • [FIXED] A rare issue of incorrect checksums on fallback after the checksum query timed out. (PR #351)

1.15.1 (2025-08-29)

  • [IMPROVED] The performance of the compact job. (PR #343)

  • [FIXED] Pre-computing of checksums after intial replication which caused replication timeouts. (PR #343)

1.15.0 (2025-08-28)

  • [ADDED] gzip and zstd compression support in HTTP Streams. (PR #329)

  • [ADDED] permessage-deflate compression support for WebSockets connections. (PR #337)

  • [ADDED] config: option in Sync Rules which can be used to opt-in to new features and backwards-incompatible fixes of historical issues with the PowerSync Service. (PR #331)

    • [ADDED] The timestamps_iso8601 option in the config: block in Sync Rules. When enabled, timestamps are consistently formatted using ISO 8601 format. (PR #331)

    • [ADDED] The fixed_json_extract compatibility option. When enabled, JSON-extracting operators are updated to match SQLite more closely. (PR #335)

    • [ADDED] The versioned_bucket_ids option. When enabled, generated bucket IDs include the version of Sync Rules. This allows clients to sync more efficiently after updating Sync Rules. (PR #333)

  • [ADDED] Support for Sync Streams, a simpler and improved way to define what data gets synced to clients. This feature requires SDK-level updates to work, so details will be shared once it's usable. (PR #313)

  • [IMPROVED] Refactored the interface between the Service and Sync Rule bindings in preparation for Sync Streams. (PR #307)

  • [IMPROVED] Image annotations and attestations to the built @powersync/service-image Docker image for richer metadata and to help with vulnerability scanning. (PR #322)

  • [IMPROVED] [MongoDB Storage] Create a persisted checksum cache when compacting buckets. (PR #341)

  • [IMPROVED] [MongoDB Storage] Increase checksum timeouts, making it safe to sync up to around 10 million operations per user. (PR #338)

  • [IMPROVED] [MySQL connector] Extended the replication keep-alive mechanism for cases where the source database is idle for long periods of time. (PR #314)

  • [IMPROVED] Update license abbreviation to the now-standardized FSL-1.1-ALv2. (PR #318)

  • [IMPROVED] Upgraded Node, Sentry, Fastify and OpenTelemetry dependencies. (PR #320)

  • [FIXED] Removed the binary_data field on sync requests to fix inconsistencies between binary data being requested and actually being sent. (PR #332)

1.14.0 (2025-08-05)

  • [ADDED] Added opt-in support for streaming sync changes in BSON format via /sync/stream, which enables binary data transport without RSocket/WebSockets. (PR #310)

  • [ADDED] Enabled automatic detection and handling of MySQL schema changes affecting replicated tables. (PR #287)

  • [IMPROVED] Added automatic configuration for Supabase asymmetric JWT signing keys (JWKS) when using Supabase Auth and Supabase-hosted databases and removed legacy JWT secret support. (PR #311)

  • [IMPROVED] Replication diagnostics: The Service now reports issues when the replication stream is down or idle and reduced Postgres connections' keepalive interval from 5 to 1 minute. (PR #304)

  • [IMPROVED] MongoDB Storage: The Compact action now also compacts parameter lookup storage. (PR #315)

  • [IMPROVED] Standardized 404 error responses in the sync service using a fastify-based custom handler. (PR #305)

  • [FIXED] Delay switching over to new sync rules until we have a consistent checkpoint, which fixes a replication lag issue with high data volumes. (PR #308)

1.13.3 (2025-06-29)

  • [FIXED] WebSocket sync endpoints now surface specific token authentication errors instead of the generic “[PSYNC_S2106] Authentication required”, bringing them in line with HTTP streams. (PR #288)

  • [FIXED] A regression in 1.13.0 with MongoDB initial snapshot queries where collections with mixed _id types didn't replicate correctly. (PR #290)

1.13.2 (2025-06-20)

  • [FIXED] Sync rule clearing process to not block sync rule processing. (PR #284)

1.13.1 (2025-06-19)

  • [FIXED] Checksum aggregation for MongoDB storage buckets exceeding 4 million operations by treating checksums as 64-bit integers. This prevents repeated checksum failure errors on the client. (PR #282)

1.13.0 (2025-06-19)

  • [IMPROVED] Implemented resuming of initial replication snapshots for both Postgres and MongoDB sources, so interrupted initial replication (e.g. when deploying a sync rule update) can pick up where it left off. (PR #163)

  • [IMPROVED] Postgres: Added a check that warns when Row-Level Security would block the replication role. (PR #275)

  • [IMPROVED] Replaced change streams on MongoDB storage buckets with better mechanisms due to their performance overhead. (PR #276)

  • [IMPROVED] Exposed a powersync_replication_lag_seconds metric to help diagnose and alert on replication delays. (PR #272)

  • [IMPROVED] Added a configurable limit for the MySQL binlog processing queue to cap memory use under heavy write loads. (PR #269)

  • [FIXED] Cleanly interrupt clearing of MongoDB storage when the process is stopped/restarted. (PR #279)

  • [FIXED] Exit gracefully when the MongoDB driver reports a “topology is closed” error. (PR #278)

1.12.1 (2025-05-29)

  • [FIXED] An issue in MongoDB replication where batching logic could cause inconsistencies. (PR #271)

  • [IMPROVED] Clarified the types of oplog entries. (PR #270)

  • [IMPROVED] Cleanup on internal sync rules implementation and APIs. (PR #267)

1.12.0 (2025-05-14)

  • [ADDED] A JSON Schema for the PowerSync service configuration file, enabling self-hosted and local development environments to validate and receive autocomplete suggestions in their YAML configurations. (PR #257)

  • [ADDED] MongoDB: Support for plain "mongodb://" URIs for replica sets (multiple hostnames). (PR #250)

  • [IMPROVED] Reworked health check probe system: previously, probes required write access to the filesystem with no option to disable this. The new design adds HTTP-based probes and allows disabling filesystem probes. (PR #254)

  • [IMPROVED] Added support for WebSocket requests to be encoded as JSON, allowing more SDKs to use WebSockets as a transport protocol for receiving sync lines. Also allowed JSON payloads for RSocket, removing the need for BSON deserialization in clients. (PR #256)

  • [IMPROVED] Restored support for interrupting checkpoints without affecting unrelated sync buckets, preventing unnecessary sync interruptions. (PR #239)

  • [IMPROVED] Added additional log metadata on sync requests to aid in debugging and monitoring. (PR #261)

  • [FIXED] Corrected Postgres op_id sequence initialization to prevent potential issues in development setups where certain rows are ignored during sync. (PR #260)

  • [FIXED] Improved authentication error handling by providing clearer error messages and adding relevant token or configuration details to service logs. (PR #258)

1.11.3 (2025-05-07)

  • [FIXED] MongoDB: Resume token handling when no events are received. (PR #251)

  • [FIXED] Postgres bucket storage: The has_more flag for data batches falsely reported whether more data was available, resulting in mismatched checksums which caused entire buckets to re-download. (PR #255)

  • [FIXED] Missing powersync_parameter_storage_size_bytes parameter for metrics reporting.

1.11.2 (2025-04-24)

  • [ADDED] Added schema generators for Kotlin, Swift and .NET. (PR #243)

1.11.1 (2025-04-22)

  • [FIXED] Slow clearing of bucket_parameters by using an index. (PR #244)

1.11.0 (2025-04-10)

  • [IMPROVED] Refactored metrics handling to use a MetricsEngine which forms part of the Service context, decoupled from OpenTelemetry and centralizing metric creation for improved testability and reuse. (PR #221)

1.10.2 (2025-03-27)

  • [FIXED] Disabled checkpoint interruption for now to prevent issues where large sync batches would be interrupted unnecessarily, causing clients to wait indefinitely for new data. (PR #236)

1.10.1 (2025-03-26)

  • [FIXED] The identification of Varbinary and Varchar columns in MySQL by inspecting the character set instead of relying solely on the binary flag, preventing incorrect type detection. (PR #234)

1.10.0 (2025-03-24)

  • [IMPROVED] Cached parameter queries and bucket data to reduce redundant computation during incremental sync. (PR #200)

  • [IMPROVED] MongoDB Storage: Replaced polling with a change stream for write checkpoint lookups to scale incremental updates on a large number of concurrent connections. (PR #230)

  • [IMPROVED] The HTTP liveness probe now returns HTTP 200 instead of 400 in API service mode, to indicate that it is alive when returning any response. (PR #232)

  • [FIXED] Postgres Storage: An issue where custom write checkpoints failed to persist). (PR #230)

1.9.0 (2025-03-17)

  • [IMPROVED] Optimized Postgres transaction replication by batching multiple operations into a single flush to the bucket storage. (PR #228)

  • [IMPROVED] Increased the MongoDB connection timeout to accommodate longer latencies when connecting to clusters in distant regions, reducing connection failures. (PR #231)

  • [FIXED] Resolved an issue in MySQL replication where errors were obscured by ROLLBACK failures, ensuring that the original error is now properly logged. (PR #227)

1.8.1 (2025-03-12)

  • [IMPROVED] Skipped replication of documents exceeding MongoDB's 16MB size limit to prevent replication errors. (PR #224)

  • [FIXED] Restored the use of the slot_name_prefix configuration for Postgres replication slots. This change allows for better identification of PowerSync instances connected to specific Postgres instances by including the instance ID in the slot name. (PR #226)

1.8.0 (2025-03-06)

  • [IMPROVED] Included the local attachments queue table in the FlutterFlow schema export for the Dart SDK. This will simplify using the Flutter Attachments package with FlutterFlow. (PR #222)

  • [IMPROVED] Standardized internal usage of OpId as bigint to reduce unnecessary conversions between string and bigint formats. (PR #209)

  • [IMPROVED] Internal: Added configurable parameters for service limits, including max buckets, parameter query results, connections, and data fetch concurrency. (PR #218)

  • [FIXED] A race condition when stopping MySQL replication immediately after starting it. (PR #209)

1.7.2 (2025-03-04)

  • [IMPROVED] MongoDB initial replication performance by optimizing document reading from the source database. (PR #219)

1.7.1 (2025-02-27)

  • [IMPROVED] Upgraded mongodb and bson packages to remove the need for certain workarounds. (PR #211)

  • [IMPROVED] Unified compacting options across storage providers to enhance consistency. (PR #217)

  • [FIXED] Ensured current data remains available when restarting replication due to errors. (PR #216)

  • [FIXED] Improved handling of edge cases that could lead to truncation of synced tables. (PR #215)

  • [FIXED] Addressed issue where compacting might fail with an "unexpected PUT operation" error. (PR #217)

  • [FIXED] Added missing checkpoint completion log for empty sync iterations. (PR #214)

1.7.0 (2025-02-19)

  • [ADDED] Support for sync bucket priorities to ensure critical data sync first. Learn more here. (PR #192)

  • [IMPROVED] Upgraded to Node.js version 22.14.0.

  • [IMPROVED] Implemented minor optimizations to new checkpoint calculations. (PR #197)

  • [FIXED] Addressed signed integer overflow issue for int64 values from MongoDB. (PR #207)

v1.4.1

  • [FIXED] A race condition that sometimes caused a new write checkpoint to not be acknowledged on an existing connection (PR).

v1.4.0

  • [ADDED] Support for MongoDB resume tokens, enhancing replication reliability by allowing the system to resume change streams from the last known state after interruptions (PR).

  • [IMPROVED] Error handling for invalid sync rules, making it clearer when an error occurs. In self-hosted deployments, replication now exits upon a validation error, ensuring developers can immediately address configuration issues. This is configurable with a new sync_rules.exit_on_error option. In PowerSync Cloud, errors are logged in instance logs and displayed in the dashboard for visibility. See this PR for details.

  • [IMPROVED] Logging for initial replication progress for MongoDB connections, providing developers with visibility into data replication status during setup.

  • [IMPROVED] Upgraded TypeScript to 5.7 and set target Node.JS version 22, ES2024.

  • [FIXED] -> operator now returns null instead of undefined for missing JSON values, ensuring consistency in data handling and preventing potential query errors.

v1.3.12

  • [ADDED] Internal: Utilities for Postgres server and database identification.

v1.3.11

  • [ADDED] The ability to use the same Postgres server for the replication source and sync bucket storage. This is only supported on Postgres versions newer than 14.0.

  • [ADDED] The ability to skip creating empty sync checkpoints if no changes were present in a batch.

  • [FIXED] A bug where listening to active checkpoint notifications on an ended connection could cause a crash.

v1.3.10

  • [ADDED] Schema generator for FlutterFlow.

v1.3.9

  • [ADDED] Introduced standard error codes. Also see the PR.

  • [ADDED] A "test-connection" CLI command which performs the same connection validation as on PowerSync Cloud. PR.

  • [ADDED] Support IPv6 for the JWKS URI. PR.

  • [ADDED] Support for limiting IP ranges of outgoing connections. PR.

  • [IMPROVED] A clearer error message for "null" bucket definitions.

v1.3.8

  • [ADDED] Postgres support for sync bucket storage. See the Release Notes.

v1.3.7

  • [IMPROVED] Implemented a shared MongoDB dependency between modules. This should help avoid potential multiple versions of MongoDB being present in a project.

v1.3.6

  • [FIXED] MongoDB replication of undefined values causing missing documents.

  • [FIXED] Excessive memory consumption during MySQL initial replication.

  • [IMPROVED] Added a heartbeat mechanism to the MySQL binlog listener replication connection to detect connection timeouts.

  • [IMPROVED] Moved the MongoDB sync bucket storage implementation to the MongoDB module.

  • [IMPROVED] Updated ts-codec to version 1.3.0 for better decode error responses.

v1.3.5

  • [ADDED] ECDSA signing algorithm support for JWTs.

  • [ADDED] iif(X,Y,Z) Sync Rules function, which returns the value Y if X is true, and Z otherwise.

  • [FIXED] Timestamp replication issues for MySQL connections.

  • [FIXED] Resuming MySQL replication after a restart.

v1.3.4

  • [FIXED] An issue caused by incorrect bucket parameters grouping. See more details in this PR.

  • [FIXED] Replication slot recovery for Postgres instances. See more details in this PR.

  • [IMPROVED] Reduce noise in log output.

v1.3.3

  • [FIXED] Revert Postgres snapshot strategy.

v1.3.2

  • [IMPROVED] Use shorter timeout for testing MongoDB connections to ensure we get a proper error when failing to connect.

v1.3.1

  • [FIXED] "BSONObj size is invalid" error during replication.

v1.3.0

  • [ADDED] EdDSA signing algorithm support for JWTs as requested in this issue.

  • [IMPROVED] Optimized connection timeouts, and switched to fetching data in batches to reduce connection hanging risks for Postgres initial replication.

v1.2.0

  • [ADDED] uuid_blob Sync Rules function to convert a UUID string to bytes.

  • [ADDED] Support resuming initial replication for Postgres, for cases where initial replication was interrupted. See more details in the PR.

  • [IMPROVED] For Supabase Auth, when a JWT secret is explicitly configured, disable using current_setting('app.settings.jwt_secret').

  • [IMPROVED] Implemented a workaround for a write checkpoint bug on Aurora Postgres.

  • [FIXED] Replication lag diagnostics for Postgres, which resulted in the error: Unable to get replication lag Could not determine replication lag for slot [object Object]

v1.1.1

  • [FIXED] A regression for missing HTTP probes. Reported in issue.

v1.1.0

  • [ADDED] A "supabase_jwt_secret" config option to simplify static Supabase auth. Reference.

v1.0.0

  • [IMPROVED] Major refactor of the PowerSync Service to support modular replication.

  • [ADDED] Initial alpha support for MongoDB and MySQL source databases.

  • [ADDED] json_each function for parameter queries: Expand a JSON array or object from a request or token parameter into multiple parameter rows. 

  • [IMPROVED] Optionally include original types in generated client-side schemas as a comment.

v0.5.7

  • [IMPROVED] Postgres connection port restrictions. Connections are now supported on ports >= 1024.

v0.5.6

  • [ADDED] Support in Sync Rules for substring and json_keys functions.

v0.5.5

  • [IMPROVED] Sync Rules:

    • The Dashboard editor now warns when identifiers are automatically converted to lower-case.

    • The supported combinations of the IN operator have been expanded slightly - see the PR for examples.

  • [FIXED] An edge case with the checksum cache when compacting (when compacting resulted in a CLEAR operation that is later than the last checksum cache). See the PR for more information.

  • [FIXED] "JavaScript heap out of memory" error on startup.

v0.5.4

  • [IMPROVED] Update TableV2 to Table in the JavaScript/TypeScript schema generator (the two definitions have been merged).

v0.5.3

  • [FIXED] A rare race condition with WebSocket handling that could cause the route handler to "hang" indefinitely, after the underlying connection is closed.

v0.5.2

  • [FIXED] The error: WebSocket is not open: readyState 2 (CLOSING)

v0.5.1

  • [ADDED] client_id parameter to the WebSocket sync/stream endpoint logs.

v0.5.0

  • [ADDED] client_id parameter and User-Agent headers. This forms part of the work to support custom write checkpoints.

    • The client_id parameter specifically affects write checkpoints (limits write checkpoints to a specific client, rather than just an user).

    • It also makes it easier to notice issues such as multiple concurrent connections for the same client.

    • User-Agent headers allow us to identify which client is used.

  • [IMPROVED] Logging for troubleshooting:

    • Log on sync lock when reaching concurrency limit.

    • Log the current count of connected WebSocket connections.

v0.4.4

  • [ADDED] Support for TableV2 / TypeScript schema generator.

v0.4.3

  • [INTERNAL] Removed unused development routes.

v0.4.2

  • [INTERNAL] Added utility functions for registering routes.

v0.4.1

  • [FIXED] Missing route error logs.

  • Updated dependencies:

    • [FIXED] Concurrent connection limiting for WebSockets, to resolve the error " [429] Maximum active concurrent connections limit has been reached".

v0.4.0

  • [ADDED] Support for request.parameters(), request.jwt() and request.user_id(). Documentation will we published soon.

  • [ADDED] Warn on potentially dangerous queries using client parameters.

v0.3.0

  • [IMPROVED] Removed dependency for restricted packages, allowing this repository to be used without any NPM credentials.

  • [FIXED] A replication issue with REPLICA IDENTITY FULL.

v0.2.2

  • [FIXED] Teardown command not terminating after some errors. Also adds better logging to the teardown job.

  • [FIXED] Date parsing in replication for dates further back than 100 AD.

v0.2.1

  • [IMPROVED] Use a LRU cache for checksum computations, improving performance and reducing MongoDB database load. Learn more here.

  • [IMPROVED] Return zero checksums to the client instead of omitting these, to help with debugging sync issues.

v0.2.0

  • [ADDED] Support for client parameters. This functionality is gradually being added to client SDKs.

v0.1.3

  • [FIXED] Some performance issues, detailed here.

  • [IMPROVED] Logging for initial snapshot replication.

v0.1.2

  • [FIXED] Missing authentication errors for WebSocket sync stream requests.

v0.1.1

  • [IMPROVED] Updated lru-cache dependency minimum version to prevent downstream consumers of package using a broken version.

v0.1.0

  • [ADDED] The ability to capture anonymous usage metrics (learn more here).

v0.0.2

  • Initial public release.

Powered by LaunchNotes