Highlights 🌟
-
🔄 Migrated from Realm to SQLite (SQLDelight) — Breaking Change:
We've officially transitioned from Realm to SQLDelight for data persistence. Since Realm is no longer actively maintained, this change was essential for long-term project sustainability, better multiplatform support, and open tooling integration.
⚠️ Important: Due to differences in storage structure, this is a non-backward-compatible migration. Pasteboard data from previous versions will not be visible in the new version. However, your old data has not been deleted — it's still safely stored in the previous Realm database files. -
📱 Android Version Under Review:
The Android version of CrossPaste is currently under review on Google Play. A corresponding changelog will be released when it's officially available. -
📤📥 Import & Export Support for Pasteboard:
You can now import and export your pasteboard data, making backups, transfers, and marketing scenarios much more flexible and powerful. -
🔁 Fully Shared
commonMainLogic with Mobile Platforms:
Core logic is now truly multiplatform. We've refactored platform-specific code to maximize reuse across desktop and mobile environments, simplifying future feature rollouts and bug fixes. -
🎨 Refreshed Logo and Branding:
The app now features a modernized logo and consistent branding across platforms, including SVG-based rendering to ensure crisp display at any resolution. -
🧩 Multiple Fixes to Data Migration Logic:
We've resolved several issues related to migration paths, including path resolution, cleanup logic, and data consistency across updates.
Bug Fixes 🐛
- 🐛 Fix iOS build failure due to missing encodeToString import (#2413)
- 🐛 Remove remaining realm information from the project (#2432)
- 🐛 Fix mobile build failure due to missing encodeToString import (#2439)
- 🐛 Fix the issue of failing to clean up pasteboard files (#2443)
- 🐛 Single device sync failure triggers unnecessary re-sync of all connected devices (#2448)
- 🐛 Fix ErrorCode code style warnings (#2450)
- 🐛 Fix missing verification code on first device connection (#2462)
- 🐛 Enhance pasteboard search functionality (#2464)
- 🐛 Fix internationalization text translation (#2466)
- 🐛 Fix toast animation issue on Android platform (#2497)
- 🐛 Fix the issue where the pasteboard favorites interface doesn't respond in a timely manner (#2483)
- 🐛 Storage settings interface cannot view saved pasteboard storage details (#2490)
- 🐛 Fix the issue where selecting paste type in the export interface doesn't respond (#2540)
- 🐛 Fix the bug caused by concurrent access to state variables (#2535)
- 🐛 Fix the issue of incorrect colors in multiple view contents (#2536)
- 🐛 Fix the issue where MutableMap doesn't support computeIfAbsent on iOS (#2538)
- 🐛 Fix X11 connection leaks (#2594)
- 🐛 Fix inconsistent icon sizes in ToastView (#2634)
- 🐛 Fix image file clipboard transfer to web applications (#2638)
- 🐛 Fix inconsistent font in color palette compared to other views (#2589)
- 🐛 Fix HTML and RTF pasteboard view rendering issues (#2592)
- 🐛 Fix all compilation warnings (#2658)
- 🐛 Fix missing dylib files in build output (#2679)
- 🐛 Fix incorrect dylib verification path (#2681)
- 🐛 Fix the storage path cannot be modified (#2682)
- 🐛 Fix Windows application restart service (#2683)
- 🐛 Fix logical errors in data migration checks (#2685)
- 🐛 Fix process termination waiting issue in Windows startup script (#2688)
- 🐛 Close database driver before data migration (#2690)
- 🐛 Fix the issue of incomplete Windows right-click menu display (#2691)
- 🐛 Fix file deletion issue in storage directory copying caused by identical hash values (#2693)
- 🐛 Fix the issue where the selected underline in TabsView does not match the text length (#2695)
- 🐛 Fix issue where Window right-click menu height doesn't account for padding (#2697)
New Features ✨
- ✨ Support pasteboard import and export (#2453)
- ✨ Add specific callbacks for key actions to support flow control (#2475)
- ✨ Notification bar supports displaying multiple messages (#2479)
- ✨ Toast view now supports displaying body content (#2491)
- ✨ Add method to PasteText for reading first 256 characters for preview (#2504)
- ✨ Support searching based on source and filename (#2527)
- ✨ Periodically clean up executed task information in the database (#2532)
- ✨ Automatically close token and hide interface after successful connection (#2631)
- ✨ First launch, automatically add tutorial pasteboard examples (#2641)
- ✨ Add marketing definition support to search interface (#2655)
- ✨ Create RatingPromptManager for callbacks on important operations (#2669)
- ✨ Add suspendRetry function for handling suspending retry operations (#2673)
UI Improvements 💄
- 💄 Create DialogView and TokenView to make the overall interface composition clearer (#2481)
- 💄 Optimized Dialog UI effects (#2555)
- 💄 Improve font styles for empty screen prompts and paste type selection area (#2630)
- 💄 Enhanced date picker UI (#2563)
- 💄 Add text alignment and line height to ToastView title (#2602)
- 💄 use new version of logo (#2608)
- 💄 Remove icons, render all project logos using SVG (#2610)
- 💄 Improve pasteboard display effects (#2587)
- 💄 Center align button text in dialog buttons (#2649)
- 💄 Text and icons in the device bar should adapt to background color changes (#2557)
Multiplatform & Refactor & Code Style 🔨
- 🔨 Change AppLockState to interface to allow extension by other platforms (#2411)
- 🔨 Migrate from Realm to SQLDelight for data persistence (#2425)
- 🔨 Move writeFile function to interface for multiplatform support (#2460)
- 🔨 Support null duration in sendNotification API (#2469)
- 🔨 Replace ScreenType enum with sealed interface pattern (#2499)
- 🔨 Move DesktopToastManager implementation to commonMain (#2488)
- 🔨 Refactor import/export implementation to facilitate mobile reuse (#2547)
- 🔨 Refactor pasteboard type icons (#2552)
- 🔨 Convert verbose if-else returns to expression form (#2668)
- 🔨 Change SyncManager to explicit lifecycle control (#2660)
- 🔨 Remove unused resource files (#2662)
- 🔨 Move MainSettingsContentView to desktop implementation (#2622)
- 🔨 Abstract PasteDialog to allow different implementations for desktop and mobile (#2566)
- 🔨 Enhance device sync control with improved conditional checks (#2514)
- 🔨 Extract nowInstant() method to improve testability (#2452)
- 🔨 Replace try catch blocks with runCatching style (#2525)
- 🔨 Enhance device detail page and tab styling (#2636)
- 🔨 Align Koin and Koin-compose versions for consistent dependency management (#2582)
- 🔨 Optimize Kotlin code using scope functions and null-safety operators (#2628)
- 🔨 Add name property to ScreenType (#2559)
Dependencies ⬆️
- ⬆️ Bump compose from 1.7.6 → 1.7.7 → 1.7.8 → 1.8.0
- ⬆️ Bump com.valentinilk.shimmer:compose-shimmer from 1.3.1 to 1.3.2
- ⬆️ Bump coil from 3.0.4 to 3.1.0
- ⬆️ Bump io.github.oshai:kotlin-logging from 7.0.3 → 7.0.4 → 7.0.5 → 7.0.6 → 7.0.7
- ⬆️ Bump ktor from 3.0.3 → 3.1.0 → 3.1.1 → 3.1.2
- ⬆️ Bump org.yaml:snakeyaml from 2.3 to 2.4
- ⬆️ Bump org.jetbrains.kotlinx:kotlinx-datetime from 0.6.1 to 0.6.2
- ⬆️ Bump kotlin from 2.0.21 → 2.1.10 → 2.1.20
- ⬆️ Bump org.jlleitschuh.gradle.ktlint from 12.1.2 to 12.2.0
- ⬆️ Bump ch.qos.logback:logback-classic from 1.5.16 → 1.5.17 → 1.5.18
- ⬆️ Bump io.mockk:mockk from 1.13.16 → 1.13.17 → 1.14.0
- ⬆️ Bump org.jsoup:jsoup from 1.18.3 to 1.19.1
- ⬆️ Bump jna from 5.16.0 to 5.17.0
- ⬆️ Bump org.jmdns:jmdns from 3.6.0 to 3.6.1
- ⬆️ Bump com.google.guava:guava from 33.4.0 → 33.4.5 → 33.4.6 → 33.4.7 → 33.4.8
- ⬆️ Bump io.github.z4kn4fein:semver from 2.0.0 to 3.0.0
- ⬆️ Bump androidx.compose.material3:material3 from 1.3.1 to 1.3.2
- ⬆️ Bump com.squareup.okio:okio from 3.10.2 to 3.11.0
- ⬆️ Bump org.jetbrains.kotlinx:kotlinx-serialization-json from 1.8.0 to 1.8.1
- ⬆️ Bump kotlinx-coroutines from 1.10.1 to 1.10.2
- ⬆️ Bump koin from 4.0.2 → 4.0.3 → 4.0.4
- ⬆️ Bump io.insert-koin:koin-compose from 4.0.2 to 4.0.4