{"_id":"@allmaps/render-wasm","name":"@allmaps/render-wasm","dist-tags":{"latest":"1.0.0-beta.1"},"versions":{"1.0.0-beta.1":{"name":"@allmaps/render-wasm","version":"1.0.0-beta.1","contributors":[{"name":"Bert Spaan","email":"hello@bertspaan.nl","url":"https://bertspaan.nl"}],"description":"WebAssembly-powered renderer for high-performance image transformations","license":"MIT","type":"module","main":"./pkg/allmaps_render_wasm.js","types":"./pkg/allmaps_render_wasm.d.ts","exports":{".":{"types":"./pkg/allmaps_render_wasm.d.ts","default":"./pkg/allmaps_render_wasm.js"},"./wasm":{"types":"./pkg/wasm.d.ts","default":"./pkg/allmaps_render_wasm_bg.wasm"}},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/allmaps/allmaps.git","directory":"packages/render-wasm"},"homepage":"https://allmaps.org","keywords":["allmaps","wasm","webassembly","rendering","georeference"],"scripts":{"build":"RUSTFLAGS='-C target-feature=+simd128' PATH=\"$HOME/.cargo/bin:$PATH\" wasm-pack build --target web --out-dir pkg && cp src/wasm.d.ts pkg/","build:nodejs":"RUSTFLAGS='-C target-feature=+simd128' PATH=\"$HOME/.cargo/bin:$PATH\" wasm-pack build --target nodejs --out-dir pkg-nodejs","build:all":"pnpm run build && pnpm run build:nodejs"},"gitHead":"0776371fa222f670b893d87b302c6334e825ac3e","_id":"@allmaps/render-wasm@1.0.0-beta.1","bugs":{"url":"https://github.com/allmaps/allmaps/issues"},"_nodeVersion":"25.8.0","_npmVersion":"lerna/4.9.4/node@v25.8.0+arm64 (darwin)","dist":{"integrity":"sha512-b6cPi+tv2EjpajqnNACVsQLfi0dyEgI58I6zYuy8WEW5VU0IC1OXTT6l5HeBNGvtRVEkGEVWW6pZznf6SV3L8A==","shasum":"4abc72290a275874a8d7fb32658d935c71720844","tarball":"https://registry.npmjs.org/@allmaps/render-wasm/-/render-wasm-1.0.0-beta.1.tgz","fileCount":3,"unpackedSize":6302,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICXY5LWDxscremVz9a006J9FKgZxqO/0vikQEwAinaJyAiAGiueDdXWbJLla5rxvdeqNIvgr9uG+62L8nAT7sLxpKQ=="}]},"_npmUser":{"name":"bertspaan","email":"hello@bertspaan.nl"},"directories":{},"maintainers":[{"name":"bertspaan","email":"hello@bertspaan.nl"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/render-wasm_1.0.0-beta.1_1780001967327_0.08848857934884968"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-28T20:59:27.124Z","1.0.0-beta.1":"2026-05-28T20:59:27.503Z","modified":"2026-05-28T20:59:27.724Z"},"maintainers":[{"name":"bertspaan","email":"hello@bertspaan.nl"}],"description":"WebAssembly-powered renderer for high-performance image transformations","homepage":"https://allmaps.org","keywords":["allmaps","wasm","webassembly","rendering","georeference"],"repository":{"type":"git","url":"git+https://github.com/allmaps/allmaps.git","directory":"packages/render-wasm"},"contributors":[{"name":"Bert Spaan","email":"hello@bertspaan.nl","url":"https://bertspaan.nl"}],"bugs":{"url":"https://github.com/allmaps/allmaps/issues"},"license":"MIT","readme":"# @allmaps/render-wasm\n\nWebAssembly-powered renderer for high-performance image transformations in Allmaps.\n\nThis package provides a Rust-based WASM implementation of core rendering functions, offering significant performance improvements over pure JavaScript implementations for image processing operations like JPEG decoding, image transformations, and format encoding.\n\n**This module was mostly written by Claude Code / Sonnet 4.5, based on the original TypeScript IntArrayRenderer from the @allmaps/render module.**\n\n## Features\n\n- **Fast JPEG decoding**: Native Rust JPEG decoding is ~3.1× faster than jpeg-js\n- **SIMD-optimized**: Built with WebAssembly SIMD support for parallel processing\n- **Multiple output formats**: Support for PNG and WebP encoding\n- **Zero-copy operations**: Efficient memory handling through WebAssembly's linear memory\n- **Cloudflare Workers compatible**: Built for web targets, works seamlessly in edge environments\n\n## Performance Benefits\n\nThe WASM renderer is primarily used in the [Allmaps TileServer](../../workers/tileserver/) where it provides:\n\n- Smaller cache footprint (caching raw JPEG bytes instead of decoded images)\n- Faster tile generation through native image processing\n- Reduced memory pressure in serverless environments\n\n## Installation\n\nThis package works in browsers and in Node.js as an ESM module.\n\nInstall with pnpm:\n\n```sh\npnpm install @allmaps/render-wasm\n```\n\n## Building from Source\n\nThis package requires Rust and wasm-pack to build:\n\n```sh\n# Build for web (Cloudflare Workers, browsers)\npnpm run build\n\n# Build for Node.js (tests)\npnpm run build:nodejs\n\n# Build both targets\npnpm run build:all\n```\n\nThe package is built with SIMD support enabled by default. This requires browsers/runtimes that support WebAssembly SIMD.\n\n**Build outputs:**\n\n- `pkg/` - Web target (ES modules for browsers and Cloudflare Workers)\n- `pkg-nodejs/` - Node.js target (for Vitest tests)\n\nThe `wasm.d.ts` type declaration is automatically copied from `src/` to `pkg/` during build.\n\n## Usage\n\n### With the WASM Renderer\n\n```js\nimport wasmInit, * as wasmModule from '@allmaps/render-wasm'\nimport wasmUrl from '@allmaps/render-wasm/wasm'\nimport { WasmRenderer } from '@allmaps/render/wasm'\n\n// Initialize the WASM module\nawait wasmInit({ module_or_path: wasmUrl })\n\n// Create a WASM renderer\nconst renderer = new WasmRenderer(wasmModule, {\n  fetchFn: fetch,\n  outputFormat: 'png' // or 'webp'\n})\n\n// Add a georeferenced map\nawait renderer.addGeoreferencedMap(georeferencedMap)\n\n// Render to a buffer\nconst imageBuffer = await renderer.render(viewport)\n```\n\n### Direct WASM Functions\n\nYou can also use the lower-level WASM functions directly:\n\n```js\nimport wasmInit, {\n  decode_jpeg_test,\n  encode_rgba_to_png\n} from '@allmaps/render-wasm'\nimport wasmUrl from '@allmaps/render-wasm/wasm'\n\nawait wasmInit({ module_or_path: wasmUrl })\n\n// Decode JPEG to RGBA\nconst jpegBytes = new Uint8Array(/* ... */)\nconst decoded = decode_jpeg_test(jpegBytes)\n\n// Encode RGBA to PNG\nconst rgba = new Uint8Array(/* ... */)\nconst png = encode_rgba_to_png(rgba, width, height)\n```\n\n## Architecture\n\nThis package uses:\n\n- **[zune-jpeg](https://github.com/etemesi254/zune-image)**: Fast JPEG decoder\n- **[image-rs](https://github.com/image-rs/image)**: Image encoding (PNG, WebP)\n- **wasm-bindgen**: Rust/JavaScript interop\n- **wasm-pack**: WebAssembly build toolchain\n\n## Exports\n\nThe package exports:\n\n- `@allmaps/render-wasm`: Main WASM module with init function and decoder/encoder functions\n- `@allmaps/render-wasm/wasm`: The compiled WASM binary (for bundler/worker environments)\n\n## Browser Compatibility\n\nRequires browsers with WebAssembly SIMD support:\n\n- Chrome/Edge 91+\n- Firefox 89+\n- Safari 16.4+\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-1c9afccce999a02d02f23ec060bfeca9"}