Skip to content

beetlebugorg/go-dims

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

go-dims

go-dims is a fast, lightweight HTTP microservice for real-time image processing, written in Go and powered by libvips. It’s a modern, drop-in replacement for mod_dims, fully compatible with the DIMS API.

Designed for use in websites, publishing platforms, and CDN-backed applications, go-dims helps you generate image variants on-the-fly β€” without the need for precomputing or storing multiple renditions.

✨ Features

  • βœ… Resize, crop, rotate, flip, grayscale, and more
  • βœ… Add watermarks
  • βœ… Strip metadata, control quality, convert formats
  • βœ… Export in JPEG, PNG, and WebP
  • βœ… Sign and validate requests for secure public access
  • βœ… Load images from file, a URL, or S3
  • βœ… Deploy as a Docker image, or AWS Lambda function
  • βœ… Drop-in replacement for mod_dims

Why use go-dims?

πŸ’‘ On-demand image transformation

  • Resize, crop, convert formats, and more β€” all defined via URL.
  • Built-in support for signatures to prevent misuse and ensure cacheability.
  • Avoid bloated image storage by rendering variants only when requested.

⚑ Fast, minimal, portable

  • Built on libvips, the fastest image processing library.
  • Single static binary with zero runtime dependencies.
  • Docker image is just ~11MB compressed, standalone binary is just ~9MB.
  • Built for linux/amd64 and linux/arm64.

πŸ”’ Secure

  • Clean, HMAC-SHA256 signed URLs to ensure safe, tamperproof transformations.
  • The go-dims Docker image is built from scratch with a statically compiled binary, no shell, no package manager, and no extraneous libraries β€” minimizing the attack surface.

πŸ›  Developer-friendly

  • Easily define image variants directly in frontend code or templates.
  • Uses minimal memory β€” perfect for local development.
  • Runs equally well locally, in containers, or as an AWS Lambda function.

πŸ“¦ Deployment Options

  • Static binary: Just download and run.
  • Docker: Launch anywhere in seconds.
  • AWS Lambda: Compile and deploy as a fast, small Lambda function.

πŸš€ Getting Started

Run locally in development mode (no signature required):

docker run \
  -e DIMS_DEVELOPMENT_MODE=true \
  -e DIMS_DEBUG_MODE=true \
  -e DIMS_SIGNING_KEY=devmode \
  -p 8080:8080 \
  ghcr.io/beetlebugorg/go-dims serve

Then, open your browser and navigate to:

http://127.0.0.1:8080/v5/resize/100x100/?url=https://images.pexels.com/photos/1539116/pexels-photo-1539116.jpeg

β›Ά Supported Transformations

Type Command Example
Resize resize/WxH resize/300x300
Crop crop/WxH+X+Y crop/200x100+0+25%25
Thumbnail thumbnail/WxH thumbnail/200x200
Watermark watermark/<args> watermark/1,.35,se
Format format/<string> format/webp
Strip strip/<bool> strip/true
Quality quality/<0-100> quality/85
Rotate rotate/<0-360> rotate/90
Sharpen sharpen/TxS sharpen/1x2
Autolevel autolevel/<bool> autolevel/true
Brightness brightness/<brightness>x<contrast> brightness/5x25
Flip/Flop flipflop/<horizontal|vertical> flip/horizontal
Invert invert/<bool> invert/true

πŸ“Έ Examples

Original

Example

Thumbnail, then sharpen

Thumbnail resize to 200x200 pixels, keeping the aspect ratio and cropping the image if necessary.

http://localhost:8080/v5/thumbnail/200x200/sharpen/1x2/?url=pexels-photo-1539116.jpeg

Thumbnail

Resize with center crop

http://localhost:8080/v5/resize/200x200/crop/200x100+0+25%25/sharpen/1x2?url=pexels-photo-1539116.jpeg

Resize with center crop

Watermark

Add a watermark to the bottom right corner of the image.

http://localhost:8080/v5/thumbnail/200x200/sharpen/1x2/watermark/1,.35,se?url=pexels-photo-1539116.jpeg&overlay=hex-lab.png

Watermark

πŸ”‘ Generating a Signed URL

Use the built-in CLI to generate secure, signed URLs:

❯ ./build/dims sign --key-file=signing-key.txt "http://localhost:8080/v5/resize/200x200/?url=pexels-photo-1539116.jpeg"

http://localhost:8080/v5/resize/200x200/?sig=33032505c0f4b3d43674b49575d9e379470ac6d7e7fa3e055b248802ee6867&url=pexels-photo-1539116.jpeg

License

This project is licensed under the MIT license. See the LICENSE file for details.

For software used by this project, and their licenses, see the NOTICE file.

Packages

 
 
 

Contributors 2

  •  
  •