Ts runtime node
Skill fusengine/agents/plugins/typescript-expert/skills/ts-runtime-node
Redefining development through cognitive automation and collaborative agent systems.
npx -y skills add fusengine/agents --skill ts-runtime-nodeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when running TypeScript directly on Node.js without a build step — native type stripping, its limits, when to reach for tsx, ESM setup, watch mode, and node:test. Covers Node 24 LTS. Do NOT use for Bun runtime specifics (ts-runtime-bun) or tsconfig details (ts-config).
SKILL.md
4.0 KB, 926 tokens by cl100k_base, as published. Nobody here has run it
TypeScript on Node.js
Agent Workflow (MANDATORY)
Before ANY implementation, use TeamCreate to spawn 3 agents:
- fuse-ai-pilot:explore-codebase - Inspect existing
package.json,tsconfig.json, entry scripts - fuse-ai-pilot:research-expert - Verify latest Node LTS + type-stripping behavior via Context7/Exa
- mcp__context7__query-docs - Check Node
Modules: TypeScriptand CLI flag docs
After implementation, run fuse-ai-pilot:sniper for validation.
Use when
- Running
.ts/.mts/.ctsfiles directly withnode file.ts(no bundler) - Deciding between native type stripping and a full loader (
tsx) - Setting up an ESM-only Node project,
--watchmode, ornode:test - Migrating a script/CLI/hook off
ts-nodeto Node's built-in support
Do NOT use for
- Bun runtime or
bun test→ use ts-runtime-bun - Linting / formatting choices → use ts-lint-format
- Framework runtimes (Next.js, Astro) that own their own transpile pipeline
- Browser/bundled output → use a bundler skill
Critical Rules
- Type stripping is erase-only - Node replaces types with whitespace and does NO type checking. Run
tsc --noEmitseparately for safety. tsconfig.jsonis ignored at runtime -paths, downleveling, and JS target lowering do not apply. Native stripping only erases inline types.- Non-erasable syntax errors out -
enum,namespacewith runtime code, parameter properties, and import aliases throwERR_UNSUPPORTED_TYPESCRIPT_SYNTAX. - Use
import type/verbatimModuleSyntax- Value imports of types crash at runtime; thetypekeyword is mandatory for type-only imports. - File extensions are mandatory -
import './file.ts', not./file..tsxis unsupported by native stripping.
Architecture
project/
├── package.json # "type": "module"
├── tsconfig.json # noEmit, erasableSyntaxOnly, verbatimModuleSyntax
├── src/
│ ├── index.ts # node src/index.ts
│ └── interfaces/ # type-only modules (import type)
└── test/
└── unit.test.ts # node --test (node:test)
→ See node-esm-setup.md for a complete setup
Reference Guide
Concepts
| Topic | Reference | When to Consult |
|---|---|---|
| Type Stripping | type-stripping.md | Running .ts natively, understanding what erases and what errors |
| When tsx | tsx-when-needed.md | Native stripping is insufficient (paths, enums, decorators, .tsx) |
| Node 24 features | references/node24-features.md | Watch mode, node:test, ESM resolution, relevant built-ins |
Templates
| Template | When to Use |
|---|---|
| node-esm-setup.md | Starting an ESM Node + native TS project |
Best Practices
DO
- Set
"type": "module"and use.ts/.mtswith explicit import extensions - Keep
tsc --noEmitin CI for real type safety alongside runtime stripping - Reach for
tsxthe moment you needpaths, decorators,enum, or.tsx
DON'T
- Assume
tsconfigpathsortargetdownleveling work at runtime — they don't - Publish
.tsfiles insidenode_modules— Node refuses to strip them - Rely on native stripping for decorators (TC39 Stage 3, not transformed)