Add Deno Runtime Support
Overview
Add dual runtime support to hello-world-web, allowing the application to run on both Node.js 22 and Deno 2.x with identical functionality.
Motivation
- Learning: Explore Deno 2.x's Node.js compatibility in a real-world application
- Performance: Compare runtime performance between Node.js and Deno
- Modern tooling: Leverage Deno's built-in TypeScript, linting, and formatting
- Flexibility: Maintain deployment options across runtimes
Implementation Status
✅ Phase 1-3: Completed
🚧 Phase 5-6: In Progress (PR #TBD)
Technical Details
No Code Changes Required!
The codebase was already Deno-compatible due to:
- Pure ESM (`"type": "module"`)
- `node:` prefixes on built-in imports
- No `require()` calls
- Modern TypeScript
Works Out of the Box:
- ✅ Express 5.1 via `npm:express@^5.1.0`
- ✅ All middleware (cookie-parser, morgan, dotenv)
- ✅ @lit-labs/ssr (SSR + hydration)
- ✅ Static file serving
- ✅ All routes
Testing
- Local: `pnpm start:deno` or `deno task start`
- CI: Matrix strategy tests both runtimes in parallel
Deployment
- Node: `hello.kiste.li` (existing, unchanged)
- Deno: `dev-deno.hello.kiste.li` (new, separate service)
Design Document
See docs/plans/2025-11-30-deno-runtime-support-design.md for complete design.
Related
Add Deno Runtime Support
Overview
Add dual runtime support to hello-world-web, allowing the application to run on both Node.js 22 and Deno 2.x with identical functionality.
Motivation
Implementation Status
✅ Phase 1-3: Completed
deno.jsonconfigurationnpm:specifierspnpm start:denoandpnpm dev:denoscriptspackages/app/src/runtime.ts)🚧 Phase 5-6: In Progress (PR #TBD)
test.yml(lint + build)bdd-tests.yml(E2E tests)Dockerfile.deno(multi-stage, static compilation if possible)dev-deno.hello.kiste.li)Technical Details
No Code Changes Required!
The codebase was already Deno-compatible due to:
Works Out of the Box:
Testing
Deployment
Design Document
See docs/plans/2025-11-30-deno-runtime-support-design.md for complete design.
Related