Current Version: 8.0.0-SNAPSHOT (in development) | Latest Stable: 7.0.0 (Release Notes)
Copyright © 2020–2025 The Open Library Foundation
This software is distributed under the terms of the Apache License, Version 2.0. See the file LICENSE for more information.
Spring Boot-based backend module that provides API for quickMARC — an in-app editor for MARC records in Source Record Storage (SRS). This module supports editing MARC bibliographic, holdings, and authority records.
- mod-quick-marc
- Java: 21
- Spring Boot: 3.5.6
- Build Tool: Maven
- Key Dependencies:
- PostgreSQL - Data persistence
- Kafka - Event-driven communication
The module can be configured using the following environment variables:
| Variable | Default | Description |
|---|---|---|
DB_HOST |
localhost |
PostgreSQL database host |
DB_PORT |
5432 |
PostgreSQL database port |
DB_DATABASE |
modules |
Database name |
DB_USERNAME |
folio_admin |
Database username |
DB_PASSWORD |
folio_admin |
Database password |
DB_MAXPOOLSIZE |
10 |
Maximum database connection pool size |
DB_CONNECTION_TIMEOUT |
30000 |
Connection timeout in milliseconds |
DB_IDLE_TIMEOUT |
600000 |
Idle timeout in milliseconds |
DB_KEEPALIVE_TIME |
0 |
Keepalive time in milliseconds |
DB_MAX_LIFETIME |
1800000 |
Maximum lifetime in milliseconds |
DB_MINIMUM_IDLE |
10 |
Minimum idle connections |
| Variable | Default | Description |
|---|---|---|
KAFKA_HOST |
localhost |
Kafka broker host |
KAFKA_PORT |
9092 |
Kafka broker port |
KAFKA_SECURITY_PROTOCOL |
PLAINTEXT |
Security protocol (PLAINTEXT, SSL, SASL_SSL) |
KAFKA_SSL_KEYSTORE_LOCATION |
- | SSL keystore location (if SSL enabled) |
KAFKA_SSL_KEYSTORE_PASSWORD |
- | SSL keystore password (if SSL enabled) |
KAFKA_SSL_TRUSTSTORE_LOCATION |
- | SSL truststore location (if SSL enabled) |
KAFKA_SSL_TRUSTSTORE_PASSWORD |
- | SSL truststore password (if SSL enabled) |
NUMBER_OF_PARTITIONS |
5 |
Default number of partitions for Kafka topics |
REPLICATION_FACTOR |
1 |
Replication factor for Kafka topics |
KAFKA_EVENTS_CONCURRENCY |
2 |
Consumer concurrency level |
| Variable | Default | Description |
|---|---|---|
ENV |
folio |
Environment name (used in topic naming) |
The module consumes from the following Kafka topics:
{ENV}.*.DI_COMPLETED- Data import completion events{ENV}.*.DI_ERROR- Data import error events{ENV}.*.QM_COMPLETED- QuickMARC operation completion events{ENV}.*.specification-storage.specification.updated- MARC specification update events
| Variable | Default | Description |
|---|---|---|
server.port |
8081 |
HTTP server port |
Management endpoints are available at /admin:
/admin/health- Health check endpoint/admin/info- Application information/admin/liquibase- Database migration information/admin/loggers- Logger configuration/admin/threaddump- Thread dump/admin/heapdump- Heap dump
| Method | Endpoint | Parameters | Permission | Description |
|---|---|---|---|---|
| GET | /records-editor/records |
Query: • externalId (UUID, required) |
marc-records-editor.item.get |
Retrieve a MARC record by external ID (instance, holdings, or authority) |
| POST | /records-editor/records |
Body: MARC record data | marc-records-editor.item.post |
Create a new MARC record and related entity (bibliographic, holdings, or authority) |
| PUT | /records-editor/records/{id} |
Path: • id (UUID, record ID)Body: Updated MARC record data |
marc-records-editor.item.put |
Update an existing MARC record and related entity (async operation, returns 202) |
| GET | /records-editor/records/status |
Query: • qmRecordId (UUID, required) |
marc-records-editor.status.item.get |
Get the creation status of a MARC record |
| POST | /records-editor/links/suggestion |
Query: • authoritySearchParameter (ID/NATURAL_ID, default: NATURAL_ID)• ignoreAutoLinkingEnabled (boolean, default: false)Body: MARC record to process |
marc-records-editor.links.suggestion.post |
Generate authority linking suggestions for a MARC bibliographic record |
| POST | /records-editor/validate |
Body: MARC record to validate | marc-records-editor.validate.post |
Validate a MARC record without saving |
| Method | Endpoint | Parameters | Permission | Description |
|---|---|---|---|---|
| GET | /marc-specifications/{recordType}/{fieldTag} |
Path: • recordType (bibliographic, holdings, authority)• fieldTag (3-digit MARC tag, e.g., 008, 245, 852) |
marc-specifications.item.get |
Get MARC field specification for a record type |
Complete API specifications with request/response schemas:
Users need appropriate permissions to use the quickMARC API:
- For all operations: Use the aggregate permission
marc-records-editor.all - For selective access: Grant individual permissions as needed
Note: The module also requires various system-level permissions to interact with dependent services. These are automatically configured through the module descriptor.
| MARC field | Validation rule |
|---|---|
| 008 | Required field Unique field |
| 852 | Required field Unique field |
| MARC field | Validation rule |
|---|---|
| 1xx | Required field Unique field |
| 010 | Optional field Unique field |
| MARC field | Validation rule |
|---|---|
| 245 | Required field Unique field |
mod-quick-marc integrates with several other FOLIO modules to provide complete MARC record editing functionality:
| Module | Repository | Description |
|---|---|---|
| mod-source-record-storage | GitHub | Source Record Storage - manages MARC records in SRS |
| mod-source-record-manager | GitHub | Orchestrates data import and record processing workflows |
| mod-entities-links | GitHub | Handles authority-instance linking relationships |
| mod-record-specifications | GitHub | Provides MARC specifications and validation rules |
- Java 21
- Maven 3.6+
- Docker and Docker Compose (for local development)
mvn clean install# Unit tests
mvn test
# Integration tests
mvn verifyOption 1: Using Spring Boot with dev profile (recommended for development)
# Automatically starts PostgreSQL, Kafka, and other infrastructure via Docker Compose
mvn spring-boot:run -Dspring-boot.run.profiles=devOption 2: Manual infrastructure setup
# Start infrastructure services
docker compose -f docker/infra-docker-compose.yml up -d
# Run the module
mvn spring-boot:runOption 3: Full Docker setup
# Build and run everything in Docker
docker compose -f docker/app-docker-compose.yml up -d
# Check logs
docker compose -f docker/app-docker-compose.yml logs -f mod-quick-marcSee docker/README.md for detailed Docker Compose documentation.
The project uses Checkstyle to enforce code quality. Run:
mvn checkstyle:checkSee CONTRIBUTING.md for contribution guidelines.
See project MODQM at the FOLIO issue tracker.
- Other FOLIO modules
- FOLIO Developer documentation at dev.folio.org