{"id":18775,"library":"screener-runner","title":"Screener Runner","description":"CLI test runner for Screener.io, a visual regression testing service. Version 0.14.0 is current as of early 2024. It allows defining UI states and interaction steps using a fluent API, capturing visual snapshots, and comparing them against baselines. Key differentiator: integrates directly with Screener.io cloud service, requiring an API key and project repo. It supports Node >=10 and uses CommonJS module system. Release cadence appears sporadic; the last major update was in 2020. Compared to alternatives like Percy or Chromatic, it is proprietary to Screener.io and less actively maintained.","status":"maintenance","version":"0.14.0","language":"javascript","source_language":"en","source_url":"https://github.com/screener-io/screener-runner","tags":["javascript"],"install":[{"cmd":"npm install screener-runner","lang":"bash","label":"npm"},{"cmd":"yarn add screener-runner","lang":"bash","label":"yarn"},{"cmd":"pnpm add screener-runner","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"Package is CommonJS-only; ESM import will fail.","wrong":"import Steps from 'screener-runner/src/steps';","symbol":"Steps","correct":"const Steps = require('screener-runner/src/steps');"},{"note":"Main module is CommonJS; no default ESM export.","wrong":"import screenerRunner from 'screener-runner';","symbol":"screener-runner","correct":"const screenerRunner = require('screener-runner');"},{"note":"Configuration file uses CommonJS module.exports; ES module syntax not supported.","wrong":"export default { ... }","symbol":"config (via module.exports)","correct":"module.exports = { projectRepo: '...', apiKey: '...', states: [...] };"}],"quickstart":{"code":"// Example screener.config.js\nmodule.exports = {\n  projectRepo: 'user/my-project-repo',\n  apiKey: process.env.SCREENER_API_KEY ?? '',\n  states: [\n    {\n      url: 'https://example.com',\n      name: 'Homepage'\n    },\n    {\n      url: 'https://example.com/about',\n      name: 'About page',\n      steps: new (require('screener-runner/src/steps'))()\n        .click('.learn-more')\n        .snapshot('Clicked Learn More')\n        .end()\n    }\n  ]\n};","lang":"javascript","description":"Shows the configuration file format with projectRepo, apiKey, and states, including an example with interactive steps using the Steps fluent API."},"warnings":[{"fix":"Use `const Steps = require('screener-runner/src/steps');`","message":"The Steps class must be imported from 'screener-runner/src/steps', not from the main package. Using `require('screener-runner').Steps` will be undefined.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Use `require()` instead of `import`. If you need ESM, use dynamic import: `const { Steps } = await import('screener-runner/src/steps')` is not supported because it's CJS.","message":"Package uses CommonJS only; ES module `import` statements will fail. Ensure your Node.js project uses require() or configure package.json appropriately.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Use Node 14 or 16 for best compatibility. Test on Node 18 before adopting.","message":"Node.js >=10 is required; Node 14+ recommended. The package may not work with Node 18+ due to potential compatibility issues with older dependencies.","severity":"deprecated","affected_versions":">=0.0.0"},{"fix":"Set the SCREENER_API_KEY environment variable and ensure it's current. Check in Screener.io dashboard.","message":"The `apiKey` is required and must be a valid Screener.io API key. Using an invalid or expired key results in authentication failure with no clear error message.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Always chain `.end()` after the last step.","message":"When using `steps`, you must call `.end()` to finalize the step chain. Missing `.end()` will cause the runner to hang or produce no snapshots.","severity":"gotcha","affected_versions":">=0.0.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Use `const Steps = require('screener-runner/src/steps');`","cause":"The import path is incorrect; Steps class is at 'screener-runner/src/steps', not at the package root.","error":"Error: Cannot find module 'screener-runner/src/steps'"},{"fix":"Ensure you require the correct path: `const Steps = require('screener-runner/src/steps');`","cause":"Importing Steps incorrectly (e.g., as named export from main package) results in undefined.","error":"TypeError: Steps is not a constructor"},{"fix":"Ensure the config file exists at the project root or specify a custom path with --conf flag.","cause":"The CLI cannot locate the configuration file. Default search is for 'screener.config.js' in the current directory.","error":"screener-runner: config file not found:"},{"fix":"Set the SCREENER_API_KEY environment variable with a valid key from Screener.io dashboard.","cause":"The provided API key is missing, malformed, or expired.","error":"Error: Invalid API Key:"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}