2026-08-05
Install
macOS and Linux:
curl -fsSL https://m.canouil.dev/quarto-completions/install.sh | bashWindows:
powershell -ExecutionPolicy ByPass -c "irm https://m.canouil.dev/quarto-completions/install.ps1 | iex"Both installers always fetch the latest published completions rather than anything pinned to this release; see https://m.canouil.dev/quarto-completions.
Changelog
New Features
- feat: complete Quarto CLI commands and flags in bash, zsh, fish, and PowerShell.
Every candidate is baked into the script, so pressing Tab runs no process, where the completions Quarto ships behind a hidden command spawn a cold Quarto start on every keypress and return nothing for options declared without a value type. - feat: complete values, not only flag names: output formats for
--to, log levels, publishing providers, installable tools,checktargets, rendering engines, and the Pandoc options Quarto forwards fromrenderandpreview.
Attached and spaced spellings both work, soquarto render --to=htmlcompletes likequarto render --to html. - feat: filter input positionals to
.qmd,.ipynb,.md,.Rmd, and.markdownalongside directories, tracking positional slots soquarto publish gh-pagesoffers a path rather than a second provider. - feat: publish a
releaseand apre-releasechannel, generated from the two Quarto release channels, each with a manifest carrying the Quarto version and a checksum per file.
The names match the vocabularyquarto-actions/setupalready uses. - feat: publish a
devchannel, generated from a Quarto source build, completing the commands Quarto hides fromquarto --help:dev-calland its subcommands,inspect,capabilities,create-project,editor-support,completions, and every subcommand oftools.
Hidden commands cannot be found by walking help output, so they are seeded by path and introspected directly; both installers select this channel automatically when thequartoonPATHreports version99.9.9, which is what a source build reports and a release never does. - feat: publish an archived channel for every Quarto minor from
1.9onward, generated from that line's newest patch.
With no--channelgiven, the installer matches the local Quarto's own minor when it is published, falling back torelease; the most recently archived minor is refreshed weekly against a late patch, and older ones are frozen. - feat: install with one line,
curl -fsSL https://m.canouil.dev/quarto-completions/install.sh | bashon macOS and Linux andpowershell -ExecutionPolicy ByPass -c "irm https://m.canouil.dev/quarto-completions/install.ps1 | iex"on Windows.
Both write under the user's home directory, never callsudo, verify each file against the published SHA-256 before writing, and support--dry-run,--uninstall, and--help. - feat: write each shell's file where that shell will actually find it:
$XDG_DATA_HOME/bash-completion/completionsfor bash where it exists,$ZSH_CUSTOM/completionsunder Oh My Zsh, Homebrew'sshare/zsh/site-functionswhere the prefix has one and it is writable,~/.zfuncotherwise, and fish's autoloaded completions directory.
The first three need no configuration at all. - feat: keep every shell configuration edit inside a managed block that re-running replaces and
--uninstallremoves.
A block whose closing marker is missing is refused rather than rewritten, on install, on uninstall, and in--dry-runalike; an rc file that is a symlink stays a symlink, and a PowerShell profile carrying no block is left byte-identical. - feat: keep a later install where the first one landed, so installing Oh My Zsh, Homebrew, or
bash-completionafterwards updates the copy already on disk rather than moving it.
The other known locations are swept so nothing shadows it, and a stale copy that cannot be removed, such as one in a Homebrew prefix owned by another user, is reported rather than fatal. - feat: leave an unchanged script alone.
The published manifest is enough to tell that the installed file is already the one that would be written, so re-running over an unchanged release reportsAlready currentand downloads nothing. - feat: warn when the
quartoonPATHdoes not match the completions being installed.
Both installers compare major and minor versions only; a patch difference, thedevsentinel, or noquartoonPATHsays nothing, and the install always succeeds. - feat: end an install by naming a command that loads what was just written:
exec bashrather thanexec bash -l, because a login bash reads~/.bash_profile,~/.bash_login, or~/.profileand never falls back to the~/.bashrcthe block goes in.
Where none of those exists, the default on macOS, or the first one bash finds never mentions.bashrc, the install says so and gives the line that fixes it rather than writing anything itself. - feat: report the shells an install is not maintaining, since each run maintains only the shell
$SHELLnames.
The version and channel stamped in every generated script is read back from whatever is installed for the other shells, and a mismatch is named along with the command that updates it; a file carrying no stamp, or one that cannot be read, is left alone. - feat: generate the scripts by walking
quarto <command> --helpover the whole command tree, run withquarto run src/generate.ts.
The generator uses Quarto's own embedded runtime, so an installed Quarto is its only dependency, and--checkfails when the committed output is stale.
Documentation
- docs: add a documentation website at https://m.canouil.dev/quarto-completions, covering installation, the file and configuration each shell needs, the channels, and troubleshooting.
- docs: give the website its own identity on the
atelierproject type: a terminal-green palette that follows the light and dark colour schemes, a mark derived from the Quarto quadrant with the fourth pane left for Tab to complete, and the favicon, touch icon, web app manifest, and social card generated from it.
Code blocks carry window chrome naming the shell, the navbar links to issues, discussions, and releases through a repository widget, and a 404 page replaces the server default. - docs: add a security policy covering how to report a vulnerability, what is in scope, and the trust boundaries that are design limits rather than bugs.
What's Changed
- feat: generate static shell completions for the Quarto CLI by @mcanouil in #1
- docs: write the changelog entries in conventional commit style by @mcanouil in #2
- docs: rebrand the website onto atelier with its own identity by @mcanouil in #3
- fix: install zsh completions where the shell will actually find them by @mcanouil in #4
- feat: update the completion script wherever it already lives by @mcanouil in #5
- fix: complete attached flag values and harden the installers by @mcanouil in #6
- feat: add a dev completion channel for Quarto's hidden commands by @mcanouil in #7
- feat: warn when the installed Quarto does not match the completions by @mcanouil in #8
- fix: harden the installers against data loss and silent failure by @mcanouil in #9
- fix: report an unterminated managed block in --dry-run by @mcanouil in #10
- docs: rewrite the changelog as first-release notes by @mcanouil in #11
- fix: name a reload command that loads what was installed by @mcanouil in #12
- ci: bump version for release 🚀 by @mcanouil-dev[bot] in #13
- feat: publish a channel per Quarto minor; rename stable/prerelease by @mcanouil in #14
- ci: bump version for release 🚀 by @mcanouil-dev[bot] in #15
- ci: bump version for release 🚀 by @mcanouil-dev[bot] in #18
New Contributors
Full Changelog: https://github.com/mcanouil/quarto-completions/commits/2026.08.05