quasarframework/quasar · warning

No output folder found for target "${target}". Files have no

Error message

No output folder found for target "${target}". Files have not been copied to /dist. You will need to manually extract the Cordova distributables.

What it means

After building via Cordova, Quasar copies the platform build output (e.g. platforms/android/app/build/outputs/apk) into dist/. When the expected output folder for the target platform doesn't exist, the copy is skipped and this warning tells you to grab the distributables manually.

Source

Thrown at app-vite/lib/modes/cordova/cordova-builder.js:139

      const targetFolder = join(
        this.quasarConf.build.distDir,
        this.quasarConf.ctx.targetName
      )

      for (const folder of outputTargetList) {
        const outputFolder = appPaths.resolve.cordova(folder)
        if (fse.existsSync(outputFolder)) {
          log(
            `Copying Cordova distributables from ${outputFolder} to ${targetFolder}`
          )
          log()
          fse.copySync(outputFolder, targetFolder)
          return
        }
      }

      warn(
        `No output folder found for target "${target}".` +
          ' Files have not been copied to /dist. You will need' +
          ' to manually extract the Cordova distributables.'
      )
      log()
    }
  }

  #cleanup() {
    this.#cordovaConfigFile.reset()
  }

  #runCordovaCommand(args) {
    const { promise, resolve } = Promise.withResolvers()
    spawn('cordova', args, { cwd: this.ctx.appPaths.cordovaDir }, code => {
      this.#cleanup()

      if (code) {

View on GitHub (pinned to 4841521b5f)

Solutions

  1. Find the artifacts manually under src-cordova/platforms/<target>/**/build/outputs (Android) or Xcode's DerivedData (iOS) and copy them into dist/.
  2. Re-run the build and scroll for the real compiler error — the missing output folder is usually a downstream symptom of a failed Gradle/Xcode build; fix that first.
  3. Check the Android Gradle Plugin/Gradle versions in src-cordova (build.gradle) match what cordova-android expects, then re-add the platform if output paths changed.
Defensive patterns

Strategy: validation

Validate before calling

const fs = require('fs');
const outputs = [
  'src-cordova/platforms/android/app/build/outputs/apk/debug',
  'src-cordova/platforms/android/app/build/outputs/bundle/release'
];
if (!outputs.some(p => fs.existsSync(p) && fs.readdirSync(p).length)) {
  console.warn('No Android build outputs found — the Gradle build likely failed; artifacts will not be copied to dist/');
}

Prevention

When it happens

Trigger: #packageFiles in cordova-builder.js after a build when fse.existsSync(outputFolder) is false for the requested target (android/ios) — typically because the Gradle/Xcode build produced nothing or built to an unexpected path.

Common situations: A silent Gradle failure earlier in the pipeline; Android Gradle Plugin version that changed output paths (e.g. AAB vs APK directories); building an unsigned/ios archive on a machine without the right Xcode setup; running only `quasar build -m cordova -T android` with a broken android project.

Related errors


AI-assisted analysis of quasarframework/quasar@4841521b5f (2026-08-30). Data as JSON: /api/errors/424fe6959dd489ff. Report an issue: GitHub.