Open source · Windows · No subscription

InvLib A complete library management system — free and open source.

InvLib covers the full workflow required by Bulgarian Ordinance No. 3 of 18 November 2014 — inventory ledger, cataloging, patrons and circulation, barcode labels, deaccession, stocktaking, and annual reports. It runs offline, installs on Windows, with no monthly fee and no data sent anywhere.

Open Source GPL-3.0-or-later Windows 10/11 Offline No subscription

Built for real, everyday work in a library.

Who InvLib is for

The software is generic by design — a library's own settings are entered once, and nothing about a specific institution is hard-coded.

Chitalishte (community) libraries

A good fit for small and mid-sized collections, with no server or dedicated IT staff required.

Municipal libraries

A local system with no mandatory cloud subscription — your data stays in your own building.

School libraries

Works just as well for a school's book collection — the registers and structure aren't tied to any particular type of institution.

Librarians

An interface built around day-to-day library work — from checkout to the annual report.

Why InvLib

Existing library software in Bulgaria often requires a paid subscription, institutional membership, or a complex server setup. For a small community or municipal library, that's a disproportionate burden for what's actually needed — an accurately kept inventory ledger and registers that comply with the law.

The usual alternative

  • Paid subscription or license
  • Requires a server setup or network membership
  • Closed source — locked to a single vendor
  • Your data lives in someone else's system

InvLib

  • Completely free, open source (GPL-3.0)
  • Downloaded and installed directly from GitHub
  • Your data stays in a local database on your computer
  • Works fully offline, on Windows

Features

Every register required by the regulatory framework for public libraries has its own section — with automatic numbering, printing, and protected storage.

Inventory ledger & fund register

Inventory ledger per Annex No. 4 and the fund-movement register per Art. 13 — with printing and PDF export.

Cataloging

UDC classification, authority control for authors and titles, record import by ISBN (Google Books / SRU).

Patrons & circulation

Patron cards, loan periods and renewals by category, overdue notices, a patron account with receipts.

Barcode labels

Fund and patron-card labels (Code 39), printing on A4 sheets or roll printers, USB barcode scanner support.

Print preview

Every one of the app's roughly 14 printable documents is shown on screen first, before it reaches the printer.

Deaccession

Write-off acts under Art. 30–39, with committee, grounds, and a list of the affected items.

Stocktaking

Representative-sample method under Art. 40–41, including mobile scanning with a phone.

Journal & reports

The library's Section A/B journal, modeled on the official electronic journal, plus annual statistical reports.

Online catalog

The app publishes the catalog to a GitHub repository, and a page on the library's own website reads it live — no server, no patron data exposed.

Import & export

UNIMARC/MARCXML, Dublin Core, and CSV — for exchange with other library systems.

Data protection

National ID numbers are stored encrypted with a password; old loans are anonymized automatically.

Local network

A shared database across multiple library workstations, with a per-employee audit trail.

Automatic updates

New versions are delivered directly through GitHub Releases, with no manual reinstall.

Screenshots

The app's real interface, loaded with sample data.

InvLib dashboard — the library's status at a glance
Dashboard — the library's status at a glance
Library holdings — search, filters, bulk editing
Library holdings — search, filters, bulk editing
Inventory ledger per Annex No. 4 / Art. 16(1)
Inventory ledger per Annex No. 4 / Art. 16(1)
Fund movement register (KDBF)
Fund movement register (KDBF)
Fund acquisitions
Fund acquisitions
Deaccessioning library materials
Deaccessioning library materials
Stocktaking by the representative-sample method
Stocktaking by the representative-sample method
Authority data — authors and titles
Authority data — authors and titles
Patrons — cards, categories, and lending activity
Patrons — cards, categories, and lending activity
Checkout and return of library materials
Checkout and return
Overdue loans
Overdue loans
Periodicals register
Periodicals register
Interlibrary loan
Interlibrary loan
Library diary
Library diary
Analytical description — local studies
Analytical description — local studies
Personalia records — local studies
Personalia records — local studies
Chronicle — local studies
Chronicle — local studies
Reports and statistics
Reports and statistics
Ready-made reports
Ready-made reports
The library's public online catalog
The library's public online catalog
Online catalog — publishing from the app
Online catalog — publishing from the app
Printing Code 39 barcode labels and patron cards
Barcode labels (Code 39) and patron cards
Audit trail
Audit trail
Library settings
Library settings

Regulatory compliance

InvLib is built directly on the text of Bulgarian Ordinance No. 3 of 18 November 2014 on library service standards — every section in the app maps to a specific article, not the other way around.

  • Annex No. 4 — inventory ledger template (Art. 16(1))
  • Art. 13(3) — fund-movement register, three parts
  • Art. 17(2) — prohibition on erasing a recorded entry
  • Art. 30–39 — procedure for writing off library materials
  • Art. 40–41 — stocktaking by the representative-sample method
  • Art. 42–49 — patron registration and service

Read the full guide to Ordinance No. 3 and the inventory ledger, or the full article-by-article compliance map in the repository's public documentation: naredba-3-karta.md. The dual BGN/EUR display follows the Bulgarian Act on the Introduction of the Euro in the Republic of Bulgaria for the transition period, and patron data protection follows Regulation (EU) 2016/679 (GDPR).

The information in this section is for general guidance only and does not constitute legal advice. For regulatory questions, consult the current official text of the ordinance.

Download & install

1

Download the installer

The latest Inventar-Setup-X.Y.Z.exe from GitHub Releases — the current version is 2.4.0.

2

Run it on Windows

The installer and interface are entirely in Bulgarian — just follow the steps.

3

Fill in your settings

Library name, address, and committee are entered once, on first launch.

Windows 10/11 · 64-bit Free GPL-3.0-or-later ~107 MB

Installer SHA-256: 979a29e86e7448a90e822d1ee28e0820f5f2ba04283e810e86a7247bc4f61e9a — full checksum file: SHA256SUMS.txt. Release date: 21 August 2026full release notes.

Requires Windows 10 or 11 (64-bit). An internet connection is only needed for automatic updates, ISBN lookups, and publishing the online catalog — everything else works offline. The installer isn't code-signed yet — if Windows SmartScreen warns you, see what that means.

Open source

InvLib is developed in the open on GitHub, under the GPL-3.0-or-later license. Every release is built automatically by GitHub Actions and passes over 530 automated tests.

GPL-3.0-or-later license 530+ automated tests CI on every commit Releases via GitHub Releases

Recent changes

v2.4.0 Third in-depth audit — 26 findings fixed, plus 2 more caught by an adversarial self-review of the fixes themselves. Highlights: writes that check availability before acting (checkout, renewal, deaccession-act numbering, holds) now take the write lock first, closing two real two-station race conditions proven with real dual-process tests (a raw "database is locked" error, and a duplicate reservation row on a double-click); an unclaimed "ready for pickup" hold now auto-expires after 3 days instead of blocking the queue forever; dates are validated before reaching the database in checkout/return/deaccession acts; deaccessioning a book now explicitly cancels any active holds on it; a failed or blocked online-catalog write is now visible in the audit log instead of only the console; the FTS5 search index is now populated via SQLite's official, restart-safe `rebuild` command so a book added during a two-station first-launch race is always findable. Plus: status validation on save, barcode control-character stripping, a duplicate-barcode finder, NULL-status handling in inventory sessions, a safer `serialize()`-based daily backup, a staleness banner on the public catalog page, and CI now running the full suite in both UTC and Europe/Sofia.
v2.3.1 Completes the three items deferred in v2.3.0, all about performance at scale. List screens no longer ship every column over IPC (20.63 MB → 4.81 MB for Books at 15 000 records; the edit form is unaffected, it fetches the full record separately). Five more screens render in windows instead of all at once (Overdue, Analytics, Chronicle, Persons, Acquisitions). Labels are built only after the librarian confirms, not before.
v2.3.0 Second in-depth audit — 29 defects found and fixed, plus 10 more found by re-auditing the fixes themselves. Highlights: the app now reports why it cannot start instead of hanging invisibly; overdue compensation is finally identical across the counter, the Overdue screen and the Dashboard; a single hold no longer blocks all free copies of a multi-copy title; reader cards fit the A4 sheet; printing many labels no longer freezes the window for ~37 s or leaks memory; "Show more" is no longer quadratic; a missing index made Acquisitions 146× faster; the annual report no longer counts money nobody paid. Test suite grew from 647 to 776, closing the systemic blind spots that let 14 of 30 injected defects pass unnoticed.
Full list of changes →

In real, daily use at community libraries — including NCh "Vasil Levski – 1922" in Yavorec, the library it was originally built for. Developed by Plamen Hristov.

Design ideas are checked against established open-source systems in the library sector, but every borrowed idea passes through a filter: does it fit Ordinance No. 3, and the needs of one community library building, rather than a multi-branch consortium? Unlike the paid or institutional-membership systems common in Bulgaria, InvLib stays free, open-source, and deliberately focused, not a simplified copy.

Documentation

Full documentation lives in the app's repository — for librarians and for developers alike.

Librarian's manual

A complete guide to day-to-day work in the app — installation, library setup, and every section.

Open the manual (PDF) →

Ordinance No. 3 & inventory ledger

A practical, article-by-article guide — inventory ledger, fund movement register, deaccession, stocktaking.

Read the guide →

Installation & code signing

First-launch steps, and why Windows SmartScreen may warn about an unsigned installer.

Read more →

Code architecture

For developers — the app's structure, IPC model, database, and design references.

Read more →

How to contribute

Code style, tests, and what to check before opening your first pull request.

Read more →

Security policy

Scope and how to responsibly report a vulnerability — via GitHub Security Advisories.

Read more →

Roadmap

Current priorities, as described in the app's repository.

Code-signing the installer

Will remove the Windows SmartScreen and antivirus warnings. Options explored: SignPath Foundation, Azure Trusted Signing, Certum Open Source.

Feedback from more libraries

The app is generic by design — the goal is for other chitalishte and municipal libraries to try it and help shape it around their real needs.

Suggestions & ideas

Discussed openly in GitHub Issues; ideas are also checked against established open-source systems in the library sector.

Browse Issues →

Libraries using InvLib

The software is generic — a library's own details are entered in Settings, and nothing about any particular institution is written into the code.

    This list is not filled in yet. If you use InvLib and would like your library listed here, write to plam4o.4o@outlook.com — give the library's name and its website, if it has one.

    Security and privacy

    Local database

    Works offline; the library database stays in a local file on your computer and isn't uploaded to the cloud by default. Internet is used only for specific features — automatic updates, ISBN lookups, and publishing the online catalog.

    Personal data protection

    National ID numbers are stored encrypted with a password; old loans are anonymized automatically, with GDPR's requirements in mind.

    Audit trail & backups

    Every action is logged per staff member; automatic backups protect the collection from data loss.

    Frequently asked questions

    Is the software really free?

    Yes — InvLib is open source under the GPL-3.0-or-later license, with no fees, no subscription, and no "paid tier". Download the installer from GitHub Releases and use it freely, subject to the terms of the GPL-3.0-or-later license itself.

    Does it work without an internet connection?

    Yes. The entire database is a local file on your computer. Internet is only needed for automatic updates, ISBN lookups, and publishing the online catalog.

    Can I migrate data from another system?

    Yes — the app imports records from CSV and UNIMARC/MARCXML, and exports to the same formats, so your data is never locked in.

    How many workstations can use it at once?

    The database can live in a shared folder on the local network, with several workstations using it and an audit trail of which staff member did what.

    Is patrons' personal data protected?

    National ID numbers are stored encrypted with a password, old loans are anonymized automatically with GDPR's requirements in mind, and the online catalog is designed not to publish patrons' personal data.

    What's the license?

    GPL-3.0-or-later. The full text is in LICENSE.

    Can I modify the program's code?

    Yes — the GPL-3.0-or-later license explicitly permits reviewing, modifying, and redistributing the code, subject to the license's own terms.

    How do backups work?

    The app keeps automatic backups of the database so the collection isn't lost to a crash or a corrupted file.

    How do I update the app?

    New versions are delivered directly through GitHub Releases and automatic updates — no manual reinstall.

    Where do I report a bug?

    Through GitHub Issues, or by email at plam4o.4o@outlook.com.

    How do I suggest a new feature?

    Open a suggestion in GitHub Issues — that's where development ideas are discussed and prioritized.

    Questions about InvLib?

    Get in touch with questions, feature requests, or help getting set up for the first time.