Skip to content

TUI: kilo crashes on startup with "No renderer found" / "multiple instances of Solid" #8760

@brendandebeasi

Description

@brendandebeasi

Description

Running kilo on versions 7.2.1 → 7.2.4 crashes immediately on startup with Error: No renderer found, preceded by the warning You appear to have multiple instances of Solid. Reproduces on both the npm-published @kilocode/cli and the standalone Bun-bundled binaries from GitHub releases. 7.2.0 is the last working version.

You appear to have multiple instances of Solid. This can lead to unexpected behavior.
Error: No renderer found
    at useRenderer (/$bunfs/root/src/index.js:422054:20)
    at useTerminalDimensions (/$bunfs/root/src/index.js:422066:31)
    at ErrorComponent (/$bunfs/root/src/index.js:473479:37)
    at untrack (/$bunfs/root/src/index.js:420524:15)
    ...
    at setStore (/$bunfs/root/src/index.js:425996:10)
    at <anonymous> (/$bunfs/root/src/index.js:436578:21)
    at processTicksAndRejections (native:7:39)

Kilo version

7.2.1, 7.2.2, 7.2.3, 7.2.4 (all broken). 7.2.0 works.

Steps to reproduce

  1. npm i -g @kilocode/cli@7.2.4 (or download a 7.2.1+ standalone binary from Releases)
  2. Run kilo
  3. Observe the crash above

Operating System

Reproduced on:

  • macOS 26 (arm64)
  • Ubuntu Linux (glibc, three different VMs)

Terminal

iTerm2 / default Linux terminal — independent of terminal.

Root cause

The bundled CLI ships two copies of solid-js and two copies of @opentui/solid. Each duplicated copy creates its own RendererContext token via createContext(), so the context provided by render() (using one copy) is invisible to useRenderer() calls that resolve to the other copy. The unrelated stack frames (untrack vs untrack2, devComponent vs devComponent2, the 2-suffixed solid internals) are the bundler's disambiguation of the duplicated code.

Two distinct duplications:

  1. solid-js@opentui/solid@0.1.87 declares an exact "solid-js": "1.9.9" dep, so Bun installed a nested solid-js@1.9.11 inside node_modules/@opentui/solid/node_modules/, while the rest of the workspace used the catalog solid-js@1.9.12 at the top level. Both got bundled.
  2. @opentui/{core,solid}packages/kilo-gateway pins dev/peer versions of @opentui/{core,solid} to 0.1.75, while packages/opencode uses 0.1.87. Once packages/kilo-gateway/tui was imported by opencode in 7.2.1, both @opentui/solid versions ended up bundled side-by-side, each with its own RendererContext.

A reactive setStore early in boot triggers a cascade that crosses the copy boundary and throws — then the ErrorBoundary fallback (which itself uses useTerminalDimensions()) double-faults on the same broken context, hiding the original throw site.

Suggested fix

  • Add "solid-js": "catalog:" to root overrides so the nested solid-js collapses to the top-level copy.
  • Bump packages/kilo-gateway's @opentui/{core,solid} from 0.1.75 to 0.1.87 so kilo-gateway and opencode resolve to the same @opentui/solid instance.

PR with both fixes incoming.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions