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.
- β 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
π‘ 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.
- Static binary: Just download and run.
- Docker: Launch anywhere in seconds.
- AWS Lambda: Compile and deploy as a fast, small Lambda function.
brew install beetlebugorg/tap/go-dimsThat installs the dims command on macOS and on Linux. Use it to sign URLs and
to run the server:
dims sign --key-file=signing-key.txt "http://localhost:8080/v5/resize/200x200/?url=cat.jpg"
dims serveRun 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 serveThen, 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 |
| Sepia | sepia/<0.0-1.0> |
sepia/0.8 |
These examples name a file in resources/. A bare name resolves only when the file backend is the default:
docker run \
-e DIMS_DEVELOPMENT_MODE=true \
-e DIMS_SIGNING_KEY=devmode \
-e DIMS_DEFAULT_SOURCE_BACKEND=file \
-e DIMS_FILE_BASE_DIR=/resources \
-v "$PWD/resources:/resources" \
-p 8080:8080 \
ghcr.io/beetlebugorg/go-dims serveThe Getting Started command above keeps the http default, which takes a full URL.
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
http://localhost:8080/v5/resize/200x200/crop/200x100+0+25%25/sharpen/1x2?url=pexels-photo-1539116.jpeg
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
Use the built-in CLI to generate secure, signed URLs:
β― cat signing-key.txt
0123456789abcdef0123456789abcdef
β― 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=95abae1df702bcb894cbcc2625f5b044e9b7af316b02e92483efa7f330968dce&url=pexels-photo-1539116.jpegThe signature depends on the key, so this example shows the key that produced it.
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.


