Experimental. q2 is under active development and not ready for production use.
Install
curl -fsSL https://raw.githubusercontent.com/quarto-dev/q2/main/install.sh | bashOn Windows (PowerShell):
irm https://raw.githubusercontent.com/quarto-dev/q2/main/install.ps1 | iexq2 mcp (the Quarto Hub MCP server) needs Node.js 24+ at runtime;
everything else works standalone. Hub connection defaults for quarto-hub.com are built in.
| Platform | File |
|---|---|
| Linux x86_64 (glibc 2.35+) | q2-0.8.0-linux_amd64.tar.gz |
| Linux ARM64 (glibc 2.35+) | q2-0.8.0-linux_arm64.tar.gz |
| macOS Intel | q2-0.8.0-darwin_amd64.tar.gz |
| macOS Apple Silicon | q2-0.8.0-darwin_arm64.tar.gz |
| Windows x86_64 | q2-0.8.0-windows_amd64.zip |
Verify a manual download (Unix archives are signed with minisign, Ed25519):
minisign -Vm q2-0.8.0-<platform>.tar.gz -P RWR2A9ILpZX1kVF3Q6uk5TRus8FDM25H2F+KKKHEuqlxv+JJSLyPalvNThe trusted comment should name exactly the file you downloaded.
Checksums (all platforms): sha256sum -c checksums.sha256 --ignore-missing
Standalone Quarto Hub MCP server
q2 mcp is also published on its own as a self-contained Node bundle for
running the MCP server without installing q2 — e.g. embedding it in
another tool. Requires Node.js 24+. Download
quarto-hub-mcp-0.8.0.tar.gz, extract, and run node index.mjs --help.
Unlike q2 mcp, this bundle does not embed quarto-hub.com credentials — see
the bundled README.md for the OAuth env vars to set.
(Experimental, temporary channel — npx distribution is planned.)
Changes
- Merge pull request #385 from quarto-dev/release/v0.8.0 (37f249c)
- chore: bump workspace version to 0.8.0 (51fd630)
- fix(quarto-citeproc): stop false CSL lockfile mismatches (#380) (9f96e2c)
- chore(hub-e2e): restore parallel smoke-all workers (3) (25345d5)
- Serve q2-raw.html from separate q2-raw server in local-prod (d6ff31f)
- Merge branch 'main' of https://github.com/quarto-dev/q2 (b9d492a)
- Add
npm run local-prodandnpm run local-prod:nginx(df81631) - Preview rich-text editor: open with drag-selection preserved (bd-abo9m23f) (#383) (30fbc5b)
- chore(hub-client): guard changelog.md edits against qmd parse breakage (bd-q5o7ekzn) (#382) (3cf352b)
- fix(hub-client): unbreak main — escape lone tilde in changelog (bd-q5o7ekzn) (#381) (658026d)
- docs(hub-client): changelog for PWA precache size-limit bump (6cd4dd5)
- fix(hub-client): raise PWA precache size limit so WASM growth stops breaking CI (6cfc098)
- Printing/PDF export from the quarto-hub preview (issue #315) (#379) (29e4ace)
- Fix Windows path-separator leak in brand logo path resolution (#378) (09a0382)
- Fix rich-text editor Mod-Enter commit dropping selected content (#377) (4963674)
- feat(q2-preview): rich-text editing for Plain blocks (tight list items) (#376) (fc512c1)
- Merge pull request #357 from quarto-dev/feature/hub-execution-provider (29e6379)
- docs(design): mark embedded-resource virtual-path contract implemented (cd6539e)
- experimental q2-raw changes (451cad4)
- Merge pull request #372 from quarto-dev/snyk-upgrade-145b733a975d295d58c852dd038219d0 (351b248)
- Bump root + CDN KaTeX pin to 0.17.0 to match sandboxed-preview (7a3f985)
- Merge remote-tracking branch 'origin/main' into _merge_372 (c6b54b5)
- Merge pull request #366 from quarto-dev/snyk-upgrade-d690eb447901def949bde97c5a5a1bf8 (92cc787)
- Merge remote-tracking branch 'origin/main' into _merge_366 (149907a)
- Merge pull request #368 from quarto-dev/snyk-upgrade-2605ca8b4c0c7ee2ce98954a749d26a9 (854c11c)
- Merge remote-tracking branch 'origin/main' into _merge_368 (d5992b6)
- Merge pull request #371 from quarto-dev/snyk-upgrade-5297ec5acba152eb3ec72ee08a9f2813 (ab6d539)
- Merge remote-tracking branch 'origin/main' into _merge_371 (1642de3)
- Merge pull request #373 from quarto-dev/diag/smoke-diag-handle-state (a94f1b3)
- Merge pull request #374 from quarto-dev/bugfix/bd-22rtwdur-windows-smoke-all-suite (1954462)
- Merge pull request #364 from quarto-dev/bugfix/bd-zcjtaz78-error-diagnostics-exit-code (64e459c)
- Merge pull request #370 from quarto-dev/snyk-upgrade-c308e269b7a0721a3f28bdd563e7f336 (e9f519a)
- Merge pull request #369 from quarto-dev/snyk-upgrade-aa5ded10022f15774be5482cb976a942 (f8c2ce5)
- Merge pull request #367 from quarto-dev/snyk-upgrade-2390d25a9f0948ddaaf8dce1f5530965 (bc13422)
- Merge pull request #365 from quarto-dev/snyk-upgrade-526550dfe2b821ef2cc809b536fcb84c (83380aa)
- fix(quarto-core): handle Windows paths in !path metadata adjustment (4ca6ca4)
- fix(quarto-sass): resolve embedded SCSS
@importon Windows (4ab5cab) - docs(design): align test-plan step with the reuse decision (b23d7e6)
- docs(design): reuse quarto_util::to_forward_slashes for the fix (623acbf)
- docs(design): embedded-resource virtual-path contract (40b4bb0)
- fix(quarto-sass): accept CRLF-terminated SCSS layer markers (4a11a89)
- Fix vacuous max-version assertion in pandoc oracle gate test (cd0bcb2)
- gitignore playwright-mcp (c83f049)
- diag(sync-client,hub-e2e): expose stranded-doc DocHandle state in smoke-diag (9c70388)
- docs(plan): commit bd-1d6io source-tracking investigation report (77dbe85)
- docs(plan): cross-reference bd-1d6io in qmd-per-line-provenance plan (1c26e45)
- Fix stale pandoc-oracle test fixtures after 3.10 ceiling bump (d8c3d34)
- Bump pandoc oracle ceiling to 3.10 (d747904)
- fix: upgrade katex from 0.16.28 to 0.17.0 (88845e0)
- fix: upgrade cors from 2.8.5 to 2.8.6 (3923725)
- fix: upgrade @headlessui/react from 2.2.9 to 2.2.10 (3563fd9)
- fix: upgrade tmp from 0.2.5 to 0.2.7 (f3054fa)
- fix: upgrade jsondiffpatch from 0.7.3 to 0.7.6 (b98f9eb)
- fix: upgrade express from 5.1.0 to 5.2.1 (111fcc0)
- fix: upgrade react-dom from 19.2.0 to 19.2.7 (99fc182)
- fix: upgrade react from 19.2.0 to 19.2.7 (2ae2335)
- feat(provide-hub): consent-gated, one-shot-by-default execution (bd-9lgiulr4) (572e698)
- Merge pull request #363 from quarto-dev/bugfix/bd-ohvl879u-jupyter-engine-ignores-error (87fef77)
- fix(quarto-hub-provider): align samod/automerge with quarto-hub (0.12.1/0.10.0) (f119f13)
- fix(render): exit non-zero on error diagnostics from successful renders (bd-zcjtaz78) (6329cb8)
- Merge pull request #361 from quarto-dev/bugfix/bd-i9i5ad2t-pampa-pandoc-oracle-tests (7c42b4a)
- Merge branch 'main' into feature/hub-execution-provider (aa02def)
- feat(jupyter,quarto-core): cell-options facility + error policy — a failing cell aborts the render unless error: true (bd-ohvl879u) (65eb576)
- Merge pull request #360 from quarto-dev/bugfix/bd-gthycd33-jupyter-engine-output-not (370e0e5)
- Merge pull request #362 from quarto-dev/feature/bd-yjs54ptg-strict-mode-warnings-as-errors (e06e8ea)
- docs(plan): record PR #362 in strict-mode plan (c5d783c)
- feat(render): add --strict to promote warning diagnostics to errors (bd-yjs54ptg, GH #220) (7276214)
- Fix pandoc-oracle version gate: numeric range check + actionable failure message (7518f08)
- fix(jupyter): emit Quarto-canonical ::: {.cell} cells so captures splice into previews (bd-gthycd33) (189560e)
- Clarify bd-i9i5ad2t plan spec nits from second design review (716c2d5)
- Refine bd-i9i5ad2t plan per design review (c66c708)
- Finalize bd-i9i5ad2t plan: design decisions resolved (1574e37)
- Investigate bd-i9i5ad2t: pandoc-oracle version gate plan skeleton (8ed037a)
- Merge pull request #356 from quarto-dev/feature/bd-esnxtcoy-zip-absolute-paths (4fbe7ae)
- Merge pull request #358 from quarto-dev/bugfix/remove-error-node-analysis-test (298611a)
- Merge pull request #355 from quarto-dev/feature/bd-qp353u2b-migrate-samod-access-policy (681e9a9)
- Merge pull request #359 from quarto-dev/feature/bd-e1ger90c-support-fnm-nvm-windows (8cd9003)
- docs(plan): record samod relocation to quarto-dev + audit-log dedup follow-ups (2988487)
- chore(hub): point samod dep at quarto-dev/samod@access-policy (46f1da9)
- fix(hub): dedup audit log per (peer, doc) access (d1935ec)
- Support fnm and nvm-windows Node discovery on Windows (bd-e1ger90c) (6cecf76)
- Mark WASM testing and cleanup plan complete (51cf370)
- Remove unused error_node_analysis integration test (da16fd7)
- Merge pull request #109 from quarto-dev/feature/wasm-testing-and-cleanup (e26a8b8)
- Rebase onto main: align with wasm-shim-merge architecture, pin CI toolchain (bf370a0)
- Unblock pampa wasm tests: feature-gate JS bridge, set wasm32 panic strategy (e00fc79)
- Extract C stdlib shims into shared wasm-c-shim crate (78d717d)
- Replace cfg test proxy with real WASM tests and CI job (1bd605d)
- Add WASM testing and cleanup design spec and plan (cfccad9)
- docs(hub-execution-e2e): add knitr harness doc; record jupyter splice bug (bd-gthycd33) (354d696)
- docs(hub-client): changelog for merged preview status line (bd-yai4w8ly) (c825170)
- feat(hub-client): merge preview executor + capture bars into one status line (bd-yai4w8ly) (0b13dbc)
- docs(plan): bd-uy4uygha complete — format:html capture display verified e2e (deee0ed)
- docs(hub-client): changelog for format:html capture display (bd-uy4uygha) (0633786)
- feat(hub-client): show executed output in the default format:html preview (bd-uy4uygha Phase 4) (465f41d)
- feat(preview-runtime): forward captureGzJson through renderToHtml (bd-uy4uygha Phase 3) (6d4d0ba)
- feat(wasm): splice captures in the format:html render branches (bd-uy4uygha Phase 2) (9e8a321)
- feat(quarto-core): splice engine captures into the HTML render (bd-uy4uygha Phase 1) (449f93b)
- docs(plan): html-format capture display fix (bd-uy4uygha) (b4b35fe)
- fix(hub): read Text-valued file ids so hub-client projects materialize (bd-bm0vaetl) (ac1457d)
- test(interop): pin the real root cause — JS stores map string-values as Text (bd-bm0vaetl) (12691a3)
- test(provider): reproduce the JS-authored-doc sync failure (bd-bm0vaetl) (aa00887)
- docs(e2e): lead with public sync server; fix project-mode foreign-doc gotcha (bd-sfet3264) (a9aa582)
- feat(provide-hub): --token/QUARTO_HUB_TOKEN dev escape hatch + local e2e harness (bd-sfet3264) (a3e6446)
- Add changelog entry for ZIP absolute-paths fix (8644683)
- Fix downloaded project ZIP using absolute paths (GH #147) (21be266)
- Merge pull request #354 from quarto-dev/bugfix/bd-dff27o04-windows-json-writer-emits (0efb27e)
- chore(hub): migrate samod to shikokuchuo/samod@access-policy (automerge 0.10) (bfcee64)
- Fix commonmark regression test to check the FileId it actually protects (26ff5a3)
- docs(plan): Phase 4 complete (4a provider execute + 4b Run button) (bd-sfet3264) (c4a83d5)
- Normalize source_context filenames re-added by qmd/commonmark readers (f5a93fa)
- docs(hub-client): changelog for the preview Run button (bd-sfet3264 Phase 4b) (6e279c8)
- feat(hub-client): Run button — request execution from the editor (bd-sfet3264 Phase 4b) (76a0116)
- feat(provider): execute-on-request + capability beacon (bd-sfet3264 Phase 4a) (f19e00b)
- Normalize path separators in ASTContext filenames and diagnostics (bd-dff27o04) (44b75bc)
- fix(pampa): pin test fixtures and snapshots to LF via .gitattributes (6a90359)
- docs(plan): make the single-executor v1 limitation explicit (bd-sfet3264) (3f23865)
- Add quarto-cli path-normalization precedent (deepwiki + source-verified) (d8b07b7)
- Address roborev design review: sharpen invariant, add E2E check, resolve add_filename question (3b00e63)
- Investigate bd-dff27o04: Windows JSON writer backslash path separators (96ff53c)
- docs(plan): lock Phase 4 decisions — provider-only authz, single-executor v1, always-fresh run (bd-sfet3264) (4150eb2)
- docs(plan): Phase 4 (execute-on-request) design + open decisions (bd-sfet3264) (a2b9af3)
- feat(provider): q2 provide-hub subcommand + Node auth bridge (bd-sfet3264 Phase 3C) (5b31827)
- feat(provider): BearerDialer + join-and-list a hub as a client peer (bd-sfet3264 Phase 3A/3B) (9f47be5)
- docs(plan): lock Phase 3 decisions — stdio-pipe token bridge + temp-dir materialization (bd-sfet3264) (1e9611a)
- Merge pull request #352 from quarto-dev/aj-hub-client-subpath (669153f)
- feat(hub-client): Support accessing the hub under a subpath. (e5dc1b4)
- docs(plan): BearerDialer feasibility spike — viable, no samod fork change (bd-sfet3264) (dfdf308)
- docs(changelog): execution capability beacon indicator (bd-sfet3264) (0e68f61)
- feat(hub-client): execution request + capability beacon channel (bd-sfet3264 Phase 2) (7b82387)
- docs(changelog): hub-client capture consumption + clear results (bd-sfet3264) (03cd983)
- feat(hub-client): consume engine captures + per-doc clear results (bd-sfet3264 Phase 1) (42fa84d)
- Merge pull request #351 from quarto-dev/feature/bd-egcyeym9-yaml-cutover (1f6f3ab)
- build: consume published quarto-yaml 0.1.0; delete in-tree YAML stack (bd-egcyeym9) (1e1d218)
- docs(plan): YAML-stack extraction handoff + single-workspace-repo decision (bd-egcyeym9) (df02987)
- Merge pull request #350 from quarto-dev/feature/bd-egcyeym9-error-reporting-cutover (ea820fc)
- build: consume published quarto-error-reporting 0.1.0 from crates.io (bd-egcyeym9) (1d12785)
- Merge pull request #349 from quarto-dev/feature/bd-egcyeym9-error-reporting-split (e014af5)
- build(error-reporting): gate json wire shape behind a default-off
jsonfeature (bd-egcyeym9) (f8cf0ed) - refactor(error-reporting): make catalog-agnostic; extract quarto-error-catalog (bd-egcyeym9) (ea0333a)
- Merge pull request #348 from quarto-dev/feature/bd-egcyeym9-source-map-extraction (337d2fd)
- Merge pull request #347 from quarto-dev/chore/bd-d8nol0xn-disable-pampa-roundtrip-tests (45a55a1)
- build: consume published quarto-source-map 0.1.0 from crates.io (bd-egcyeym9) (4c94eac)
- docs(design): cross-package error-code discipline + foundation extraction plans (bd-egcyeym9) (7f34493)
- Merge pull request #346 from quarto-dev/bugfix/bd-pvcnea83-edit-chrome-top-crop (76e6992)
- test(hub-client e2e): expect breadcrumb chip to flip below at the document top (bd-pvcnea83) (7f6aebe)
- test(preview-renderer): gate native-pampa round-trip tests behind an opt-in env var (bd-d8nol0xn) (c96b0da)
- Merge pull request #340 from quarto-dev/bugfix/bd-picv-fix-windows-path-separator (b8fb38b)
- docs(plan): edit-chrome top-crop fix (bd-pvcnea83) (9daa5a9)
- docs(hub-client): changelog for edit-chrome top-crop fix (bd-pvcnea83) (765f9f1)
- fix(preview): flip edit chrome below the block when cropped at the viewport top (bd-pvcnea83) (d6066dc)
- Merge pull request #345 from quarto-dev/feature/bd-9x3zbuj8-preview-hierarchy-nav-overlap (b6b1a31)
- Merge pull request #341 from quarto-dev/bugfix/bd-c5bdf948-fix-windows-test-failures (c64e391)
- Make lua/runtime command tests hermetic on Windows (09862fd)
- docs(hub-client): changelog for inline nesting navigator + q2-preview default-on (bd-9x3zbuj8) (42870bc)
- Investigate bd-c5bdf948: lua command tests non-hermetic, not a tool bug (7ce1127)
- docs(plan): q2-preview hierarchy navigator + overlap fix (bd-9x3zbuj8) (553ded6)
- test(q2-preview e2e): pin richText=0 in edit-cell-sizing no-reflow tests (bd-n4v4phe4) (ad18bf9)
- feat(q2-preview): default the hierarchical block navigator ON (bd-9x3zbuj8 Task 1) (d73079b)
- feat(preview-renderer): render the nesting breadcrumb inline in the rich-text toolbar (bd-9x3zbuj8 Task 2) (15b9287)
- fix(pampa): forward-slash normalize quarto.utils.resolve_path output (7c1341a)
- Investigate bd-picv: forward-slash normalize resolve_path on Windows (b4fdb0c)