Skip to content

v0.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 15 May 06:27
· 4 commits to main since this release

Highlights

Platform support on store cards

Catalog cards now show which platforms an app supports while you browse, so "does this work on my phone?" is answered without opening the listing. All 59 packaged listings now declare a per-surface support level - full, limited, list, commands, or none - and the card and detail page render the same labels from the same data.

Core derives the platform list from each manifest's surfaces map and publishes it on the catalog entry, and the public index projects it into a flat surfaces array. An explicit "none" is filtered out rather than advertised, while an absent key keeps its meaning of "not declared, runs everywhere."

Affected packages: ryu-core, @ryu/marketplace, @ryu/activity, @ryu/approvals, @ryu/browser, @ryu/calendar, @ryu/canvas, @ryu/clips, and 53 more — see the changelog below.

Stability badges on store listings

Listings can now say how finished they are, and the store shows it on the card and in the detail header. Alpha, beta, rc, nightly, and canary are all valid today.

The label is a free-form string carried in the published index, so a listing graduates out of beta by flipping a value and re-mirroring, with no Core release. An unrecognised value renders title-cased rather than disappearing, and a listing that declares nothing renders no badge at all.

Affected packages: ryu-core, @ryu/marketplace

Per-version history for listings

The Versions tab on a store listing now expands to the manifest and README read from the repository at that exact tag, so a row shows what the listing actually was at that release - description, licence, engines, and surfaces - not just the tag, date, and notes.

Rows load lazily when expanded, since a listing can carry up to 20 versions. Only repo-resident signals are claimed as historical: stars, issues, and activity are current-state, and every expanded row says so explicitly rather than presenting them as the state at that tag.

In the desktop app the reader is bound to the active node through CatalogHost, and a tag with no packaged manifest renders "No manifest published at this tag" rather than an error.

Affected packages: Desktop app, @ryu/marketplace, ryu-core

Profile copy and deep clean

Storage settings can now copy your current profile's data into another profile - dev, canary, nightly, or beta - complete with the master key, so the destination boots able to decrypt everything. Release is deliberately not offered as a target, and an already-populated target is refused rather than merged.

The key travels first and any failure aborts before a file is written, so a copy never leaves ciphertext nothing can read. Node identity, sign-in state, saved nodes, and downloaded binaries are excluded, and Core is stopped during the copy so the snapshot is not torn.

A new Danger Zone action, deep clean, removes what Reset node never touches: shadow captures, ghost state, gateway config, and the data-path pointer that live outside the data folder. Every path is checked for $HOME containment before deletion, and the dialog warns that shadow and ghost are shared across all profiles.

Affected packages: ryu-core, Desktop app, ryu-crypto

Changelog

@ryu/activity@0.1.0

Minor changes

  • The activity app's manifest now declares a surfaces map with a per-platform support level, giving the store data for its platform badges. (8636db8)

@ryu/approvals@0.1.0

Minor changes

  • The approvals app's manifest now carries a surfaces map naming the platforms it supports and how fully. (8636db8)

@ryu/blocks@0.1.0

Patch changes

  • device-activate.tsx was updated alongside the portal chrome changes that moved the shared Logo out of the individual device pages. (7d42670)

@ryu/browser@0.1.0

Minor changes

  • The browser app's manifest now specifies a support level for each surface it runs on. (8636db8)

@ryu/calendar@0.1.0

Minor changes

  • The calendar app's manifest gained a surfaces map declaring where it runs and with what support level. (8636db8)

@ryu/canvas@0.1.0

Minor changes

  • The canvas app's manifest now declares per-surface support levels instead of remaining silent on platforms. (8636db8)

@ryu/clips@0.1.0

Minor changes

  • The clips app's manifest now includes a surfaces map so the store can show its supported platforms. (8636db8)

@ryu/dashboards@0.1.0

Minor changes

  • The dashboards app's manifest now advertises a support level per platform. (8636db8)

@ryu/dictation@0.1.0

Minor changes

  • The dictation app's manifest was given a surfaces map declaring per-platform support. (8636db8)

@ryu/docling@0.1.0

Minor changes

  • The docling app's manifest now declares which surfaces it supports and at what level. (8636db8)

@ryu/finetune@0.1.0

Minor changes

  • The finetune app's manifest now carries a surfaces map feeding the store's platform display. (8636db8)

@ryu/healing@0.1.0

Minor changes

  • The healing app's manifest now specifies per-surface support levels. (8636db8)

@ryu/learning@0.1.0

Minor changes

  • The learning app's manifest gained a surfaces map declaring its supported platforms. (8636db8)

@ryu/mail@0.1.0

Minor changes

  • The mail app's manifest now declares a support level for each platform it targets. (8636db8)

@ryu/marketplace@0.1.0

Minor changes

  • Added a shared stabilityLabel helper and rendered the badge on store cards and in the detail header; unknown values fall back to a title-cased verbatim rendering. (2774575)
  • The Versions tab now expands each row to the manifest and README read at that tag, lazy on expand; a tag with no readable manifest renders a notice, and surfaces without a reader hide the expander entirely. (87a1914)
  • Made the ReviewsPanel realm a prop defaulting to plugin and documented that non-plugin realms must also pass scorecard null, so skills and models are never graded against plugin-manifest signals. (2905cb9)
  • Extracted the detail tabs into ListingDetailTabs with an optional overview and controlled tab state, and added installedAppAsEntry, which synthesises only the five fields CatalogEntry requires. (0dde100)
  • Added a compact platform row to store cards and moved surfaceLabel into its own module shared with the detail strip, pinned so the label map can no longer drift onto non-surfaces. (109542b)
  • Corrected SURFACE_LABELS to the real surface set - dropping browser and tui, adding gateway, core, and extension - and pinned it with satisfies Record<Surface, string>. (1a6a489)

Patch changes

  • Switched the detail dialog's tab row from line to pill styling, removed the TabsIndicator that would cancel the solid pill, and let the row wrap for the seven-tab layout. (e371903)

@ryu/markitdown@0.1.0

Minor changes

  • The markitdown app's manifest now includes a surfaces map naming its supported platforms. (8636db8)

@ryu/meetings@0.1.0

Minor changes

  • The meetings app's manifest now advertises per-platform support levels. (8636db8)

@ryu/mineru@0.1.0

Minor changes

  • The mineru app's manifest now declares where it runs and how well, via a surfaces map. (8636db8)

@ryu/monitors@0.1.0

Minor changes

  • The monitors app's manifest gained per-surface support declarations. (8636db8)

@ryu/predict@0.1.0

Minor changes

  • The predict app's manifest now carries a surfaces map for the store's platform badges. (8636db8)

@ryu/quests@0.1.0

Minor changes

  • The quests app's manifest now declares a support level for each surface it works on. (8636db8)

@ryu/recipes@0.1.0

Minor changes

  • The recipes app's manifest now specifies its supported platforms with per-surface levels. (8636db8)

@ryu/research@0.1.0

Minor changes

  • The research app's manifest now declares per-platform support through a surfaces map. (8636db8)

@ryu/simulator@0.1.0

Minor changes

  • The simulator app's manifest gained a surfaces map stating where it runs. (8636db8)

@ryu/skill-editor@0.1.0

Minor changes

  • The skill-editor app's manifest now declares support levels per surface. (8636db8)

@ryu/teams@0.1.0

Minor changes

  • The teams app's manifest now includes a surfaces map naming its supported platforms. (8636db8)

@ryu/timeline@0.1.0

Minor changes

  • The timeline app's manifest now advertises a support level for each platform it runs on. (8636db8)

@ryu/unstructured@0.1.0

Minor changes

  • The unstructured app's manifest now carries per-surface support declarations. (8636db8)

@ryu/voice@0.1.0

Minor changes

  • The voice app's manifest now declares which surfaces it supports and to what degree. (8636db8)

@ryu/warmup@0.1.0

Minor changes

  • The warmup app's manifest gained a surfaces map with per-platform support levels. (8636db8)

@ryu/webhooks@0.1.0

Minor changes

  • The webhooks app's manifest now specifies its supported platforms via a surfaces map. (8636db8)

@ryu/whiteboard@0.1.0

Minor changes

  • The whiteboard app's manifest now declares per-surface support levels for the store. (8636db8)

@ryu/workflows@0.1.0

Minor changes

  • The workflows app's manifest now includes a surfaces map describing where it runs. (8636db8)

@ryuhq/core-client@0.1.0

Minor changes

  • Added assessNode, which returns belowFloor, channelMismatch, or nodeIsNewer, and prefers the channel a node reports on /api/health over deriving it; it warns rather than blocks and fails soft on unknown versions. (6627eec)

@ryuhq/sdk@0.1.0

Minor changes

  • Regenerated the generated plugin-manifest type to match the tolerant Surface and SurfaceSupport definitions. (1a6a489)

Browser extension@0.1.0

Patch changes

  • The extension now sends X-Ryu-Surface on plugin requests, so Core filters its plugin set by what the extension supports. (bb0d8bd)

Desktop app@0.1.0

Minor changes

  • Added a Danger Zone action wired to the deep-clean command, with a confirm dialog warning that shadow and ghost state are shared across all profiles. (683c20c)
  • Added a per-version detail reader on the catalog host, bound to the active node, so the desktop can fetch a listing's manifest and README at a specific tag. (87a1914)
  • The installed view now fetches catalog detail and renders the shared listing tabs below its own lifecycle header, so installed apps keep their README, versions, and health; the fetch is lazy and local-only apps render nothing extra. (0dde100)
  • Added a Storage setting that copies the current profile's data into another profile, stopping Core first and passing --from-profile explicitly; release is not offered as a target. (f011b71)
  • node-compat.ts now re-exports the shared node assessment from core-client, keeping its call sites and its 16 tests unchanged. (6627eec)
  • Added channelOf and channelMismatch to node-compat so a stable desktop driving a canary node is detected; the result is advisory only, and unknown versions fail soft to no mismatch. (f116b7b)
  • The updater now resolves each channel's feed from the rolling tag's own release instead of /releases/latest, so canary and nightly users are offered that channel's build rather than stable. (e4e4b41)
  • Unified the desktop bundle id on ai.amajor.ryu.* across both tauri configs and added a one-time migration that copies the old identifier's app-data directory, running before the Builder and never overwriting an existing copy. (4389cfa)

Patch changes

  • The backup caption and restore dialog now state that a backup zip cannot be restored without this machine's key, since the master key lives in the OS keychain and is not included in the zip. (d9ba447)
  • Mirrored the per-profile port-offset table and made the desktop fall back to release's offset rather than dev's for an unknown profile name. (e2d6ec0)

Island@0.1.0

Patch changes

  • The island now sends X-Ryu-Surface on plugin requests, so Core filters its plugin set by what the island supports. (bb0d8bd)

plugin: advisor@0.1.0

Minor changes

  • The advisor plugin's manifest now declares a surfaces map with per-platform support levels. (8636db8)

plugin: agentbrowser@0.1.0

Minor changes

  • The agentbrowser plugin's manifest now carries a surfaces map naming where it runs. (8636db8)

plugin: brave@0.1.0

Minor changes

  • The brave plugin's manifest now specifies per-surface support levels. (8636db8)

plugin: bytebot@0.1.0

Minor changes

  • The bytebot plugin's manifest gained a surfaces map with support levels per platform. (8636db8)

plugin: chat-title@0.1.0

Minor changes

  • The chat-title plugin's manifest now declares which surfaces it supports. (8636db8)

plugin: double-check@0.1.0

Minor changes

  • The double-check plugin's manifest now includes a surfaces map for the store's platform badges. (8636db8)

plugin: exa@0.1.0

Minor changes

  • The exa plugin's manifest now advertises a support level for each platform it runs on. (8636db8)

plugin: firecrawl@0.1.0

Minor changes

  • The firecrawl plugin's manifest now declares per-platform support through a surfaces map. (8636db8)

plugin: firewall@0.1.0

Minor changes

  • The firewall plugin's manifest now carries per-surface support declarations. (8636db8)

plugin: ghost@0.1.0

Minor changes

  • The ghost plugin's manifest gained a surfaces map stating its supported platforms. (8636db8)

plugin: goal@0.1.0

Minor changes

  • The goal plugin's manifest now specifies a support level for each surface. (8636db8)

plugin: headroom@0.1.0

Minor changes

  • The headroom plugin's manifest now declares where it runs and at what level. (8636db8)

plugin: honcho@0.1.0

Minor changes

  • The honcho plugin's manifest now includes a surfaces map feeding the store's platform display. (8636db8)

plugin: hook-observers@0.1.0

Minor changes

  • The hook-observers plugin's manifest now declares per-surface support levels. (8636db8)

plugin: hook-session-context@0.1.0

Minor changes

  • The hook-session-context plugin's manifest gained a surfaces map naming its supported platforms. (8636db8)

plugin: mem0@0.1.0

Minor changes

  • The mem0 plugin's manifest now advertises per-platform support levels. (8636db8)

plugin: proof@0.1.0

Minor changes

  • The proof plugin's manifest now carries a surfaces map for its supported surfaces. (8636db8)

plugin: rtk@0.1.0

Minor changes

  • The rtk plugin's manifest now declares which surfaces it supports and how fully. (8636db8)

plugin: sample@0.1.0

Minor changes

  • The sample plugin's manifest gained per-surface support declarations. (8636db8)

plugin: sample-widget@0.1.0

Minor changes

  • The sample-widget plugin's manifest now includes a surfaces map with per-platform support levels. (8636db8)

plugin: scrapling@0.1.0

Minor changes

  • The scrapling plugin's manifest now specifies its supported platforms via a surfaces map. (8636db8)

plugin: security-guidance@0.1.0

Minor changes

  • The security-guidance plugin's manifest now declares a support level for each surface. (8636db8)

plugin: serper@0.1.0

Minor changes

  • The serper plugin's manifest now carries a surfaces map stating where it runs. (8636db8)

plugin: shadow@0.1.0

Minor changes

  • The shadow plugin's manifest now declares per-surface support levels. (8636db8)

plugin: spider@0.1.0

Minor changes

  • The spider plugin's manifest gained a surfaces map naming its supported platforms. (8636db8)

plugin: spidercloud@0.1.0

Minor changes

  • The spidercloud plugin's manifest now advertises per-platform support. (8636db8)

plugin: tavily@0.1.0

Minor changes

  • The tavily plugin's manifest now includes a surfaces map with support levels per surface. (8636db8)

plugin: tool-firewall@0.1.0

Minor changes

  • The tool-firewall plugin's manifest now declares which surfaces it supports and at what level. (8636db8)

ryu-core@0.1.0

Minor changes

  • Added channel listing and version-detail endpoints so a listing's release channels are resolvable end to end: channels reports only channels that actually publish and the tag each resolves to, and version-detail can read a build on a named channel. Resolution reuses the same pick_version_for_channel rule Core applies to its own builds, and an empty channel is a 404 rather than a fallback to stable. (361742e)
  • Added channel-based build resolution to the update module: a channel selects only its own builds, an empty channel never falls back, stable means no prerelease suffix, and the semver maximum within the channel wins. Tested against an out-of-order release list. (3961520)
  • Catalog entries now carry a free-form stability label from the manifest, so a listing can be marked alpha, beta, rc, nightly, or canary; an absent or explicit stable value renders nothing. (2774575)
  • Both catalog readers - plugins_as_items and flatten_plugins - now filter listings whose published index entry is marked hidden; an absent flag means visible, so older indexes are unaffected. (73bf147)
  • Added a data-path deep-clean subcommand that removes the shadow captures, ghost state, gateway config, and data-path pointer living outside the data folder, re-checking $HOME containment before each deletion. (683c20c)
  • Added a version-detail endpoint that returns a listing as it stood at a named tag, restricted to repo-resident signals plus atRef; repository health is excluded because it is current-state and cannot be reconstructed for a past tag. (736e2ca)
  • Added copy-profile, which copies a profile's data to another profile without touching either pointer file, moving the master key first and excluding node identity, sign-in state, saved nodes, and downloaded binaries by exact top-level name. (cf3c602)
  • Core now flattens a manifest's surfaces map onto the catalog entry, filtering an explicit none and omitting the key when nothing is declared. (109542b)
  • Extended plugin-manifest validation to parse the surfaces map, scoped the old permissive nothing-declared behaviour to manifests declaring neither form, and added a guard that every declared map reaches at least one human-facing surface. (8636db8)
  • Unknown surface and support-level values now parse as Unknown instead of failing the whole manifest, and a manifest targeting only unknown surfaces renders nowhere; /api/version now reports the Gateway's observed version rather than Core's own, and /api/health gained a channel field. (1a6a489)

Patch changes

  • Fixed copy_profile leaving an empty target directory behind when a refusal came after the writability probe; cleanup now removes only a directory the copy created and left empty. (165ebff)
  • Replaced the boolean port-offset rule with a per-profile table giving dev, canary, nightly, and beta their own offsets, and made an unrecognised profile name a startup error in resolve. (e2d6ec0)

ryu-crypto@0.1.0

Minor changes

  • Added an explicit copy operation for a profile's master key with three refusals - source missing, destination occupied, keychain unavailable - and tests proving the copied key opens the source's ciphertext while a freshly minted one does not. (a69c2de)

ryu-gateway@0.1.0

Patch changes

  • Mirrored the per-profile port-offset table so the Gateway binds the same ports Core expects for each profile. (e2d6ec0)

ryu-kernel-contracts@0.1.0

Minor changes

  • The plugin-manifest schema and Rust model now tolerate unknown Surface and SurfaceSupport values via catch-alls. (1a6a489)

Website (ryuhq.com)@0.1.0

Minor changes

  • The web shell's tauri config now uses ai.amajor.ryu.*, matching the desktop, island, and browser identifiers. (4389cfa)

Patch changes

  • Moved the shared Logo out of the device and OAuth pages into the portal chrome that now renders it, and tweaked the slide-to-unlock control in the device approval flow. (7d42670)

Repository & tooling

Minor changes

  • The mirror script now honours RYU_MARKETPLACE_HIDE_ALL and publishes every listing with hidden: true, so a catalog can ship before the store is ready. (d44043e)
  • The marketplace generator now emits a stability key into the published index when a manifest declares one. (2774575)
  • The generator now writes hidden: true when --hide-all is passed or a manifest declares it, and a test pins that an index with nothing hidden stays byte-identical. (73bf147)
  • Added a channel-feed assembler that builds each rolling release's signed updater feed from that run's artifacts, stamped the arch into the macOS bundle name so both legs survive upload, and added the script to the public mirror allowlist. (e4e4b41)
  • The wipe script gained a --legacy option that clears directories under bundle ids Ryu no longer ships, labelled to stay distinct in the plan. (4389cfa)
  • Added an interactive wipe command that plans a per-profile clean of data, config, client app dirs, and keychain slots, with supervisor-first teardown and account-exact keychain deletes; the planner is pure and covered by tests. (02edb84)

Patch changes

  • The generator now projects a manifest's surfaces and targets into a flat surfaces array in the published index, filtering explicit none and omitting the key when empty; the previous drop behaviour is now pinned by a test. (fb7016b)
  • Added the new profile port pairs to the free-ports helper so every stack's ports are covered. (e2d6ec0)
  • Fixed wipe's 'all' to union both canonical profile stacks with whatever was discovered, so it can no longer silently narrow to release, and labelled the release desktop's dev.ryu.desktop bundle id in plans. (9f775f6)

Full changelog: v0.0.17...v0.1.0