- Category
- Developer Tools
- Rank
- No. 945Tools index
- Pricing
- Open Source
- Type
- TOOL
- Builder
- denoland
- GitHub
- 233 stars
- Latest release
- 0.46.0
- Date
About
Transpile and bundle JavaScript and TypeScript from Deno or Deno Deploy — use the Deno compiler programmatically.
What it does
It takes an entry module, builds its dependency graph, then either converts each supported source into JavaScript or combines the graph into one output. A TypeScript-facing layer handles locations, caching, import maps, and custom loading, while a WebAssembly-backed Rust core performs parsing, transformation, and code generation.
Why it's ranked here
The implementation offers unusually direct control over loading and compilation, with source maps, JSX modes, decorators, minification, import maps, and two bundle formats. However, the maintainers explicitly deprecate it, recommend alternatives, and call the API unstable. That makes it useful mainly for understanding or maintaining existing integrations.
What's good
Inputs can be local paths, file URLs, or remote URLs. A custom loader supports in-memory sources and explicit external modules. Bundles can be ES modules or classic scripts, optionally minified, with inline or separate source maps. Tests cover JSX variants, decorators, circular imports, JSON imports, import maps, and remote modules.
Tradeoffs
Deprecation is the decisive limitation for new work, and the documented API may still change. Bundling rejects unsupported module kinds. External import maps and redirected import maps are rejected. Some intended behaviors remain disabled in tests, including dynamic imports and shebang preservation, while remote import-map tests require an unavailable local server.
How to use it well
Use it when maintaining a Deno codebase already built around its library interface, especially when custom loading, import maps, or in-memory compilation matter. Keep compiler options narrow and test emitted output with snapshots. Do not adopt it as the foundation for a new build pipeline, and do not expect type checking or general task orchestration.
Technical notes+
js/mod.ts exposes bundle() and transpile(), creates a cache through @deno/cache-dir, normalizes roots through js/_utils.ts, validates source-map option combinations, serializes import maps, and calls the WebAssembly exports declared in js/emit.generated.d.ts. wasm/src/lib.rs bridges JavaScript loaders into Rust with wasm_bindgen and serde_wasm_bindgen. rs-lib/src/lib.rs builds deno_graph code-only module graphs, resolves import maps, validates transpilation graphs, and delegates bundling to rs-lib/src/emit.rs, which uses SWC through deno_ast, handles JSON conversion, source maps, minification, external modules, and import.meta rewriting via rs-lib/src/bundle_hook.rs. Tests under tests/ combine snapshot comparison with execution checks.
Observed
- License
- MIT License
- Languages
- Rust and TypeScript
- Packaging
- Published through JSR as @deno/emit
- Interface
- TypeScript library API backed by WebAssembly and a Rust library workspace
- Platform
- Deno and Deno Deploy
- Testing structure
- Repository includes a tests directory plus inline Rust unit tests
- Project status
- Deprecated, not recommended, and documented as unstable
Read from README.md, Cargo.toml, js/mod.ts, js/_utils.ts, js/emit.generated.d.ts, wasm/src/lib.rs, rs-lib/src/lib.rs, rs-lib/src/emit.rs, rs-lib/src/text.rs, rs-lib/src/bundle_hook.rs, tests/utils.ts, tests/jsx_test.ts, tests/bundle_test.ts, tests/common_test.ts, tests/import_map_test.ts.
What it can do
Transpile TypeScript to JavaScript
TypeScript code → JavaScript code
Bundle multiple JavaScript modules
Multiple JavaScript files/modules → Single bundled JavaScript file
Bundle multiple TypeScript modules
Multiple TypeScript files/modules → Single bundled JavaScript file
Compile Deno projects programmatically
Deno project source code → Compiled JavaScript output
Transform code for Deno Deploy deployment
Deno application code → Deploy-ready JavaScript code
Tags
Tech Stack
Media
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
