This post was written by the creator and developer of Issued.

Why I Built It

Issued started from a very simple personal need: I wanted a clean, fast, self-hosted way to browse and read my digital comics.

There are already other comic library servers out there, and some of them do a lot more than Issued. My problem was that most of those extra things were not really what I needed. I was looking for something lighter, more focused, and nicer to use.

I also had some personal preferences about the technology stack. Some existing solutions are built with stacks like .NET or Java, which are not really my favorite choice for this kind of small self-hosted tool. So I decided to build Issued from scratch using Python, FastAPI, Tailwind and HTMX: a stack that feels simple, readable and practical for the kind of project I had in mind.

The Main Idea

Issued is not trying to become a huge media server. It is a personal comic library server with a clear purpose: scan your CBZ and CBR files, keep your existing folder structure, show everything in a nice interface, and let you read your comics from a browser or from an OPDS-compatible app.

One thing I really wanted to avoid was forcing people to reorganize their collections. Many comic readers already have folders arranged by publisher, series, author, language, reading order, or just personal chaos. Issued tries to respect that. You point it to your comics folder, it scans what is there, and it builds the library around your structure. The only "rule" to follow is simple: don't mix folders and comics in the same folder. Issued considers a folder with comics inside a "serie", and threats it differently than a folder that contains folders.

Lightweight by Design

Performance was one of the main reasons for building Issued the way I did.

The project is intentionally small. There are not many moving parts, and each file has a specific purpose. It does not try to do everything, and that helps keep it light both on the server and in memory.

On my own setup, I use Issued with a library of around 4,500 comics, and browsing feels as fast as if there were only ten. Of course, every setup is different, but the goal is clear: Issued should stay responsive even with large collections. I expect it to behave well with much bigger libraries too, including 10,000 or 20,000 comics.

There is one process that is naturally slower: thumbnail generation. This is kinda intentional. Thumbnails are generated once, and the process is single-threaded on purpose. I did not want Issued to saturate a home server just to create covers faster, especially when many people run several containers on the same machine. I prefer a slower but more respectful approach that leaves the server breathing.

Some of the features

Issued supports both CBZ and CBR files. Once your library is scanned, you can browse it from the built-in web reader or connect to it using OPDS-compatible apps such as Panels, Chunky, Moon+ Reader and others.

The web interface includes recent comics, continue reading, search, grid and table views, and the ability to mark comics as completed. If you follow series that are still being published, you can mark them as ongoing and quickly see the latest issue, the total number of issues, and possible missing numbers.

Metadata editing is also possible. Issued can use ComicInfo.xml when available.

Issued keeps an eye on the root folder of your library to monitor changes, if you remove or add comics it will automatically refresh the library. If you prefer to not monitor your root folder (to avoid spinning the disk when it's not used for example) you can change the config file. There's a "manual scan" button on the web page to launch a library refresh.

Web reader has shortcuts for page navigation and fullscreen and can be used with a pc or a tablet/phone because supports screen taps.

Who Is Issued For?

Issued is for people who already have a folder full of digital comics and want a simple, good-looking way to self-host them.

It is for self-hosting enthusiasts, NAS users, home lab people, and comic readers who like owning their files instead of depending entirely on cloud services. It is not designed to be the biggest or most complex comic server around. It is designed to be pleasant, fast, focused and easy to run.

A Small (totally unrequested) Personal Detail

The violet accent color is not random. My daughter’s name is Viola, which is Violet in English, so the color felt like the obvious choice.

Issued is a small project, but it is built with care: simple stack, clean UI, low bloat, and a very specific goal. Sometimes that is exactly what a self-hosted tool should be.

Website: https://useissued.com

Repo: https://github.com/metalogico/issued