emberjs/ember.js · error · Error

BUG: owner is missing renderer

Error message

BUG: owner is missing renderer

What it means

captureRenderTree(owner) looks up the DOM renderer ('renderer:-dom') on the given owner so it can snapshot the render tree for debugging (used by Ember Inspector). If the owner has no DOM renderer registered, the function throws this internal bug report error.

Source

Thrown at packages/@ember/debug/lib/capture-render-tree.ts:25

*/
/**
  Ember Inspector calls this function to capture the current render tree.

  In production mode, this requires turning on `ENV._DEBUG_RENDER_TREE`
  before loading Ember.

  @private
  @static
  @method captureRenderTree
  @for @ember/debug
  @param app {ApplicationInstance} An `ApplicationInstance`.
  @since 3.14.0
*/
export default function captureRenderTree(app: Owner): CapturedRenderNode[] {
  let domRenderer = app.lookup('renderer:-dom') as Renderer;

  if (!domRenderer) {
    throw new Error(`BUG: owner is missing renderer`);
  }
  // SAFETY: Ideally we'd assert here but that causes awkward circular requires since this is also in @ember/debug.
  // This is only for debug stuff so not very risky.
  let renderer = domRenderer;

  return renderer.debugRenderTree.capture();
}

View on GitHub (pinned to 26f97246a8)

Solutions

  1. Pass the Application instance (or its owner) that has 'renderer:-dom' registered
  2. Ensure the app is fully booted before capturing the render tree
  3. In tests, make sure the application is set up via the standard setupApplicationContext helpers

Example fix

// before
captureRenderTree(engineInstance);
// after
captureRenderTree(getOwner(application) || application);
Defensive patterns

Strategy: validation

Validate before calling

let renderer = app.lookup && app.lookup('renderer:-dom');
if (renderer) captureRenderTree(app);

Type guard

function hasDomRenderer(owner) { return typeof owner.lookup === 'function' && Boolean(owner.lookup('renderer:-dom')); }

Try / catch

try { captureRenderTree(app); } catch (e) { if (!/missing renderer/.test(e.message)) throw e; /* owner not app: skip capture */ }

Prevention

When it happens

Trigger: Calling captureRenderTree with an owner that was not fully built as an application/engine instance with DOM rendering — e.g. a bare EngineInstance, a partially booted app, or wrong object passed as owner.

Common situations: Test helpers calling captureRenderTree against a non-application owner; using the API with an engine owner instead of the app owner; setup errors where 'renderer:-dom' is not registered.

Related errors


AI-assisted analysis of emberjs/ember.js@26f97246a8 (2026-09-01). Data as JSON: /api/errors/46746aa6ea72c9b0. Report an issue: GitHub.