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
| 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
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

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

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

๐ 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.