Back to browse
GitHub Repository

A simple and performant digital asset management platform

4 starsKotlin

An asset management platform built with Kotlin, Ktor, and libvips

by dmaiken·Feb 19, 2026·1 point·1 comment

AI Analysis

●●SolidNiche GemShip It
The Take

Path-first image management is the neat idea here: you can reference semantic URLs like /assets/user/123/profile instead of juggling opaque IDs. The project pairs Ktor non-blocking IO with libvips for fast processing and exposes features you actually care about — on-demand vs eager variant generation, LQIPs, redirect templating and cache control — all Dockerized with docs and an image on GHCR. It isn't reinventing the wheel (Thumbor, Imgproxy and others exist), but it's a competent, usable open-source alternative for teams who want to self-host.

Category
Target Audience

Backend engineers and infra teams who need a self-hosted image pipeline and want to avoid Imgix/Cloudflare-style vendor lock-in

Post Description

I've seen throughout my career that asset management is full of separate tools but rarely a unified solution. Existing solutions focus on transforming content but not really other aspects of managing it or they're focused on marketing content. Content ends up in s3 or some block storage but massaging content, storing references and metadata are generally built in house or delegated to Cloudflare or Imgix. I built a self hosted dockerized platform that manages all of this for you.

Konifer provides a zero-state integration where the path is the key. No need to create a "profile_content_id" (although you can still do it that way), your client can just reference /users/123/profile. It has a powerful Path Configuration (in the docs) that lets you configure what each path can do, the variants it can generate, when they should be generated (on-demand or eagerly), LQIPs, allowed content types, redirect URL templating, cache control, and more.

It supports most major image formats with plans for SVG, TIFF and BMP (legacy format but I think libvips bundles the encoder for it).

I built the API and configuration to enable someone to mold Konifer to fit their domain model and query patterns (see query selectors in the docs).

Both the code and API is designed to be what Spring Boot is not. It's explicit and assumes nothing. I try to avoid meta programming and reflection. Any annotations I use are backed by a compiler plugin. I've marinated in the waters of Spring for way too long and I had to get out and see what Kotlin is like when you eschew Java conventions. Perhaps I'm just a child revolting and the adults in the room are chuckling at my petulence.

This is definitely pre 1.0. I have a large roadmap but unfortunately it's on paper at the moment. I'll work to get it into GH soon. I am currently working on some performance improvements that i hope to have done in the next week. I'm also going to get an ARM image built soon too.

Similar Projects

AI/ML●●●Banger

Rotunda - A Browser Built for Agents

Firefox fork bypassing CDP detection leaks that plague standard Chrome automation.

WizardryZero to One
icyfox
13521d ago