A dynamic and responsive default implementation of `next/image` that determines height and width on the go.

Usage no npm install needed!

<script type="module">
  import segersnielsImage from 'https://cdn.skypack.dev/@segersniels/image';




A dynamic and responsive default implementation of next/image that determines height and width on the go.


Recently Next.js released version v10.0.0 which introduced next/image.

Since version 10.0.0, Next.js has a built-in Image Component and Automatic Image Optimization.

The Next.js Image Component, next/image, is an extension of the HTML element, evolved for the modern web.

The Automatic Image Optimization allows for resizing, optimizing, and serving images in modern formats like WebP when the browser supports it. This avoids shipping large images to devices with a smaller viewport. It also allows Next.js to automatically adopt future image formats and serve them to browsers that support those formats.

So the TLDR; is it does a lot of internal image optimization for you so you don't have to implement your own solutions for them manually. The component supports different layout values that define how your image size behaves according to the current viewport or surrounding element. Besides passing a layout prop they require you to always pass the desired height and width dimensions.

This is perfectly fine if you're using local images that you know the dimensions of. But things quickly become annoying when you try including images from external sources like eg. Twitter. Neither of the current implementations was doing the magic I was promised and still required weird logic to make things work.

This wrapped implementation will determine the height and width for you on image load so you don't have to worry about any of this anymore. The default layout is set to `responsive.


Use it like you would use next/image. The default layout is responsive but can be changed to intrinsic if your use case requires it. View below example using it as a renderer provided to react-markdown.

export default {
  code: Window,
  image: ({
  }: {
    alt?: string;
    src?: string;
    title?: string;
  }) => {
    return (
        <ResponsiveImage src={src} alt={alt} title={title} />


View it in action on my blog at https://nielssegers.be/blog/segersniels-image.