mcpField
W
workers-multi-lang

workers-multi-lang

github.com/secondskyDevelopment24076 installsUpdated 5w ago
Repository

About workers-multi-lang

A guide for developers building Cloudflare Workers with Rust, Python, or WebAssembly, covering language selection, integration, and performance advice. It also addresses common errors and points to task-specific references.

Key features

  1. 01Rust, Python, and WASM approaches
  2. 02Language selection guidance
  3. 03WASM module integration examples
  4. 04Multilanguage error troubleshooting
  5. 05Performance optimization advice

Use cases

  1. 01Choosing a language for compute-heavy tasks
  2. 02Integrating WASM modules into a Worker
  3. 03Using Python for data processing or ML inference
  4. 04Troubleshooting multilanguage build and runtime errors

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/secondsky/claude-skills --skill workers-multi-lang

After installing, type/workers-multi-langin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
python-workers.md
rust-workers.md
wasm-integration.md
scripts/
build-rust.sh
build-wasm.sh
test-wasm.sh
templates/
python-worker.py
rust-worker.rs
wasm-integration.ts
wasm-worker.ts

Details

From the project README

Multi-Language Workers Development

Build Cloudflare Workers using Rust, Python, or WebAssembly for performance-critical operations.

Language Comparison

FeatureJavaScript/TSRustPython
StartupFastFastest (WASM)Moderate
CPU PerfGoodExcellentGood
MemoryHigherLowerHigher
Bundle SizeSmallerMediumLarger
Type SafetyOptional (TS)StrictOptional
Best ForGeneral appsCPU-intensiveData/ML

Quick Decision

Need maximum performance? → Rust/WASM
Heavy computation (crypto, image processing)? → Rust/WASM
Data processing, ML inference? → Python
General web apps? → JavaScript/TypeScript

Top 10 Multi-Lang Errors

ErrorLanguageCauseSolution
WebAssembly.instantiate() failedRustInvalid WASMCheck wasm-pack build output
Module parse failed: Unexpected tokenRustESM/CJS mismatchUse --target bundler
Cannot find modulePythonMissing depAdd to pyproject.toml
Out of memoryAllLarge WASMEnable streaming instantiation
Exceeded CPU time limitAllLong computationChunk processing
wasm-bindgen version mismatchRustDep conflictAlign versions in Cargo.toml
RuntimeError: unreachableRustPanic in WASMAdd proper error handling
TypeError: not a functionRustMissing exportAdd #[wasm_bindgen] attribute
Python worker startup timeoutPythonSlow initMinimize imports
SharedArrayBuffer not supportedAllSecurityAdd COOP/COEP headers

Rust Quick Start

# Install tools
cargo install wasm-pack

# Create project
cargo new --lib my-worker
cd my-worker

# Add to Cargo.toml
cat >> 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 = true
EOF
// src/lib.rs
use 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 computation
            let 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)

# pyproject.toml
[project]
name = "my-worker"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = []

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
# src/entry.py
from js import Response, Headers

async def on_fetch(request, env):
    url = request.url

    if "/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 False
    return all(n % i != 0 for i in range(2, int(n**0.5) + 1))

WASM Module Integration

// Load and use WASM module in TypeScript Worker
import 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 once
    if (!wasmInstance) {
      wasmInstance = await WebAssembly.instantiate(wasmModule);
      init();
    }

    // Use WASM function
    const result = process_data(inputData);

    return Response.json({ result });
  },
};

When to Load References

ReferenceLoad When
references/rust-workers.mdBuilding Workers with Rust/WASM
references/python-workers.mdUsing Python on Workers for Platforms
references/wasm-integration.mdIntegrating WASM modules in any Worker

Performance Tips

  1. WASM Initialization: Cache instance, use streaming
  2. Memory: Use typed arrays for data transfer
  3. Bundle Size: Enable LTO, strip debug info
  4. Cold Starts: Keep WASM modules small
  5. Data Transfer: Minimize JS/WASM boundary crossings

See Also

  • workers-performance - General optimization techniques
  • workers-testing - Testing multi-language Workers
  • cloudflare-worker-base - Basic Workers setup

Comments

Markdown supported