Confusing CLI #11199
Replies: 2 comments 4 replies
-
Thanks for the kind words. The rest of your post deserves a longer answer which I'm not right now prepared to give, but:
Sometimes it's useful/necessary for extensions and user filters to have access to those external software at precisely the right version, and these can live in different places depending on how Quarto is packaged. I hear you about those inconsistencies. With that said, we value backwards compatibility more than we value consistency. You can mitigate consistency problems with documentation, but you can't break backwards compatibility without making your users do extra work. We try very hard to avoid that. One of the things we want to do in 2025 is to overhaul Quarto's internals to communicate warnings + deprecations. When that's in place, we can start making plans for --- slowly! --- introducing changes that make users change the way they work. |
Beta Was this translation helpful? Give feedback.
-
Thanks! Just to clarify,
did not to refer to Pandoc and Typst; there the use is completely clear to me. They are packaged with Quarto to ensure the specific version, and making them available makes perfect sense. Same for Deno and Lua. My comment referred to external software like R and Python, which are independently installed. Therefore scripts in these languages can easily be run without Quarto's |
Beta Was this translation helpful? Give feedback.
-
Description
Whenever I post something on this repository, I feel I'm being unfair because in general Quarto is brilliant, and the effort you put into it shows. With this disclaimer:
I find the Quarto CLI confusing.
install
installs a global dependency (aka tool), butuninstall
does not uninstall a global dependency. Instead it removes an extension, though an extension is not installed butadd
ed; however there's alsoremove
. → Okay, this is legacy.create
can be used to create an extension (which can later be added to a project) but also to initialize a project (two very different things), but a project can also be initialized from a template withuse template
, but there's alsouse binder
which is not used to initialize a project but to add to it. → Maybe haveinit [<type>|<template>]
and reservecreate
for extensions?use
would be open for future generalization to add other things, like utility scripts.Project types are extensions, but
create extension
does not support creating one. →create extension project
?list
andupdate
can be used for tools and extensions (two very different things). → Maybe have a commandtool
with subcommandstool install
,tool update
andtool list
?preview
does the same asrender
, it just previews additionally. (If this point feels especially picky: When I started using Quarto I was massively confused by this.) → Maybe turn previewing into an option ofrender
?Some embedded programs are directly exposed via their own command (
pandoc
,typst
), but other embedded programs (Deno, Lua) can only be used throughrun
, butrun
can also be used for external software (R, Python). → Maybe expose all embedded software in the same way, e.g.run [<embedded program>|<script>]
? (I'm not sure why a command is needed to run external software.)I realize that it is necessary to keep commands working for backwards compatibility. But maybe the already started effort to make things more logical (
remove
an extension instead ofuninstall
) could be continued, and legacy commands could be omitted from--help
but shown separately with--help-legacy
.Somewhat related: The interactive specification of options is very nice, but I'd appreciate it if everything is also accessible through CLI syntax, and where that syntax already exists, if it were explained by
<command> --help
.Beta Was this translation helpful? Give feedback.
All reactions