opencode/packages/app
LukeParkerDev d04d13ea22 fix: defer child-store root disposal to avoid nested cleanNode
disposeDirectory called a createRoot dispose() synchronously. When
triggered by pinForOwner's onCleanup during a parent remount (e.g.
switching to a WSL server re-keys the ServerKey Show), the inner
dispose ran a nested cleanNode cascade on a sibling root while the
outer cascade was mid-traversal, corrupting solid-js's graph walk
state and surfacing as TypeError: Cannot read properties of null
(reading '1') at chunk-*.js:992 after ~155 recursive cleanNode frames.

Queue the dispose on a microtask so synchronous bookkeeping still
runs (map deletes, onDispose cache invalidation) but the reactive
cleanup happens after the outer traversal finishes.
2026-04-19 13:19:11 +10:00
..
e2e delete all e2e tests (#22501) 2026-04-14 23:10:25 -04:00
public fix(app): remove oc-1 theme 2026-03-09 08:25:41 -05:00
src fix: defer child-store root disposal to avoid nested cleanNode 2026-04-19 13:19:11 +10:00
.gitignore test(app): initial e2e test setup 2026-01-19 09:03:52 -06:00
AGENTS.md fix(app): fix numbered list rendering in web markdown (#9723) 2026-01-20 20:28:01 -06:00
bunfig.toml chore: fix test 2026-02-10 07:06:20 -06:00
create-effect-simplification-spec.md chore(app): solidjs refactoring (#13399) 2026-03-02 10:50:50 -06:00
happydom.ts chore: rename packages/desktop -> packages/app 2025-12-22 19:39:00 -06:00
index.html fix(app): resize layout viewport when mobile keyboard appears (#15841) 2026-03-27 11:39:13 -05:00
package.json sync release versions for v1.14.17 2026-04-19 03:02:14 +00:00
playwright.config.ts test(app): emit junit artifacts for playwright (#20732) 2026-04-02 15:07:46 -04:00
README.md delete all e2e tests (#22501) 2026-04-14 23:10:25 -04:00
sst-env.d.ts zen: update sst version 2026-02-18 13:54:23 -05:00
tsconfig.json ci: remove unused publishConfig that was breaking npm publishing 2026-03-05 09:45:30 -05:00
vite.config.ts chore(desktop): disable sourcemap 2025-12-30 04:57:36 -06:00
vite.js Reapply "fix(app): startup efficiency" 2026-03-25 06:25:57 -05:00

Usage

Dependencies for these templates are managed with pnpm using pnpm up -Lri.

This is the reason you see a pnpm-lock.yaml. That said, any package manager will work. This file can safely be removed once you clone a template.

$ npm install # or pnpm install or yarn install

Learn more on the Solid Website and come chat with us on our Discord

Available Scripts

In the project directory, you can run:

npm run dev or npm start

Runs the app in the development mode.
Open http://localhost:3000 to view it in the browser.

The page will reload if you make edits.

npm run build

Builds the app for production to the dist folder.
It correctly bundles Solid in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.
Your app is ready to be deployed!

E2E Testing

Playwright starts the Vite dev server automatically via webServer, and UI tests expect an opencode backend at localhost:4096 by default.

bunx playwright install chromium
bun run test:e2e:local
bun run test:e2e:local -- --grep "settings"

Environment options:

  • PLAYWRIGHT_SERVER_HOST / PLAYWRIGHT_SERVER_PORT (backend address, default: localhost:4096)
  • PLAYWRIGHT_PORT (Vite dev server port, default: 3000)
  • PLAYWRIGHT_BASE_URL (override base URL, default: http://localhost:<PLAYWRIGHT_PORT>)

Deployment

You can deploy the dist folder to any static host provider (netlify, surge, now, etc.)