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.7.0-linux_amd64.tar.gz |
| Linux ARM64 (glibc 2.35+) | q2-0.7.0-linux_arm64.tar.gz |
| macOS Intel | q2-0.7.0-darwin_amd64.tar.gz |
| macOS Apple Silicon | q2-0.7.0-darwin_arm64.tar.gz |
| Windows x86_64 | q2-0.7.0-windows_amd64.zip |
Verify a manual download (Unix archives are signed with minisign, Ed25519):
minisign -Vm q2-0.7.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.7.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 #339 from quarto-dev/release/v0.7.0 (a5fc4c0)
- chore(release): bump workspace version to 0.7.0 (21aa1ff)
- Merge pull request #338 from quarto-dev/bugfix/bd-w1s38lbe-monaco-backtick-autoclose (eb50744)
- docs(plan): mark backtick auto-close fix verified end-to-end (bd-w1s38lbe) (2885a87)
- docs(hub-client): changelog for backtick auto-close fix (bd-w1s38lbe) (f595ed0)
- fix(hub-client): stop Monaco auto-closing inline-code backticks (bd-w1s38lbe) (0ccf989)
- Merge pull request #335 from quarto-dev/feature/bd-sjb4pzx8-tiptap-rich-text-editor (9a3add9)
- test(hub-client e2e): pin richText OFF as the textarea baseline (bd-038tnyqy) (b91d727)
- docs(richtext): mark hub-client richText plan complete (bd-j1nto6eq) (eff5090)
- docs(hub-client): changelog for default rich-text editor (bd-j1nto6eq) (b010daf)
- feat(hub-client): enable rich-text editor in q2-preview by default (bd-j1nto6eq) (a6f16a1)
- Merge branch 'main' into feature/bd-sjb4pzx8-tiptap-rich-text-editor (0abcf8c)
- Merge pull request #337 from quarto-dev/feature/bd-9kzfi-q2-preview-scroll-sync (4527a7f)
- feat(preview): make rich-text editing the default in q2 preview (bd-sjb4pzx8) (512907f)
- docs(changelog): add q2-preview scroll sync entry for 160c660 (cf138ef)
- docs(hub-client): changelog for em-italic preview fix (bd-dg8x84bu) (dcd4100)
- fix(preview): scope reveal reset.css to .reveal so it stops killing italics (bd-dg8x84bu) (79ea283)
- docs(richtext): mark caret-at-click plan complete (bd-q9lyghv2) (5a70eec)
- fix(richtext): own opening caret placement, disabling tiptap autofocus (bd-q9lyghv2) (410885a)
- refactor(preview-renderer): unify iframe scroll-sync into one code path (5eb5c06)
- feat(richtext): place caret at click position on first activation (bd-q9lyghv2) (151be67)
- fix(hub-client): make q2-preview scroll sync reliable (f469c92)
- Merge pull request #336 from quarto-dev/bugfix/bd-3zp3z4jx-link-url-corrupted-write (1c79b84)
- Wire scroll sync for the q2-preview format (160c660)
- fix(reconcile): don't inherit an adjacent link's URL on write-back (bd-3zp3z4jx) (be7a6d2)
- feat(richtext): formatting toolbar (B/I/S/sub/sup/link) + sub/sup marks (bd-sjb4pzx8) (fa72ca3)
- feat(richtext): Phase 1b — rich-text editing for headings (bd-sjb4pzx8) (f337376)
- feat(richtext): left-margin rich/plain editor toggle (bd-sjb4pzx8) (81d9b24)
- feat(richtext): left-margin "Editing…" label + fix shortcode chip source (bd-sjb4pzx8) (8140374)
- feat(richtext): edit-mode affordance — tint active editor (bd-sjb4pzx8) (f4651c5)
- docs(richtext): Phase 1a verified end-to-end in q2 preview (bd-sjb4pzx8) (7a80fa0)
- feat(richtext): Phase 1a rich-text editor component + flag plumbing (bd-sjb4pzx8) (e330947)
- feat(richtext): Phase 1a production round-trip core (bd-sjb4pzx8) (76ed612)
- spike(bd-sjb4pzx8): tiptap/ProseMirror markdown round-trip feasibility (47ed9d2)
- Merge pull request #334 from quarto-dev/epic/hub-client-full-text-search (19aff01)
- Merge pull request #332 from quarto-dev/feature/bd-vxl8-fix-windows-lua-path (c0df6d4)
- docs(plan): mark Phase 1 full-text search complete (3571e22)
- docs(hub-client): changelog entry for full-text search (263359c)
- test(hub-client): e2e for full-text search through the sync pipeline (9a48dd8)
- feat(hub-client): wire full-text search into editor + sidebar UI (756568c)
- Merge pull request #333 from quarto-dev/feature/concat-map-exclusive-end (f301828)
- feat(hub-client): SearchProvider interface + in-memory impl (TDD) (a8dca1b)
- build(hub-client): add minisearch for full-text search (Phase 1.1) (cb6398d)
- docs(plan): hub-client full-text search design + phased plan (2f2f55f)
- source-map: map the exclusive end of a Concat range (4e3f3c2)
- Merge pull request #330 from quarto-dev/feature/revealjs-code-copy (01d0db6)
- docs(quarto-util): correct is_rooted wasm rationale (ce75a3f)
- fix(pampa): resolve rooted dofile paths correctly on wasm32 (24f2f9e)
- feat(preview): iframe-safe code-copy in q2 preview / hub-client (374a180)
- fix(pampa): handle native paths in synthetic Lua io tests on Windows (b406cad)
- build(pampa): promote quarto-util to a normal dependency (a45a7a3)
- feat(quarto-util): add is_rooted cross-target path predicate (96d7f66)
- docs(plan): address design review of bd-vxl8 plan (e230be4)
- feat(revealjs): support code-copy (CSS + native clipboard JS); lift suppression (fbe5bfa)
- Merge pull request #329 from quarto-dev/feature/bd-1d3e-fix-crlf-test-failures (533ed6e)
- docs(plan): bd-vxl8 windows lua path handling implementation plan (d37f1e8)
- fix(doctemplate): preserve line-ending convention in multiline directives (e2476a8)
- Merge pull request #328 from quarto-dev/chore/smoke-all-render-error-diag (351c4ba)
- test(smoke-all): isolate extension fixtures + wait for sync peer in E2E (c73ae8d)
- fix(sync-client): retry unavailable files via bounded poll while online (a8c36d7)
- chore(hub-e2e): surface on-screen render-error in smoke-diag line (00e11f4)