Developing a Library Mobile Application
A library app looks simple: book catalog, search, membership. Complexity lives inside—libraries use standardized data formats (MARC21, OPDS, Z39.50), many lack modern APIs, and integration with library systems like ИРБИС-64, Koha, or Alma requires specific adaptation.
Data Source: From OPDS to Custom API
If library uses modern system—likely has OPDS feed (Open Publication Distribution System). It's Atom/XML API for catalogs. Parse via XMLParsing (Swift) or kotlinx.serialization with custom XML deserializer (Android).
No OPDS—either negotiate REST API with IT department or build custom backend proxy over existing system. Z39.50 over internet without intermediary from mobile—practically impossible, needs server adapter.
For small libraries without external system—custom backend (Laravel/Node) with manual catalog entry via CMS.
Local Database
Cache book catalog locally: Room (Android) / Core Data (iOS). Key entities:
@Entity data class Book(
@PrimaryKey val isbn: String,
val title: String,
val author: String,
val year: Int,
val genre: String,
val coverUrl: String?,
val availableCopies: Int,
val totalCopies: Int
)
@Entity data class Reservation(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val bookIsbn: String,
val userId: String,
val status: String, // ACTIVE, COMPLETED, CANCELLED
val dueDate: Long
)
FTS (Full-Text Search) via Room @Fts4 for title and author search without network:
@Fts4(contentEntity = Book::class)
@Entity(tableName = "book_fts")
data class BookFts(val title: String, val author: String)
Search works instantly offline—critical for library reading room with poor Wi-Fi.
Key Features and Implementation
Catalog with Filters
LazyColumn (Compose) / UICollectionView with Diffable Data Source. Filters: genre, year, availability, language. Filter via Room queries with dynamic conditions or @Query with nullable params.
Personal Account and Membership
Login via library card number + password or QR code scan. After—current books checked out, history, fines, reservations. Push notifications 3 days before return deadline (via FCM / APNs).
Barcode / QR Scanning
Scan ISBN for quick book lookup—via MLKit Barcode Scanner (Android) or Vision framework (iOS). Scan library card QR for authentication.
E-books
If library provides e-resources—integrate with ЛитРес Библиотека partnership or own EPUB/PDF reader. EPUB rendering via Readium (iOS/Android)—open standard with DRM support.
Offline Mode
Bookmarked books and personal account must work without internet—from local cache. Sync when connection returns via WorkManager (Android) / BGTaskScheduler (iOS).
Work Scope
- Analyze existing library system and choose integration approach
- OPDS parser or REST API integration
- Local catalog with FTS search
- Personal account: membership, history, reservations
- Push notifications on return deadlines
- ISBN/QR scanner
- Offline mode with sync
Timeline
MVP with catalog, search, personal account: 4–6 weeks. Full app with offline, push, scanner, existing library system integration: 8–12 weeks. Cost depends on library system API availability and quality.







