Skip to content

2.1.7.2461

Latest

Choose a tag to compare

@guiyanakuang guiyanakuang released this 10 Aug 02:06
· 71 commits to main since this release
8ec3b77

Highlights 🌟

  • πŸ›‘οΈ Hardened device sync
    A full round of security and robustness hardening on the sync path:
    sync connections and control requests strictly verify peer identity,
    file transfers validate path legitimacy and cap resource usage, and
    malformed data can no longer disrupt normal syncing (#4705–#4716).

  • πŸ”— More reliable connections
    A corrupted device record no longer prevents the device list from
    loading; metadata read failures no longer reset the device identity;
    device state changes propagate reliably across the UI; devices now
    show as connected the moment an incoming connection is established,
    instead of waiting for the next liveness poll; and HarmonyOS
    devices are recognized with their own icon (#4695 #4720 #4722 #4724
    #4728 #4747).

  • πŸš€ The main window now opens on first launch
    Fixed an issue on some platforms where the first launch only showed a
    tray icon and no window at all, making it look like the app "wouldn't
    open". The main window now opens automatically on first launch on
    every desktop platform (#4696 #4697).

  • πŸ—„οΈ Customizable size limit for large clipboard entries
    A new setting customizes the maximum size for text, HTML, rich text,
    and link content written into the history (8MB by default). Entries
    over the limit are not recorded, so meaninglessly huge text can't
    bloat the database or slow down the UI; sync skips them too, without
    breaking pull continuity. Files and images are not affected
    (#4699 #4701 #4703 #4704).

  • 🎨 New Appearance settings page
    Settings now has an Appearance page with a customizable side search
    window height and live preview. Card title bars in the side window
    scale proportionally with card size (#4664 #4674 #4676).

  • 🍎 macOS: hide the Dock icon
    A new macOS-only setting hides CrossPaste from the Dock, keeping only
    the menu bar icon (#4659 #4677 #4678).

  • πŸ”’ URL preview fetching can now be turned off
    A new setting disables fetching a copied link's title and icon, so
    CrossPaste makes no network request for copied URLs β€” for privacy,
    or to avoid accidentally triggering one-time links. On by default,
    matching the previous behavior (#4742 #4744).

  • 🧩 Chrome extension improvements
    The extension now decrypts encrypted paste pushes from the desktop
    app, supports the newer SAS/PIN-based pairing flows, and performs
    the authenticated WebSocket handshake so it can keep syncing with
    peers that require authenticated connections (#4683 #4729 #4730
    #4749).

Bug Fixes πŸ›

  • πŸ› Implement authenticated WebSocket handshake in the Chrome extension (#4749)
  • πŸ› Resolve device state immediately when an inbound WebSocket session opens (#4747)
  • πŸ› Dedupe search results by id in the shared search ViewModel (#4733)
  • πŸ› Decrypt encrypted WS paste push in Chrome extension (#4730)
  • πŸ› Tolerate corrupted hostInfo JSON per row in device-list mapping (#4728)
  • πŸ› Never rotate device identity on metadata read failure (#4724)
  • πŸ› Give SyncRuntimeInfo flow broadcast semantics (#4722)
  • πŸ› Include network prefix in host info equality (#4720)
  • πŸ› Make ErrorCode hashCode consistent with equals (#4718)
  • πŸ› Validate file transfer path metadata correspondence (#4716)
  • πŸ› Roll back push prepare on session capacity rejection (#4714)
  • πŸ› Authenticate sync control requests (#4712)
  • πŸ› Disambiguate WebSocket whole-file pulls (#4711)
  • πŸ› Authenticate WebSocket sessions (#4710)
  • πŸ› Bind WebSocket paste identity (#4709)
  • πŸ› Bound remote file transfer resources (#4708)
  • πŸ› Fail truncated file chunks (#4707)
  • πŸ› Bind remote paste to authenticated identity (#4706)
  • πŸ› Reject unsafe remote file paths (#4705)
  • πŸ› Prevent paste pull cursor gaps (#4704)
  • πŸ› Persist paste pull cursor for discarded oversized remote pastes (#4703)
  • πŸ› Auto-show main window on first launch for all desktop platforms (#4697)
  • πŸ› Allocate v2 exchange generations before async dispatch and make verifier acquisition atomic (#4693)
  • πŸ› Release the responder's pending v2 exchange when the initiator abandons pairing (#4690)
  • πŸ› Fix SPAKE2 session lifecycle races and fail closed pending constant-time EC review (#4663)

New Features ✨

  • ✨ Add option to disable URL preview fetching (#4744)
  • ✨ Add chunked WebSocket payload transfer negotiated via the pairing v3 handshake (dormant until v3 rollout) (#4732)
  • ✨ Discard oversized non-file paste items to prevent huge database rows (#4699)
  • ✨ Add HarmonyOS platform support with system icon (#4695)
  • ✨ Add pairing v2 (SAS) and v3 (SPAKE2 PIN) support to the browser extension (#4683)
  • ✨ Render pairing v3 acceptor sessions as per-device token cards with auto-close on trust (#4681)
  • ✨ Add macOS setting to hide the Dock icon (#4677)
  • ✨ Add appearance settings page with customizable search window height (#4674)
  • ✨ Add development-only pairing v3 interop flag (#4667)
  • ✨ Add pairing v3 scenarios (pair-v3, all-v3) to e2e harness (#4665)
  • ✨ Pairing v3: real SPAKE2/P-256 PakeProvider with RFC 9382 vectors (#4658)
  • ✨ Pairing v3 Phase 4: desktop UI (#4656)
  • ✨ Pairing v3 Phase 3: network protocol service, routing, and client API (#4654)
  • ✨ Pairing v3 foundation: per-device sessions, PIN + SPAKE2 building blocks (#4652)

Multiplatform Β· Refactor Β· Code Style πŸ”¨

  • πŸ”¨ Scale side paste title bar proportionally with card size (#4676)
  • πŸ”¨ Harden pairing v3 interop handshake and trust dialog UX (#4669)
  • πŸ”¨ Extract PairingV3Transport seam for in-process pairing v3 tests (#4661)
  • πŸ”¨ Split stored paste JSON codec from sync format and fix hashing and size accounting (#4648)
  • πŸ”¨ Separate QR bearer token from SAS code at the type level (#4644)
  • πŸ”¨ Harden paste process plugin pipeline and cap max non-file paste size input (#4701)

Build & CI πŸ‘·

  • πŸ‘· Add Microsoft Store publish automation (#4738)
  • πŸ‘· Speed up CI with per-job Gradle caches, konan cache, and superseded-run cancellation (#4689)
  • βœ… Move platform-agnostic tests to core commonTest and cover core/shared in CI (#4646)

Documentation πŸ“

  • πŸ“ Replace contact email with support@crosspaste.com (#4671)
  • πŸ“ Add Video link to README navigation
  • πŸ“ Bump README download badge to v2.1.6

Dependencies ⬆️

  • ⬆️ Bump org.bouncycastle:bcprov-jdk18on from 1.84 to 1.85 (#4741)
  • ⬆️ Bump com.squareup.okio:okio from 3.18.0 to 3.18.1 (#4740)
  • ⬆️ Bump ktor from 3.5.1 to 3.5.2 (#4739)
  • βž– Drop unused Compose plugin and runtime from shared (#4726)
  • ⬆️ Bump logback-classic from 1.5.38 to 1.6.1 (#4687)
  • ⬆️ Bump io.modelcontextprotocol:kotlin-sdk-server (#4686)
  • ⬆️ Bump kotter from 1.3.0 to 1.4.0 (#4685)
  • ⬆️ Bump metadata-extractor from 2.20.0 to 2.21.0 (#4650)
  • ⬆️ Bump okio from 3.17.0 to 3.18.0 (#4649)
  • ⬆️ Bump compose-shimmer (#4642)
  • ⬆️ Bump richeditor-compose
  • ⬆️ Bump kotlin from 2.4.0 to 2.4.10
  • ⬆️ Bump imageio from 3.13.1 to 3.14.0