stablyai/orca · error · Error

${pluginName} did not produce Oxlint output

Error message

${pluginName} did not produce Oxlint output

What it means

runOxlintPluginOnSource spawns the oxlint binary on a temp source file with a generated config and --format json. If the spawn succeeded (no result.error) but stdout is empty, the error is whatever oxlint wrote to stderr, or a generic '${pluginName} did not produce Oxlint output' if stderr is also empty. JSON.parse of empty stdout would throw a confusing SyntaxError, so this guard fails earlier with actionable text.

Source

Thrown at config/scripts/oxlint-plugin-test-runner.mjs:52

          perf: 'off',
          style: 'off',
          restriction: 'off',
          nursery: 'off'
        },
        jsPlugins: [{ name: pluginName, specifier: pluginPath }],
        rules
      })
    )
    const result = spawnSync(
      process.execPath,
      [oxlintPath, '--config', configPath, '--format', 'json', sourcePath],
      { encoding: 'utf8' }
    )
    if (result.error) {
      throw result.error
    }
    if (!result.stdout.trim()) {
      throw new Error(result.stderr || `${pluginName} did not produce Oxlint output`)
    }
    return JSON.parse(result.stdout).diagnostics
  } finally {
    rmSync(directory, { recursive: true, force: true })
  }
}

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Run oxlint manually with the generated config and source to read the full stderr: node oxlint --config <cfg> --format json <src>
  2. Verify pluginPath resolves to a module that loads without error (node -e 'import(<pluginPath>)')
  3. Check oxlint version compatibility for the jsPlugins config shape against the runner's expectations
  4. Confirm the plugin's specifier actually exports the rules named in the rules config
Defensive patterns

Strategy: try-catch

Validate before calling

import { spawnSync } from 'node:child_process'
function oxlintAvailable(oxlintPath) {
  const r = spawnSync(process.execPath, [oxlintPath, '--version'], { encoding: 'utf8' })
  return r.status === 0 && r.stdout.trim().length > 0
}

Try / catch

try {
  const diagnostics = runOxlintPluginOnSource({ pluginName, pluginPath, rules, source })
} catch (error) {
  // error.message is either oxlint's stderr or the generic 'did not produce output'
  throw new Error(`oxlint plugin ${pluginName} failed: ${error.message}`)
}

Prevention

When it happens

Trigger: oxlint exits 0 (or non-zero without result.error set) but emits nothing on stdout. Typical causes: the jsPlugin failed to load (specifier wrong, plugin module errored on import), the oxlint binary is the wrong version and does not support jsPlugins/categories config, or oxlint wrote its report to stderr instead of stdout.

Common situations: Bumping oxlint to a version that changed the plugin protocol; a pluginPath that points at a stale build; a plugin module whose top-level import throws (so oxlint silently skips it); config key renamed (categories vs rules) in a newer oxlint.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/6649864326812e41. Report an issue: GitHub.