npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@wasmedia/wvips

v0.2.0

Published

libvips compiled to WebAssembly for browsers

Readme

wvips

pipeline status latest release license: Apache 2.0 libvips WebAssembly playground

A from-scratch, sustainable libvips build for the browser, compiled to WebAssembly with all modern image-format dependencies. Single-threaded + SIMD — works on any site without special headers (COOP/COEP).

Format & Feature Scope

  • Excluded: SVG (rsvg), PDF (poppler/pdfium), JPEG 2000 (OpenJPEG), OpenSlide, NIfTI, FITS, MATLAB, OpenEXR, raw archive support — these are heavy, optional libvips loaders that don't fit a browser bundle.
  • HEIC is not supported, neither decode nor encode. libheif is built without an HEVC codec (libde265 to decode, x265 to encode), so loading an iPhone .heic fails. HEVC carries patent-licensing questions; whether to add libde265 is tracked in #4.
  • Included: Modern raster formats with encode + decode where the library supports it:
    • Common: JPEG (mozjpeg), PNG, WebP, TIFF, GIF (read built-in / write via cgif)
    • Modern: AVIF (libheif + libaom), JPEG XL (libjxl)
    • Metadata: EXIF (libexif), ICC profiles (lcms2)
    • Quantisation: imagequant (palette PNG/GIF)

Technical Requirements

  • libvips version: Track current stable (8.18 line at time of writing).
  • API surface: Both CLI-style (vips operation arg1 arg2 ...) and the C API (vips_image_new_from_buffer, vips_thumbnail_buffer, vips_image_write_to_buffer, etc.).
  • JS wrapper: High-level chainable WVipsImage class on top of the C bindings, plus CLI-style command execution.
  • Toolchain: Emscripten (emsdk 5.0.6) inside Docker; libvips built via meson.
  • Output: Single .wasm + JS glue bundle, distributable as an npm package.
  • File I/O: ArrayBuffer/Blob passing, MEMFS, and file-backed I/O: Image.open()/writeTo() read and write OPFS files (in a worker) or host files (Node) in place, so a large image never has to fit in the heap.
  • Web Workers: Off-main-thread support via worker.ts.
  • Browser support: Chrome and Safari at minimum.
  • Build: Single-threaded + SIMD — no special HTTP headers required.

Prior Art

| Project | Status | libvips Version | Build approach | API style | |---------|--------|-----------------|----------------|-----------| | kleisauke/wasm-vips | Active | Tracks stable | Emscripten + Embind, single tarball script | C++/Embind | | lovell/sharp | Active | Tracks stable | Native node addon — not WASM | Node.js only |

What wvips offers in addition:

  • A clean separation between the native build (native/, owned source-by-source from upstream releases) and a TypeScript wrapper (src/) that mirrors the wimagemagick shape: loader, image, cli, api, filesystem, worker.
  • CLI-style command execution (wim.execute('input.png -resize 50% output.jpg', files)), not just programmatic API.
  • No reliance on a third-party prebuilt blob — every dependency is fetched from upstream and built inside our Docker image so we own the bill of materials and the upgrade story.

Try it

The browser playground is live at https://vips.wasmedia.org — drop an image, resize and convert it entirely client-side. It is rebuilt from main on every merge.

Install

npm install @wasmedia/wvips

Published to npmjs.org with provenance, like the rest of the wasmedia family. No .npmrc is needed. 0.1.0 was published only to GitLab's npm registry.

Quick start

npm run build              # native WASM (Docker) + TypeScript
npm run playground         # serve examples/browser/index.html on :8000

See docs/building.md for the long form and docs/api.md for the JS/TS API.

For large images and memory behaviour, see docs/file-io.md.

License

  • wvips's own code (the TypeScript wrapper, the C bindings, the build tooling) is Apache-2.0.
  • dist/wvips.wasm statically links libvips, glib and libexif (LGPL-2.1-or-later), libheif (LGPL-3.0-or-later) and permissively licensed libraries (MIT, BSD, Zlib, IJG, libpng, libtiff). The license field in package.json is the SPDX conjunction of all of them.
  • Every build ships the upstream notices in dist/licenses/, with a summary in native/licenses/README.md (published as dist/licenses/README.md). If you serve wvips.wasm, keep those notices with it, and point users to the corresponding source for the version you ship (the wvips git tag). That summary explains why the LGPL relinking obligation is met that way.
  • This software is based in part on the work of the Independent JPEG Group.