<< All versions
Skill v1.0.1
currentAutomated scan100/100secondsky/claude-skills/cloudflare-workers-multi-lang
9 files
──Details
PublishedMay 30, 2026 at 06:37 AM
Content Hashsha256:d4540ce033cd84af...
Git SHA5e92b7170451
Bump Typepatch
──Files
Files (1 file, 5.0 KB)
SKILL.md5.0 KBactive
SKILL.md · 188 lines · 5.0 KB
version: "1.0.1" name: cloudflare-workers-multi-lang description: Multi-language Workers development with Rust, Python, and WebAssembly. Use when building Workers in languages other than JavaScript/TypeScript, or when integrating WASM modules for performance-critical code. metadata: version: "1.0.0" license: MIT
Multi-Language Workers Development
Build Cloudflare Workers using Rust, Python, or WebAssembly for performance-critical operations.
Language Comparison
| Feature | JavaScript/TS | Rust | Python | |
|---|---|---|---|---|
| Startup | Fast | Fastest (WASM) | Moderate | |
| CPU Perf | Good | Excellent | Good | |
| Memory | Higher | Lower | Higher | |
| Bundle Size | Smaller | Medium | Larger | |
| Type Safety | Optional (TS) | Strict | Optional | |
| Best For | General apps | CPU-intensive | Data/ML |
Quick Decision
Need maximum performance? → Rust/WASMHeavy computation (crypto, image processing)? → Rust/WASMData processing, ML inference? → PythonGeneral web apps? → JavaScript/TypeScript
Top 10 Multi-Lang Errors
| Error | Language | Cause | Solution | |
|---|---|---|---|---|
WebAssembly.instantiate() failed | Rust | Invalid WASM | Check wasm-pack build output | |
Module parse failed: Unexpected token | Rust | ESM/CJS mismatch | Use --target bundler | |
Cannot find module | Python | Missing dep | Add to pyproject.toml | |
Out of memory | All | Large WASM | Enable streaming instantiation | |
Exceeded CPU time limit | All | Long computation | Chunk processing | |
wasm-bindgen version mismatch | Rust | Dep conflict | Align versions in Cargo.toml | |
RuntimeError: unreachable | Rust | Panic in WASM | Add proper error handling | |
TypeError: not a function | Rust | Missing export | Add #[wasm_bindgen] attribute | |
Python worker startup timeout | Python | Slow init | Minimize imports | |
SharedArrayBuffer not supported | All | Security | Add COOP/COEP headers |
Rust Quick Start
bash
# Install toolscargo install wasm-pack# Create projectcargo new --lib my-workercd my-worker# Add to Cargo.tomlcat >> Cargo.toml << 'EOF'[lib]crate-type = ["cdylib"][dependencies]wasm-bindgen = "0.2"worker = "0.3"console_error_panic_hook = "0.1"[profile.release]opt-level = "s"lto = trueEOF
rust
// src/lib.rsuse worker::*;#[event(fetch)]async fn fetch(req: Request, env: Env, _ctx: Context) -> Result<Response> {console_error_panic_hook::set_once();Router::new().get("/", |_, _| Response::ok("Hello from Rust!")).get("/compute", |_, _| {// CPU-intensive computationlet result = heavy_computation();Response::ok(format!("Result: {}", result))}).run(req, env).await}fn heavy_computation() -> u64 {(1..1_000_000).filter(|n| is_prime(*n)).count() as u64}fn is_prime(n: u64) -> bool {if n < 2 { return false; }(2..=(n as f64).sqrt() as u64).all(|i| n % i != 0)}
Python Quick Start (Workers for Platforms)
toml
# pyproject.toml[project]name = "my-worker"version = "0.1.0"requires-python = ">=3.12"dependencies = [][build-system]requires = ["hatchling"]build-backend = "hatchling.build"
python
# src/entry.pyfrom js import Response, Headersasync def on_fetch(request, env):url = request.urlif "/compute" in url:result = heavy_computation()return Response.new(f"Result: {result}")return Response.new("Hello from Python!")def heavy_computation():"""CPU-intensive computation"""return sum(1 for n in range(2, 100000) if is_prime(n))def is_prime(n):if n < 2:return Falsereturn all(n % i != 0 for i in range(2, int(n**0.5) + 1))
WASM Module Integration
typescript
// Load and use WASM module in TypeScript Workerimport wasmModule from './pkg/my_lib_bg.wasm';import { init, process_data } from './pkg/my_lib';let wasmInstance: WebAssembly.Instance;export default {async fetch(request: Request, env: Env): Promise<Response> {// Initialize WASM onceif (!wasmInstance) {wasmInstance = await WebAssembly.instantiate(wasmModule);init();}// Use WASM functionconst result = process_data(inputData);return Response.json({ result });},};
When to Load References
| Reference | Load When | |
|---|---|---|
references/rust-workers.md | Building Workers with Rust/WASM | |
references/python-workers.md | Using Python on Workers for Platforms | |
references/wasm-integration.md | Integrating WASM modules in any Worker |
Performance Tips
- WASM Initialization: Cache instance, use streaming
- Memory: Use typed arrays for data transfer
- Bundle Size: Enable LTO, strip debug info
- Cold Starts: Keep WASM modules small
- Data Transfer: Minimize JS/WASM boundary crossings
See Also
workers-performance- General optimization techniquesworkers-testing- Testing multi-language Workerscloudflare-worker-base- Basic Workers setup