OSS Tanbou

encode, decode, and resize images with WebAssembly codecs in browsers and Web Workers

About these scores

OSS scale score is an unbounded metric that log-compresses and weights Stars, Watchers, Forks, and Contributors. Discovery score is the current OSS scale score minus the score at discovery. Update pace is commits in the last 30 days, growth momentum is the OSS scale score difference within the recent observation window, and OSS health is a 0–100 rating based on available recency, Community Health, and release data.

Stars
732
Primary language
TypeScript
License
Apache-2.0
Repository last updated
Jan 5, 2026
On this page

Overview

jSquash packages Squoosh-derived image codecs as WebAssembly modules for browsers and Web Workers. It provides format-specific packages for AVIF, JPEG, JPEG XL, PNG, QOI, WebP, resizing, and related image-processing tasks.

Features and best fit

Based on official documentation; not hands-on tested · Content checked:

Key features

Install only the image codecs a workflow needs

AVIF, JPEG, JPEG XL, PNG, QOI, WebP, and resize functionality are split into separate packages so applications can choose the codecs required for a conversion pipeline.

Sources: [2]

Run WASM codecs in browsers, workers, and strict edge runtimes

The packages target web and Web Worker environments and avoid dynamic code execution, which allows use in stricter runtimes such as Cloudflare Workers.

Sources: [2]

Best fit

Fits client-side and edge image conversion or compression

It can handle workflows such as pre-upload compression, JPEG-to-WebP conversion, or browser-based image editing without moving every image operation to a conventional server.

Sources: [2]

Before adoption

Node.js support is limited and not the primary target

The README describes Node.js support as experimental and provided for convenience, and points Node-centric users toward other alternatives.

Sources: [2]

Plan for ESM and WASM bundler behavior

All packages are ESM. CommonJS-oriented builds may need transpilation, while Vite and Nuxt can require documented exclusions or workarounds for WASM loading.

Sources: [2]

Official sources

  1. [1]jamsinclair/jSquash repository(2026-09-30)
  2. [2]jSquash README(2026-09-30)
  3. [3]jSquash Apache-2.0 license(2026-09-30)
Supplemental curator note

Its main value is running image conversion in browsers or edge runtimes without a conventional image server. Node.js is secondary, and bundler handling of WASM should be validated early.

Try it in 3 steps

  1. 1

    Import JPEG and WebP codecs

    Use the browser CDN imports shown in the README to prepare the source and target codecs.

    import { decode } from "https://esm.sh/@jsquash/jpeg"; import { encode } from "https://esm.sh/@jsquash/webp";
  2. 2

    Fetch and decode the JPEG

    Load the image as an ArrayBuffer and decode it into the image representation expected by jSquash.

    const response = await fetch(imageUrl); const imageData = await decode(await response.arrayBuffer());
  3. 3

    Encode the image as WebP

    Convert the decoded image to WebP and verify WASM loading in the target browser and bundler before production use.

    const webpBuffer = await encode(imageData);
Check the official README

Growth

Growth trends · Last 30 days

732 Stars

Trend data is still being collected.

Development activity

Last 90 days · weekly

Commits (last 30 days)
0
Open PRs
12

Development activity is still being collected.

Built with

Categories and tags

GitHub data

GitHub dataView detailed GitHub data

GitHub Topics

  • image
  • image-codec
  • image-codecs
  • image-processing
  • wasm
  • web-assembly
  • webassembly
  • avif
  • image-decoder
  • image-encoder
  • jpegxl
  • png
Stars
732
Forks
38
Watchers
4
Open issues
15
Contributors
5
Owner type
User
Primary language
TypeScript
License
Apache-2.0
Repository last updated
Jan 5, 2026
Write a related article

Share a guide or use case for this OSS in Markdown. Articles are published after administrator approval.

Report incorrect information

Tell us if any listing information is incorrect or outdated.

After reading this page, do you know what to do next?