feat(templates): JS/TS + monorepo app templates with hot reload (spec 31) - #118
Merged
Conversation
… 31)
Six built-in project templates for the JS/TS ecosystem, each with dev-mode
hot reload:
- node.express, node.nestjs, node.next, react.vite, bun.app, turborepo.
Each bind-mounts the project source (`..:/app` — the generated compose lives
in `<project>/.devstack/`) with an anonymous node_modules volume, runs
`install` + the framework dev server (nodemon / nest --watch / next dev /
vite / bun run dev / turbo run dev), and sets file-watch polling env
(CHOKIDAR_USEPOLLING / WATCHPACK_POLLING) for WSL2/9p reliability.
- templates/*/{template.yaml,build/Dockerfile}; registered in embed.go.
- js_templates_test.go: each resolves, validates via compose-go, and emits
the /app mount + dev command.
- docs: templates guide + README table + whats-next (now shipped).
make ci + determinism green; all six pass `template lint`.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jul 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
First half of spec 31: six built-in JS/TS + monorepo project templates, each with dev-mode hot reload.
node.expressnpm run dev(nodemon)node.nestjsnest start --watchnode.nextnext dev(WATCHPACK_POLLING)react.vitebun.appbun run dev(oven/bun)turborepoturbo run dev(monorepo)Hot reload
Each template bind-mounts the project source (
..:/app— the generated compose lives in<project>/.devstack/, so..is the source), keeps an anonymousnode_modulesvolume so the container's install isn't shadowed, runsinstallthen the dev server, and sets the framework's file-watch polling env for WSL2/9p (where inotify is unreliable — the same reason/mntis refused).Verified:
devstack generateon anode.nextproject emitssource: .. → /app, the anonnode_modulesvolume,npm install && npm run dev, andWATCHPACK_POLLING.Tests / gates
js_templates_test.goresolves + compose-go-validates all six and asserts the hot-reload shape.make ci(fmt/vet/build/test-race) +make determinismgreen; all six passtemplate lint.Next: spec 31's second half — the
devstack runtask-graph runner.🤖 Generated with Claude Code