Open source Β· Jakarta EE + React

Library management,
without the busywork.

Shelfinity is a self-hosted library management system: catalog and borrowing for patrons, an approval queue and reporting for staff, all backed by a real identity provider instead of a homegrown login form.

0
API resources
0
Automated tests
0
Roles: patron & admin
0
Keycloak-backed auth

What Shelfinity is

Shelfinity is a full-stack library management system for a single library or small library network. Patrons browse the catalog and submit borrow, return, and reservation requests; staff review a single approval queue, manage the catalog, configure notification email, and pull reports. Identity is handled entirely by Keycloak β€” the backend validates Keycloak-issued JWTs and never stores a password.

πŸ“–

Catalog & requests

Browse, search, and filter the catalog. Submit borrow, return, and reservation requests that route into a single admin approval queue.

πŸ—‚οΈ

One approval queue

Registration, borrowing, and returns share one review β†’ approve/reject β†’ notify workflow, so staff have a single place to work from.

πŸ””

Reservations & overdue tracking

Reserve a title that's checked out, get notified when it's available, and let a scheduled job track and remind on overdue loans automatically.

πŸ“Š

Admin reporting

Book popularity, borrowing trends, user activity, author distribution, and library-wide statistics β€” no spreadsheet exports required.

πŸ”

Keycloak-backed identity

OIDC authentication via Keycloak. The app keeps a local profile cache for joins and role checks, but never sees a plaintext password.

βœ‰οΈ

Configurable notifications

Admin-managed SMTP configuration drives async email for every state change β€” request outcomes, reservation readiness, overdue reminders.

Why it’s built this way

Every behavior documented on this site is verified against the running codebase, not aspirational. The full specification β€” including the exact business rules, entity fields, and the reasoning behind decisions like β€œwhy Keycloak instead of a homegrown login” β€” lives in docs/api/SPEC.md in the repository. This site is the readable front door to that spec, plus a getting-started path and a browsable API reference.

Where to go next