Skip to content

quarto-cli (v1.10.3 and HEAD) fails to build on fresh installed systems (missing npm) #14420

@wlatendresse

Description

@wlatendresse

I have:

  • searched the issue tracker for similar issues
  • installed the latest version of Quarto CLI
  • formatted my issue following the Bug Reports guide

Bug description

The build process relies on the existence of the npm executable but it does not check it' existence upfront before downloading all other dependencies and fails because of the missing npm executable.

Steps to reproduce

  1. Install a fresh Linux (or maybe even any other system) OS.
  2. Clone quarto-cli v1.10.3. (At the time of writing the HEAD version fails too.)
  3. Build quarto-cli as described in the build instructions.

Actual behavior

Build process fails because of missing npm after having downloaded nearly all other dependencies.

Expected behavior

The build process should instead check the existence of necessary executables it can not provide itself and warn about the missing dependencies (here npm) at the beginning of the build and before further binaries are being downloaded (and because it will probably not be able to install npm or other system-wide executables without the obligatory privileges).

Your environment

  • OS: EndeavourOS Titan (2026.03.06) / any other Linux should result in the same faulty behavior
  • No other dependencies since this issue is build related and the commands are not yet available.

Quarto check output

Impossible because build fails.

Instead the output of the build itself:

Cloning into 'quarto-cli'...
remote: Enumerating objects: 183877, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 183877 (delta 0), reused 1 (delta 0), pack-reused 183872 (from 1)
Receiving objects: 100% (183877/183877), 314.37 MiB | 863.00 KiB/s, done.
Resolving deltas: 100% (133431/133431), done.
[liveuser@eos-2026.03.06 gits]$ ls -al
total 0
drwxr-xr-x  3 liveuser liveuser  60 Apr 23 14:43 .
drwxr-xr-x  3 liveuser liveuser 120 Apr 23 14:19 ..
drwxr-xr-x 15 liveuser liveuser 680 Apr 23 14:49 quarto-cli
[liveuser@eos-2026.03.06 gits]$ cd quarto-cli/
[liveuser@eos-2026.03.06 quarto-cli]$ git checkout v1.10.3
Note: switching to 'v1.10.3'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 4ba555c5b Update version.txt
[liveuser@eos-2026.03.06 quarto-cli]$ 
[liveuser@eos-2026.03.06 quarto-cli]$ 
[liveuser@eos-2026.03.06 quarto-cli]$ ./configure.sh
+ source configuration
++ export DENO=v2.4.5
++ DENO=v2.4.5
++ export DENO_DOM=v0.1.41-alpha-artifacts
++ DENO_DOM=v0.1.41-alpha-artifacts
++ export PANDOC=3.8.3
++ PANDOC=3.8.3
++ export DARTSASS=1.87.0
++ DARTSASS=1.87.0
++ export ESBUILD=0.25.10
++ ESBUILD=0.25.10
++ export TYPST=0.14.2
++ TYPST=0.14.2
++ export TYPST_GATHER=0.2.2
++ TYPST_GATHER=0.2.2
++ export VERAPDF=1.28.2
++ VERAPDF=1.28.2
++ export BOOTSTRAP=ad946cafdbf1c91cfd714cb39948bb203ae66e66
++ BOOTSTRAP=ad946cafdbf1c91cfd714cb39948bb203ae66e66
++ export HTMLTOOLS=0.5.7
++ HTMLTOOLS=0.5.7
++ export BOOTSTRAP_FONT=1.13.1
++ BOOTSTRAP_FONT=1.13.1
++ export BOOTSWATCH=5.3.1
++ BOOTSWATCH=5.3.1
++ export ANCHOR_JS=5.0.0
++ ANCHOR_JS=5.0.0
++ export POPPER_JS=2.11.7
++ POPPER_JS=2.11.7
++ export CLIPBOARD_JS=2.0.11
++ CLIPBOARD_JS=2.0.11
++ export TIPPY_JS=6.3.7
++ TIPPY_JS=6.3.7
++ export PDF_JS=2.8.335
++ PDF_JS=2.8.335
++ export REVEAL_JS=5.1.0
++ REVEAL_JS=5.1.0
++ export REVEAL_JS_MENU=2.1.0
++ REVEAL_JS_MENU=2.1.0
++ export REVEAL_JS_CHALKBOARD=217142176341e24628db2908cae38221ef13d639
++ REVEAL_JS_CHALKBOARD=217142176341e24628db2908cae38221ef13d639
++ export REVEAL_JS_PDFEXPORT=2.0.1
++ REVEAL_JS_PDFEXPORT=2.0.1
++ export LIST_JS=2.3.1
++ LIST_JS=2.3.1
++ export DAY_JS=1.11.7
++ DAY_JS=1.11.7
++ export ZENSCROLL_JS=4.0.2
++ ZENSCROLL_JS=4.0.2
++ export GITHUB_MARKDOWN_CSS=5.2.0
++ GITHUB_MARKDOWN_CSS=5.2.0
++ export GLIGHTBOX_JS=3.2.0
++ GLIGHTBOX_JS=3.2.0
++ export DATATABLES_CONFIG=bs5/jszip-3.10.1/dt-1.13.8/b-2.4.2/b-html5-2.4.2/b-print-2.4.2/kt-2.11.0/r-2.5.0
++ DATATABLES_CONFIG=bs5/jszip-3.10.1/dt-1.13.8/b-2.4.2/b-html5-2.4.2/b-print-2.4.2/kt-2.11.0/r-2.5.0
++ export PDF_MAKE=0.2.7
++ PDF_MAKE=0.2.7
++ export AUTOCOMPLETE_JS=1.19.1
++ AUTOCOMPLETE_JS=1.19.1
++ export FUSE_JS=6.6.2
++ FUSE_JS=6.6.2
++ export ALGOLIA_SEARCH_JS=4.5.1
++ ALGOLIA_SEARCH_JS=4.5.1
++ export ALGOLIA_SEARCH_INSIGHTS_JS=2.0.3
++ ALGOLIA_SEARCH_INSIGHTS_JS=2.0.3
++ export QUARTO_VERSION=1.10
++ QUARTO_VERSION=1.10
++ export QUARTO_NAME=Quarto
++ QUARTO_NAME=Quarto
++ export QUARTO_PACKAGE_DIR=package
++ QUARTO_PACKAGE_DIR=package
++ export QUARTO_DIST_DIR=dist
++ QUARTO_DIST_DIR=dist
++ export QUARTO_SHARE_DIR=share
++ QUARTO_SHARE_DIR=share
++ export QUARTO_BIN_DIR=bin
++ QUARTO_BIN_DIR=bin
++ export QUARTO_SRC_DIR=src
++ QUARTO_SRC_DIR=src
++ export QUARTO_OUT_DIR=out
++ QUARTO_OUT_DIR=out
++ export QUARTO_MSI_UPGRADE_CODE=98fb2e98-96b0-46e1-a6fd-94171233d11b
++ QUARTO_MSI_UPGRADE_CODE=98fb2e98-96b0-46e1-a6fd-94171233d11b
+ export DENO=v2.4.5
+ DENO=v2.4.5
+ export DENO_DOM=v0.1.41-alpha-artifacts
+ DENO_DOM=v0.1.41-alpha-artifacts
+ export PANDOC=3.8.3
+ PANDOC=3.8.3
+ export DARTSASS=1.87.0
+ DARTSASS=1.87.0
+ export ESBUILD=0.25.10
+ ESBUILD=0.25.10
+ export TYPST=0.14.2
+ TYPST=0.14.2
+ source package/scripts/common/utils.sh
++ [[ linux-gnu == darwin* ]]
+++ uname -m
++ NIXARCH=x86_64
++ [[ x86_64 == x86_64 ]]
++ DENOURL=https://github.com/denoland/deno/releases/download
++ DENOFILES=deno-x86_64-unknown-linux-gnu.zip
++ DENO_ARCH_DIR=x86_64
+ source package/src/set_package_paths.sh
++++ dirname -- package/src/set_package_paths.sh
+++ cd -- package/src
+++ pwd
++ export SCRIPT_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/src
++ SCRIPT_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/src
+++ cd -- /home/liveuser/Desktop/gits/quarto-cli/package/src/../..
+++ pwd
++ export QUARTO_ROOT=/home/liveuser/Desktop/gits/quarto-cli
++ QUARTO_ROOT=/home/liveuser/Desktop/gits/quarto-cli
++ export QUARTO_SRC_PATH=/home/liveuser/Desktop/gits/quarto-cli/src
++ QUARTO_SRC_PATH=/home/liveuser/Desktop/gits/quarto-cli/src
++ export QUARTO_PACKAGE_PATH=/home/liveuser/Desktop/gits/quarto-cli/package
++ QUARTO_PACKAGE_PATH=/home/liveuser/Desktop/gits/quarto-cli/package
++ export QUARTO_DIST_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/dist
++ QUARTO_DIST_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/dist
++ export QUARTO_SHARE_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/dist/share
++ QUARTO_SHARE_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/dist/share
++ export QUARTO_BIN_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/dist/bin
++ QUARTO_BIN_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/dist/bin
+ QUARTO_VENDOR_BINARIES=true
+ DENO_BIN=/home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/x86_64/deno
+ [[ true = true ]]
++ echo v2.4.5
++ sed s/v//
+ DENO_VERSION_NO_V=2.4.5
+ [[ ! -f /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/x86_64/deno ]]
+ echo 'Bootstrapping Deno...'
Bootstrapping Deno...
+ rm -rf /home/liveuser/Desktop/gits/quarto-cli/package/dist
+ mkdir -p /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools
+ pushd /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools
~/Desktop/gits/quarto-cli/package/dist/bin/tools ~/Desktop/gits/quarto-cli
+ for DENOFILE in $DENOFILES
+ download https://github.com/denoland/deno/releases/download/v2.4.5/deno-x86_64-unknown-linux-gnu.zip deno-x86_64-unknown-linux-gnu.zip
+ url=https://github.com/denoland/deno/releases/download/v2.4.5/deno-x86_64-unknown-linux-gnu.zip
+ destination=deno-x86_64-unknown-linux-gnu.zip
+ curl --version
+ grep -qF ' https '
+ curl --fail -L -o deno-x86_64-unknown-linux-gnu.zip https://github.com/denoland/deno/releases/download/v2.4.5/deno-x86_64-unknown-linux-gnu.zip
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
  0      0   0      0   0      0      0      0                              0
100 42.29M 100 42.29M   0      0  1.43M      0   00:29   00:29          1.48M
+ unzip -o deno-x86_64-unknown-linux-gnu.zip
Archive:  deno-x86_64-unknown-linux-gnu.zip
  inflating: deno                    
+ mkdir -p x86_64
+ mv deno x86_64
+ rm deno-x86_64-unknown-linux-gnu.zip
+ ln -s x86_64/deno deno
+ '[' -n '' ']'
+ mkdir -p /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/../config
+ echo v2.4.5
+ popd
~/Desktop/gits/quarto-cli
+ export DENO_BIN_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/x86_64/deno
+ DENO_BIN_PATH=/home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/x86_64/deno
+ '[' '' == '' ']'
+ export DENO_DIR=/home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/deno_cache
+ DENO_DIR=/home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/deno_cache
+ echo 'Downloading Deno Stdlib'
Downloading Deno Stdlib
+ /home/liveuser/Desktop/gits/quarto-cli/package/scripts/deno_std/download.sh
+ pushd /home/liveuser/Desktop/gits/quarto-cli/package/src/
~/Desktop/gits/quarto-cli/package/src ~/Desktop/gits/quarto-cli
+ ./quarto-bld configure --log-level info
Configuration info

******************************************
Configuration:
 - OS:       linux
 - Arch:     x86_64
 - Version:  1.10
 - Cwd:      /home/liveuser/Desktop/gits/quarto-cli/package/src
 - DENO_DIR: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/deno_cache
 - Directory configuration:
   - Package folder (build source): /home/liveuser/Desktop/gits/quarto-cli/package
   - Dist folder (output folder): /home/liveuser/Desktop/gits/quarto-cli/package/dist
     - bin folder: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin
     - share folder: /home/liveuser/Desktop/gits/quarto-cli/package/dist/share
   - Package working folder: /home/liveuser/Desktop/gits/quarto-cli/package/pkg-working

******************************************

configure
Preparing deno_dom (linux - x86_64)
Downloading deno_dom
Downloading https://s3.amazonaws.com/rstudio-buildtools/quarto/deno_dom/v0.1.41-alpha-artifacts/libplugin.so
to /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/libplugin.so
Configuring deno_dom
Cleaning up
deno_dom complete.

Preparing Pandoc (linux - x86_64)
Downloading Pandoc
Downloading https://s3.amazonaws.com/rstudio-buildtools/quarto/pandoc/3.8.3/pandoc-3.8.3-linux-amd64.tar.gz
to /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/pandoc-3.8.3-linux-amd64.tar.gz
Configuring Pandoc
Untar
Input: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/pandoc-3.8.3-linux-amd64.tar.gz
Cwd: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools
pandoc-3.8.3/
pandoc-3.8.3/bin/
pandoc-3.8.3/bin/pandoc
pandoc-3.8.3/bin/pandoc-server
pandoc-3.8.3/bin/pandoc-lua
pandoc-3.8.3/share/
pandoc-3.8.3/share/man/
pandoc-3.8.3/share/man/man1/
pandoc-3.8.3/share/man/man1/pandoc-server.1.gz
pandoc-3.8.3/share/man/man1/pandoc-lua.1.gz
pandoc-3.8.3/share/man/man1/pandoc.1.gz
Cleaning up
Pandoc complete.

Preparing Dart Sass Compiler (linux - x86_64)
Downloading Dart Sass Compiler
Downloading https://s3.amazonaws.com/rstudio-buildtools/quarto/dart-sass/1.87.0/dart-sass-1.87.0-linux-x64.tar.gz
to /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/dart-sass-1.87.0-linux-x64.tar.gz
Configuring Dart Sass Compiler
Untar
Input: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/dart-sass-1.87.0-linux-x64.tar.gz
Cwd: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools
dart-sass/src/LICENSE
dart-sass/src/dart
dart-sass/src/sass.snapshot
dart-sass/sass
Cleaning up
Dart Sass Compiler complete.

Preparing esbuild javascript bundler (linux - x86_64)
Downloading esbuild javascript bundler
Downloading https://s3.amazonaws.com/rstudio-buildtools/quarto/esbuild/0.25.10/esbuild-linux-x64.tgz
to /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/esbuild-linux-x64.tgz
Configuring esbuild javascript bundler
Untar
Input: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/esbuild-linux-x64.tgz
Cwd: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools
package/bin/esbuild
package/package.json
package/README.md
Cleaning up
esbuild javascript bundler complete.

Preparing Typst (linux - x86_64)
Downloading Typst
Downloading https://s3.amazonaws.com/rstudio-buildtools/quarto/typst/0.14.2/typst-x86_64-unknown-linux-musl.tar.xz
to /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/typst-x86_64-unknown-linux-musl.tar.xz
Configuring Typst
Untar
Input: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/typst-x86_64-unknown-linux-musl.tar.xz
Cwd: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools
typst-x86_64-unknown-linux-musl/
typst-x86_64-unknown-linux-musl/NOTICE
typst-x86_64-unknown-linux-musl/LICENSE
typst-x86_64-unknown-linux-musl/typst
typst-x86_64-unknown-linux-musl/README.md
Cleaning up
Typst complete.

Preparing typst-gather (linux - x86_64)
Downloading typst-gather
Downloading https://s3.amazonaws.com/rstudio-buildtools/quarto/typst-gather/0.2.2/typst-gather-x86_64-unknown-linux-gnu.tar.gz
to /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/typst-gather-x86_64-unknown-linux-gnu.tar.gz
Configuring typst-gather
Untar
Input: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools/typst-gather-x86_64-unknown-linux-gnu.tar.gz
Cwd: /home/liveuser/Desktop/gits/quarto-cli/package/dist/bin/tools
typst-gather
Cleaning up
typst-gather complete.

Skipping VeraPDF (archive-only)
Building quarto-preview.js...
Building quarto-preview.js
Installing...
Running: npm install
error: Uncaught (in promise) NotFound: Failed to spawn 'npm': entity not found
  const output = await command.output();
                               ^
    at spawnChildInner (ext:deno_process/40_process.js:186:17)
    at spawn (ext:deno_process/40_process.js:396:10)
    at Command.output (ext:deno_process/40_process.js:473:12)
    at run (file:///home/liveuser/Desktop/gits/quarto-cli/src/webui/quarto-preview/build.ts:26:32)
    at file:///home/liveuser/Desktop/gits/quarto-cli/src/webui/quarto-preview/build.ts:64:7
    at eventLoopTick (ext:core/01_core.js:179:7)
ERROR: Error
    at configure (file:///home/liveuser/Desktop/gits/quarto-cli/package/src/common/configure.ts:40:11)
    at eventLoopTick (ext:core/01_core.js:179:7)
    at async file:///home/liveuser/Desktop/gits/quarto-cli/package/src/cmd/pkg-cmd.ts:65:9
    at async withGroupAsync (file:///home/liveuser/Desktop/gits/quarto-cli/src/tools/github.ts:126:12)
    at async group (file:///home/liveuser/Desktop/gits/quarto-cli/src/tools/github.ts:141:10)
    at async Command.actionHandler (file:///home/liveuser/Desktop/gits/quarto-cli/package/src/cmd/pkg-cmd.ts:63:7)
    at async Command.execute (https://deno.land/x/cliffy@v1.0.0-rc.3/command/command.ts:1948:7)
    at async Command.parseCommand (https://deno.land/x/cliffy@v1.0.0-rc.3/command/command.ts:1780:14)
    at async quartoBld (file:///home/liveuser/Desktop/gits/quarto-cli/package/src/bld.ts:52:3)
    at async file:///home/liveuser/Desktop/gits/quarto-cli/src/core/main.ts:45:14
    at async mainRunner (file:///home/liveuser/Desktop/gits/quarto-cli/src/core/main.ts:47:5)
    at async file:///home/liveuser/Desktop/gits/quarto-cli/package/src/bld.ts:56:3

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingbuilds

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions