A fast, lightweight Cloudflare Worker that runs esbuild on the edge to compile TypeScript to JavaScript with CDN imports support.
- β‘ Dynamic TypeScript compilation with esbuild-wasm running on the edge
- π Automatic CDN imports resolution
- π‘ REST API with OpenAPI documentation
- π File upload support
- βοΈ Low-latency compilation powered by Cloudflare's global network
This package provides a pre-built, production-ready Cloudflare Worker bundle. No build step required!
npm install @jitsi/cf-ts-bundler-workerThe package includes:
- Minified Worker code (~265 KB)
- esbuild-wasm module (~12 MB)
- Source maps for debugging
# Install the package
npm install @jitsi/cf-ts-bundler-worker
# Deploy to Cloudflare (no build needed!)
npx wrangler deploy node_modules/@jitsi/cf-ts-bundler-worker/worker-dist/index.js \
--name my-ts-bundler \
--compatibility-flag nodejs_compatClone and customize the Worker:
git clone https://github.com/jitsi/cloudflare-ts-bundler-worker.git
cd cloudflare-ts-bundler-worker
npm install
npm run deployThe worker uses the following environment variables:
| Variable | Description | Required | Default |
|---|---|---|---|
AUTH_ENABLED |
Enable/disable JWT authentication. Set to 'true' to enable. |
No | false (disabled) |
JWT_ISSUER |
Expected issuer claim in JWT tokens | Only when AUTH_ENABLED=true |
- |
PUBLIC_KEY |
RSA public key in PEM format (SPKI) for JWT signature verification | Only when AUTH_ENABLED=true |
- |
Note: The PUBLIC_KEY is a public key and is not sensitive data. Only the corresponding private key (used to sign tokens) needs to be kept secret.
Security Consideration: By default, authentication is disabled for easier development and testing. For production deployments, it's recommended to set AUTH_ENABLED=true to protect your endpoints.
-
Copy the example environment file:
cp .dev.vars.example .dev.vars
-
Edit
.dev.varswith your actual values:JWT_ISSUER=https://your-auth-server.com PUBLIC_KEY=-----BEGIN PUBLIC KEY----- Your actual RSA public key here -----END PUBLIC KEY-----
-
Start the dev server (it will automatically load
.dev.vars):npm run dev
Set environment variables using Wrangler CLI:
# Enable authentication (recommended for production)
wrangler secret put AUTH_ENABLED
# When prompted, enter: true
# Set JWT configuration (required when AUTH_ENABLED=true)
wrangler secret put JWT_ISSUER
wrangler secret put PUBLIC_KEY
# Or set as regular environment variables
wrangler deploy --var AUTH_ENABLED:true --var JWT_ISSUER:https://your-auth-server.comAlternatively, use the Cloudflare dashboard to set environment variables in your worker settings.
For development/testing environments without authentication:
# Omit AUTH_ENABLED or set it to false
wrangler deploy
# Authentication will be disabled by defaultBase URL: https://your-worker.your-subdomain.workers.dev
Interactive Documentation:
- Swagger UI:
/_cfw/cf-ts-bundler-worker/docs - OpenAPI JSON:
/_cfw/cf-ts-bundler-worker/openapi.json
curl -X POST https://your-worker.your-subdomain.workers.dev/_cfw/cf-ts-bundler-worker/compile \
-H "Content-Type: application/json" \
-d '{"code": "const message: string = \"Hello!\"; console.log(message);"}'Response:
{
"success": true,
"compiledCode": "var o=\"Hello!\";console.log(o);\n"
}curl -X POST https://your-worker.your-subdomain.workers.dev/_cfw/cf-ts-bundler-worker/compile-file \
-F "[email protected]"Note: Currently supports single file uploads only. Multi-file project bundling is planned for future releases.
Response: Returns the compiled JavaScript file for download.
import { Hono } from 'hono';
import { z } from 'zod';
import { zValidator } from '@hono/zod-validator';
const userSchema = z.object({
name: z.literal("John"),
age: z.number().min(18),
email: z.email().optional(),
});
type User = z.infer<typeof userSchema> & {
id: string;
};
const app = new Hono();
app.get('/', (c) => c.json({ message: 'Hello World!' }));
app.post('/users', zValidator('json', userSchema), (c) => {
const userData = c.req.valid('json');
const user: User = {
id: `user-${crypto.randomUUID().slice(0, 8)}`,
...userData,
};
return c.json({ message: 'User created!', user }, 201);
});
export default app;# Local development
npm run dev
# Run tests
npm test
# Deploy
npm run deploy- π¦ Multiple files support - Bundle entire TypeScript projects with multiple files and dependencies
- π Compilation performance metrics and caching
- π§ Custom esbuild configuration options
- π JWKS or ASAP-style (Key by Hash Method) support to improve JWT authentication with key rotation
Apache License 2.0 - see LICENSE file for details.