Skip to content

Rivet 0.9.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 08:53
· 62 commits to main since this release
  • Close the last below-floor commercial capability gap with first-party
    native file dialogs on every desktop platform. Windows uses Common Item
    Dialogs, macOS uses asynchronous AppKit panels, and Linux uses GTK4 native
    choosers with portal delegation. The adapters cover open, save, folder
    selection, extension filters, cancellation, and open-file multi-selection
    without adding file-picker traffic to RVT1.

  • Make Linux a first-class product target everywhere users discover Rivet:
    the English and Chinese READMEs now include its badge, requirements,
    positioning, and comparison stack; the bilingual landing page includes
    GTK4 in both the native-UI feature card and comparison table; and the stale
    unsupported-host remediation no longer claims only Windows and macOS can
    build. Documentation tests pin all three targets to prevent this class of
    omission from returning.

  • Fix source-package smoke tests under set -o pipefail. Archive entries are
    now read once and checked from a file, so grep -q cannot close a repeated
    unzip pipeline early and turn a successful match into spurious exit 141.
    Source releases also explicitly omit native build/output trees (the Racket
    packager does not read .gitignore), and the isolated install overrides any
    maintainer-machine installation-scope link instead of producing a false
    “already installed” result.

  • Add first-party plain-text clipboard read/write/change observation across
    every desktop adapter. macOS uses NSPasteboard with main-run-loop
    changeCount polling, Windows uses CF_UNICODETEXT plus a message-only
    clipboard owner and WM_CLIPBOARDUPDATE, and Linux uses GTK4/GDK with
    asynchronous reads suitable for Wayland ownership transfers. Native
    observation stays on the platform UI thread and outside RVT1.

  • Complete cross-platform global shortcuts. Linux already binds through the
    XDG portal; macOS gains RivetGlobalShortcuts (Carbon
    RegisterEventHotKey, main-thread event loop, explicit duplicate-trigger
    refusal — RegisterHotKey provides it on Windows, Carbon does not) and
    Windows gains rivet::system::GlobalShortcuts (RegisterHotKey on a
    message-only window with WM_HOTKEY dispatch). The three adapters share
    one activation-callback shape (shortcut id, millisecond timestamp,
    portal-only activation token) and direct-registration platforms share a
    case-insensitive trigger grammar; ANSI virtual-key codes map through
    their Carbon constants because the codes follow the physical QWERTY
    layout, not the alphabet. macOS parse and lifecycle tests are in the
    Swift suite; the Windows adapter is compile-gated by the WinUI CI host
    build.

  • Add docs/commercial-parity.md: the honest scorecard against the Tauri 2
    and Electron feature floors (above / at / below / roadmap per
    capability), with rules of engagement — a product hand-rolling the same
    capability twice is a library gap, below-floor rows outrank new surface
    area, and the docs suite keeps the scorecard's tracked capability rows
    (global shortcuts, clipboard, native file dialogs, mobile hosts) from
    silently disappearing.

  • Close the scribble coverage gap: the RVT1 framing and value-codec surface
    (rivet/protocol — frames, message-type constants, transport limits,
    read/write/encode/decode), application resources (rivet/resources),
    the diagnostic sink parameter, install-crash-hook!, the version
    predicates, the Ed25519 key/digest/base64 primitives, canonical manifest
    payload helpers, verify-update-artifact!, make-install-plan,
    current-install-kind, and the missing updater? predicate now have
    manual entries. Every public export is covered and the rendered manual
    carries no undefined-tag warnings.

  • Documentation drift now fails CI instead of rotting silently. The docs
    suite derives the current release version from info.rkt and rejects a
    docs/ci*.md guide pinning any other tag, and it checks scribble
    coverage in both directions: a public export without a manual mention
    fails, and a manual entry for a binding that is no longer exported fails
    (defstruct* forms synthesize their constructor, predicate, structure-type
    binding, and accessors, mirroring the rendered output).