Skip to content

Releases

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 14 Nov 04:50
94627bc
  • Pre-fetch DuckDB's wasm so jupyter.sql runs offline (#615)
  • Terminal move: unregister by place, not transport (#613)
  • App MCP: give agents a token only /mcp accepts (#608)
  • Move a terminal between the bottom panel and a tab (#609)
  • Charts draw offline; pin cdp-kernel 0.12.0 (#611)
  • Send the person's name in a notebook room's awareness (#607)
  • Table output: page and sort through the kernel past the embedded rows (#605)
  • Example notebooks use jupyter.table, jupyter.sql and jupyter.chart (#603)
  • Refuse ids and owners outside the kernel page's range (#573) (#601)
  • Run with Parameters: follow an iPad sidebar move, per-server params (#600)
  • Ask before links create notebooks and Shortcuts run them (#598)
  • Keep Shortcuts answers per Shortcut name (#596)
  • Default the Mac's host read grant to the Settings folders (#597)
  • Run with Parameters from the apps and web UI (#593)
  • Bundle cdp-kernel 0.11.0 (#595)
  • Export as Markdown or Script from the apps and web UI (#591)
  • Clear All Outputs in the apps and web UI (#589)
  • Publish a notebook as a web page from the apps (#578)
  • Show table output as a sortable, paged table (#581)
  • Collapse code cells from a chevron, the keyboard and the menus (#579)
  • Font styles in place of per-feature alternates, and a Markdown font (#577)
  • Links to the transferred device issues (#576)
  • Don't send canceled kernel requests as crash reports (#556)
  • Give the in-app kernel web view its own data store (#562)
  • Fold ganymede-device into packages/device (#561)
  • Run the example notebooks on Node, Deno and Bun, and check them on every kernel (#559)
  • Cell toolbar recheck: skip parked notebooks, go through Cell.onResize (#554)
  • Hide the cell toolbar over a long first heading in WebKit (#552)
  • Check the Release app bundle before notarizing (#550)
  • CI: one Apple setup action; drop the unsigned main Mac build; cache Playwright (#548)
  • Bump typescript from 5.9.3 to 6.0.3 (#531)
  • Dependencies: fix xmldom, fast-uri and sanitize-html advisories (#545) (#546)
  • Run the Mac and iPad app checks as parallel CI jobs (#544)
  • Bump @vitejs/plugin-react (#530)
  • Run a Shortcut from a cell: route the Shortcuts callback to the bridge (#542)
  • Mac app main builds on a rolling main-build prerelease (#540)
  • Put notebooks in Spotlight (#538)
  • Compare the kernel page's release with the server's before ready (#537) (#541)
  • Load the kernel page from the current release's worker (#528)
  • Mac MCP: report token revoke/reset failures, clear stale info files (#536)
  • Unit-test the iOS editor's line-number gutter (#529)
  • Fix TypeScript 7 ignore reason, undo ws downgrade from dedupe (#533)
  • Serve MCP from the Mac app (#525)
  • Take pi-ai 1.5 and jsdom 31, skip TypeScript 7 in Dependabot (#527)
  • Notebook widgets behind a Settings switch (#495)
  • iOS editor: no weak store of the text view in the line-number gutter (#520)

Latest main build

Latest main build Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Nov 11:32
d861ff6

The latest build of main, not a release: Ganymede 0.11.0 (build 27.44), built from d861ff6. Each push to main that changes the app replaces it.

Ganymede-macOS.zip is the Mac app for Apple silicon, signed with the Developer ID and notarized. It is the same app as the release (same settings and data), and replaces it if you move it to Applications. It does not update to newer main builds; the next release's update replaces it.

v0.10.1

Choose a tag to compare

@github-actions github-actions released this 12 Nov 07:15
bffe92d
  • Load the in-app kernel page without the token, outside the service worker's fallback (#519)

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 12 Nov 04:11
714dd8c
  • TestFlight notes: list only changes that ship in the app (#514)
  • Open notebooks in the server's document rooms (#510)
  • Take Ganymede's minor version in a minor release (#512)
  • Take a changed notebook in place when nothing here would be lost (#509)
  • Show Notebook Access in the toolbar when a notebook asks for more (#505)

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 21:09
7312d27
  • Pass a run's parameters to the in-app TypeScript kernel (#503)
  • CI: install Playwright's system libraries best effort (#500)
  • release.yml: check the release PR's CI instead of running CI again on the tag (#492)
  • Release: pick up the latest cdp-kernel and Ganymede releases in the release commit (#490)
  • CI: cache the XCFramework built for a pinned ganymede commit (#486) (#487)
  • Pin ganymede v0.8.0 (#497)
  • Send TestFlight notes as whatsNew, the API name for "What to Test" (#501)
  • Ship the share extension behind its switch: App Group, signing, Settings (#477)

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 11:05
69f916a
  • apps.md: Notebook Access is in the Kernel menu on the Mac (#493)
  • Stop the kernel status flapping while the Variables view is open (#488)
  • Notebook Access sheet: set a notebook's host API grant (#479)
  • Say "ran out of memory" when a kernel dies near the memory limit (#481)
  • Use cdp-kernel 0.10.0 and ganymede main 19cd144 (#482)
  • Parameters on ganymede://run, and Run Notebook with Parameters in Shortcuts (#472)
  • Mac: choose where kernels run from the window, not only Settings (#475)
  • Open, create and run notebooks from ganymede:// links (#471)
  • Run the in-app TypeScript kernel as a kernel of the app's server (#470)
  • TestFlight: set "What to Test" notes on each upload (#467)
  • iPhone/iPad: show the example notebooks in the app's folder by default (#464)
  • Wait for a kernel start before disposing the notebook's session (#462)
  • release.sh and tag-release: resume after a partial failure (#458)
  • Move the @jupyterlab packages to 4.6.6 (#456)
  • Use cdp-kernel 0.9.0; pin vite-plugin-pwa and ganymede-device (#454)
  • Delete packages/client, the agent spike harness and four unused screenshots (#452)
  • Share-sheet extension that runs an offered notebook (spike) (#450)
  • Runner: review follow-ups (spike) (#444)
  • Remove unused icons and a Swift property; fix small CI, script and doc slips (#447) (#448)
  • Run Script on Device: Shortcuts runs with no window (spike) (#443)
  • Device docs: mark the new rows unreleased, explain the app column (#441) (#442)
  • Headless script runner on JavaScriptCore (spike) (#438)
  • iPhone: Open Example Notebooks in the folder list's + menu (#440)
  • Bump the vitest group across 1 directory with 2 updates (#404)
  • Bump the vite group with 2 updates (#405)
  • Device API guide: say it is macOS and iOS only (#431) (#432)
  • Folders in the apps (#430)
  • Turn on device Bluetooth (device.bluetooth) in the apps (#428)
  • Turn on device host events (device.on) in the apps (#426)
  • Turn on the device API's permissioned namespaces in the apps (#424)
  • Device permission ledger in the apps: prompt, open-time asks, Settings › Device (#421)
  • Mac app: check for and install updates with Sparkle (#415)
  • Render anywidget views in sandboxed frames; add the Widgets example (#420)
  • Bundle example notebooks with the app (#419)

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 10:21
4c7b249
  • Mac: closing the start window leaves the app with none (#416) (#418)
  • Link the website and docs from the apps (#410)
  • Mac: ⌘W closes the active tab, not the app (#408)
  • Device prompt: preview what a clipboard copy or share sends (#406)
  • Shortcuts actions for notebooks on a shared action layer (#302) (#403)
  • Show the notebook outline on the iPad and iPhone (#402)
  • Kernel Log: follow with the scroll geometry APIs (#372) (#401)
  • Name the asking notebook in the device prompt (#389) (#400)
  • Release: list Ganymede docs that describe the unreleased app (#398)
  • Don't report closed for a kernel the UI shut down (#394) (#396)
  • Keep a closed notebook's failed save until it is shown; one Reload at a time (#395)
  • Report in-app kernels dead when the kernel web view's process dies (#388)
  • Save open notebooks before a reload the page starts (#387)
  • Keep the server's message for a hidden path (#392)
  • Say a notebook in a hidden folder can't open, not that it's missing (#386)
  • Answer device calls with web APIs in a browser, behind a click prompt (#384) (#385)
  • apple: download GanymedeFFI.xcframework for a ganymede release tag (#382)
  • @observable for AppModel and OpenRequests (step 3 of #357) (#381)
  • Answer device calls from server kernels (#380)
  • @observable for the window models (step 2 of #357) (#379)
  • @observable for the leaf models (step 1 of #357) (#377)
  • Unreleased note for the browser floor; last single-value onChange (#356) (#376)
  • Lock and reload a notebook that changed on disk (#369)
  • ci: count both paths of a rename in ci-changes.sh (#373)
  • Require macOS 26 / iOS 26; Mac app arm64 only (#358)
  • Code font: reach text outputs, label all features, version font URLs (#371)
  • Docs: drop the /files sandbox caveat now that Ganymede sandboxes it (#191) (#374)
  • Notebook pane: Reload, not Retry, when a chunk fails to load (#365)
  • Make SVG chart text legible in dark mode (#368)
  • CI: skip e2e and the macOS app on docs-only pushes to main (#360) (#362)
  • CI: build the downloadable Mac app on main only; skip macos-app on release (#361) (#363)
  • Code font settings: face, size, ligatures, alternates (#355)
  • Highlight code cells before the kernel starts (#353)
  • Kernel list follows kernelspec installs and removals (#351)
  • Crash reports: flush the Rust panic event before the FFI abort (#318) (#349)
  • Release: publish only the release's own archives (#334) (#348)
  • CI: test against Ganymede 0.7.0 (#347)
  • CI: skip e2e and the macOS app on PRs that can't affect them (#345)

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 06 Nov 17:42
8459777
  • Docs: the apps' user guide as docs/apps.md (#341)
  • Docs: fail on an "unreleased" marker that isn't the standard note (#339)
  • Docs: stale release and app facts in README, apple/README, deploying.md (#336)
  • Mac: one Settings window for agent, shortcuts and where kernels run (#333)
  • Bundle cdp-kernel 0.8.0 (#331)
  • CI: test against Ganymede 0.6.0 (#329)
  • Keep squash-merged PRs in the changelog (#327)

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 06 Nov 02:38
fb1374e
  • Declare export compliance in the Apple apps' Info.plist (#323)
  • Opt-in crash reports in the Mac and iOS apps (#321)
  • Send opt-in error reports from the web UI to Sentry (#320)
  • architecture.md: point to device.md for device's methods (#317)
  • Any of the notebook, panel and inspector can fill the Mac window (#312)
  • Mac: kernel popover with state, memory and kernel actions (#315)
  • Mac: a dot on a notebook's tab while its kernel runs (#314)
  • Kernel memory in the Mac app's Running list (#313)
  • Mac right inspector with Outline and Variables (#311)
  • Kernel Log: tell an unknown kernel from a missing route, follow only at the end (#306)
  • docs/device.md: list the new device methods; guard the pick example (#308)
  • Variables view beside the notebook (#283)
  • Release a kernel's device sounds when it shuts down (#310)
  • KernelHost: drop device dialogs when the kernel page goes (#279)
  • Command palette: hold the selection by entry, not row (#307)
  • Responsive toolbar with a "…" overflow menu (#280)
  • Bump ganymede-device: share, Quick Look, pickers, sound (#300)
  • Outline: keep backslashes in code spans and autolink addresses (#297)
  • Mac: Kernel Log tab in the bottom panel (#298)
  • Command palette (⇧⌘P) (#278)
  • iPad: navigator tabs, files over the notebook, bottom panel, fill the screen (#277)
  • Mac: restored notebook tabs show their notebooks; Finder file comes to front (#271)
  • Settings › Kernels: reload on the server's URL and start errors (#290)
  • Device docs: generate the method table from ganymede-device; bump it (#289)
  • Notebook outline from Markdown headings (#275)
  • Mac: follow only the app's page, not other URLs on its server (#287)
  • Mac: add a Kernels tab to Settings (#286)
  • Mac app icon from the iOS one, in macOS's icon grid (#281) (#282)
  • Mac: restore the sidebar's state per window (#285)
  • Mac: list terminals in the Running tab, with a server line (#284)
  • Show each running kernel's memory in the sidebar (#270)
  • iPad and iPhone: Rename in the notebook's ⋯ menu (#274)
  • Mac: a folder window follows the page's dir= (#220) (#272)
  • Mac: open Finder files by Apple Event; no Connect… frame at launch (#267)
  • release.sh: unshallow before git-cliff (#269)
  • Release: testflight_only input for manual runs (#265)
  • iPhone: add-cell bar after the cell, phone gutters with native chrome (#264)
  • Mac: notebooks, text files and terminals as tabs of one window (#257)
  • Search and Recents in the iPad sidebar (#254)
  • ServerHost test: check the port after stop() with connect (#262)
  • One native Settings screen on iPad and iPhone (#260)
  • Keys above the on-screen keyboard while a cell is edited (#259)
  • Mac: terminals in a bottom panel of the notebook window (#255)
  • iPhone: folder list with the notebook pushed onto it (#253)
  • Device API: info, haptics, openURL and clipboard images in the app (#261)
  • Mac: navigator sidebar with Files, Search, Running, Outline and Recents tabs (#256)
  • Sidebar search across files, and Recents (#233)
  • Show running kernels in the iPad sidebar (#252)
  • Upload iPad and iPhone builds to TestFlight from release.yml (#244)
  • Running and queued cells, and error notices with a next step (#234)
  • Rename follow-up: refresh sessions before moving them, hand off at both paths (#243)
  • Mac: one Settings window with tabs, and Save in the toolbar (#236)
  • Drag cells to reorder; drop notebooks in from Files and Finder (#231)
  • Fix the ServerHost test's post-stop timeout on the iOS simulator (#239)
  • iPad: native sidebar, toolbar and key commands (#237)
  • Mac: running kernels in the native sidebar, and shutting them down (#235)
  • Rename edge cases: late save notice, mid-rename kernels, closed notebooks' sessions (#238)
  • First-run welcome and a sample notebook (#230)
  • Mac: File › Rename, through the page's rename (#232)
  • Mac: open notebooks from the Finder through the app delegate (#229)
  • Mac: fix crash opening a notebook from the Finder (non-customizable toolbar) (#227)
  • Command bridge and chrome=native for the apps' native chrome (#217)
  • Rename the open notebook from its title; sidebar file actions (#221)
  • Respect safe-area insets on phones (#218)
  • Create new notebooks in the sidebar's folder and say when it fails (#195)
  • Touch cell controls: a menu on each cell and an add-cell bar (#219)
  • Apple app: start the server at Default priority (#193)
  • Close the sidebar on a phone (#198)
  • List the page's kernels beside the server's in the apps (#196)
  • Add a Device API page for app users (#190)
  • Check for the iOS SDKs before bootstrap.sh builds (#187)
  • CI: test against Ganymede 0.5.0, build the app from v0.5.0 (#182)
  • Quick Look: review fixes that missed #178 (#180)
  • Mac app: native sidebar, toolbar and Cell/Kernel menus (#222)
  • Sidebar file actions: rename, duplicate, delete, new folder (#223)

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 03:35
e80a9a8
  • Quick Look preview and Finder thumbnails for notebooks (#178)
  • Build the apps against current ganymede main (#174)
  • Keep agent API keys in the Keychain in the Apple apps (#172)
  • Use cdp-kernel 0.7.2 (#171)
  • Add line numbers, auto-indent and bracket pairing to the editor (#169)
  • Upgrade to Vite 8 and @vitejs/plugin-react 6 (#162)
  • Edit text files from the sidebar in a native editor (#164)
  • Show saved ipywidgets without a kernel (#163)
  • Add agent settings: toggle, provider, model and API key (#168)
  • Bump @tlockney/ganymede-device from bd8d014 to ddfd1ec (#167)
  • Add a cell type picker; explain command mode in the shortcuts sheet (#160)
  • Take the Mac app's version from MARKETING_VERSION (#159)
  • Mark unreleased features in the docs (#161)
  • Open SSH terminals to remotes on iPad and iPhone (#157)
  • Register the device bridge on the kernel web view (#155)
  • Sign, notarize, and attach the Mac app to releases (#156)
  • Bump the npm group with 3 updates (#153)
  • Mac: start New Terminal in the front window's folder (#152)
  • Make Mac notebook windows behave as document windows (#149)
  • Render notebooks made elsewhere better: SVG plots, long output, tables (#151)
  • Apply the 2026-10-25 Dependabot updates that pass (#148)
  • Give kernel web view kernels the device preload (#145)
  • Open SSH terminals to remotes on the Mac (#144)
  • Mac: open .ipynb files from the Finder, one window per notebook (#142)
  • Start a notebook's kernel on the first run, not on open (#141)
  • Keep a list of remotes in the apps instead of one kernel server (#140)
  • Document independent review and spike rules (#138)
  • Open terminals on the Mac from the app's or the kernel server (#127)
  • Open a notebook named in the page URL (#136)
  • Spike: Pi Durable agent on the open notebook (#126)
  • Add a SwiftTerm terminal view to the apps (#125)
  • Bump vite-plugin-pwa from 1.3.0 to 2.0.0 (#113)
  • Bump Swatinem/rust-cache from 2.9.2 to 2.9.3 in the actions group (#111)
  • Autosave, conflict checks and error notices for saving (#106)
  • Test against Ganymede 0.4.0 and cdp-kernel 0.7.1 (#109)
  • Client: drop malformed frames and isolate throwing listeners (#103)
  • Run the Apple apps' page kernels in a hidden kernel web view (#110)
  • Bump cdp-kernel to 0.7.1 (#107)
  • Swift shell: report keychain errors; start the server off the main actor (#104)
  • End page kernels with their backend; answer every relayed request (#102)
  • Render trusted HTML and JavaScript outputs in sandboxed frames (#105)
  • packages/client: cookie auth and X-XSRFToken (#101)
  • Keep the server token out of localStorage (#100)