DATE:
AUTHOR:
PowerSync Product Team
.NET SDK

PowerSync .NET SDK: Beta Release

DATE:
AUTHOR: PowerSync Product Team

The PowerSync .NET SDK has reached beta. You can now build and ship production-ready desktop and MAUI apps with the full PowerSync feature set. Simultaneously, we're also releasing SQL Server backend support in beta Together, these bring production-ready PowerSync support for teams building on the Microsoft stack.

Since the alpha, we've brought the .NET SDK to full feature parity with the rest of the PowerSync SDK family: Sync Streams, sync priority, and the Rust-based sync client are all now supported. We've also tightened up the API for long-term stability and introduced more idiomatic .NET APIs throughout.

This release also includes concrete performance wins: a read connection pool for MDSQLiteAdapter so reads can run concurrently, and queries now run on the .NET thread pool instead of blocking the caller's thread.

What's new

These are the main improvements since the alpha.

Performance

  • Run multiple queries concurrently without blocking — MDSQLiteAdapter now uses a read connection pool (defaults to 5 concurrent read connections), so parallel reads no longer queue behind each other.

  • Queries run on the .NET thread pool, so your app stays responsive while data loads.

  • Result mapping now uses Dapper instead of manual JSON parsing — ~2.8x faster query performance and ~15x less memory usage, plus broader .NET type support.

Sync

  • Sync Streams support to provide the best of both worlds: sync data upfront (for offline-first use cases) or on demand.

  • Show users a progress indicator during initial sync: SyncStatus.DownloadProgress() lets you track how many rows have been downloaded.

  • Control which data syncs first with bucket priority support — useful when some data is more critical to load than others.

  • Handle sync failures in your UI: SyncStatus.DataFlow now exposes DownloadError and UploadError so you can detect and respond to sync errors.

  • The Rust-based sync client is now the default (and only) implementation — it's faster and more reliable than the previous C# implementation.

  • Both StatusUpdated and StatusChanged events now emit the full SyncStatus object, giving you complete sync state in your event handler.

Queries

  • React to data changes using standard C# async patterns: Watch<T> and OnChange return IAsyncEnumerable, so you can use await foreach to stream live updates through your app.

  • Use TriggerImmediately to control whether a watch query fires on setup or only when data actually changes.

  • Query without a typed model class using untyped/dynamic queries Get instead of Get<T>) — useful for ad-hoc or exploratory queries.

  • Run multiple SQL statements in a single call with ExecuteBatch().

Schema and table options

  • Declare your schema using C# attributes directly on your model classes, instead of a separate schema definition — less boilerplate, more familiar .NET style.

  • Fine-tune how individual tables behave: TrackPreviousValues gives you the old row value when data changes (useful for diffing), IgnoreEmptyUpdates skips re-triggering watch queries when an update makes no actual change, and TrackMetadata lets you attach sync metadata to rows.

  • Pass custom context (e.g. app version, user info) to your backend with each sync request via AppMetadata on PowerSyncConnectionOptions.

Other additions

  • Check how many local changes are waiting to upload with GetUploadQueueStats() — useful for showing sync status in your UI.

  • Subscribe to specific events directly via the new EventManager, instead of subscribing to all possible events and filtering manually, e.g. PowerSyncDatabase.Events.OnStatusChanged.

Beta status

The .NET SDK is now in Beta: APIs are stable, breaking changes will be communicated clearly, and the SDK is production-ready for well-tested use cases. The MAUI SDK, which is a thin wrapper around the Common SDK, is also in beta and carries the same updates.

See our Feature Status definitions for details on what Beta means in our terminology.

Getting started

If you're coming from the alpha, the changelog covers all breaking API changes made since then.

Feedback and help

Questions, bugs, or feedback? Join us in the PowerSync Discord or open an issue on GitHub.

We've published a proposal that covers the thinking behind many of the changes in this release, as well as what we're considering next, including ORM support. Have a look and please share your thoughts.

Powered by LaunchNotes