Skip to content


unlazy supports client-side and server-side (SSR) decoding of BlurHash strings. This allows you to use BlurHash placeholders for images that are not yet loaded.

A BlurHash placeholder is a low-resolution, low-quality representation of the image, encoded as a string and decodable to a PNG image.

Client-Side BlurHash Decoding

data-blurhash Attribute

By default, unlazy will decode BlurHash strings on the client-side automatically when a data-blurhash is present on a <img> tag.


hash Option

If you are initializing unlazy for single images, i.e. in a frontend framework component of your choice, you can pass a custom hash string to the lazyLoad function. It has higher priority than the data-blurhash attribute.

import { lazyLoad } from 'unlazy'

const image = document.querySelector('#image')

lazyLoad(image, {
  hash: 'LKO2:N%2Tw=w]~RBVZRi};RPxuwH',
  hashType: 'blurhash'


The hashType is optional and defaults to blurhash.

Disabling BlurHash Decoding

To disable BlurHash decoding altogether, pass false to the hash option.

import { lazyLoad } from 'unlazy'

lazyLoad('img[loading="lazy"]', {
  hash: false


This will also disable ThumbHash decoding.

Server-Side BlurHash Decoding

If you are using a server-side framework, you can use the createPngDataUri function to create a PNG data URI from a BlurHash string. The resulting data URI can then be used as the src attribute of an image.

import { createPngDataUri } from 'unlazy/blurhash'

const blurhash = 'LKO2:N%2Tw=w]~RBVZRi};RPxuwH'
const pngDataUri = createPngDataUri(blurhash)

For a complete list of options, see the createPngDataUri API documentation.

Released under the MIT License.