Koha import · 025.9

A migration engine with 42 entity types, four sources, a dry run, preserved Koha ids, an exact rollback and a reconciliation report. Your members keep their logins.

The Koha import wizard
42
Entity types transformed
4
Sources: MySQL, dump, files, REST
279
Field mappings in the manifest
94
Koha tables recognised

Four ways in

Every source is presented to the engine as Koha-shaped tables, so the transformers are identical whichever way your data arrives. Choose a source to see what it covers and how well it has been tested.

Koha

biblio
items
borrowers
issues
reserves
accountlines
branches
subscription

Lumina

Catalogue records
Items
Patrons
Loans
Holds
Fines and payments
Libraries
Serials

Live MySQL. All 42 entities and password hashes. Tested against fakes, not a live Koha server.

SQL dump. koha-dump .sql or .sql.gz. All 42 entities and password hashes. Tested end to end on a synthetic dataset. The recommended cutover path.

CSV and MARC. Folder of CSV plus MARC files. Tested end to end (CSV); MARC reader is unit-tested.

Koha REST API. Partial: 22 of 42 entities and no password hashes. Tested against fakes.

Safety

Preview, then dry run

A preview reads 200 rows per table and writes nothing. A dry run counts everything and writes nothing. Only then do you import.

Exact rollback

Every row written is recorded against its batch, so undoing a run is exact rather than approximate.

Idempotent re-runs

Run the same import again and it matches by key instead of duplicating.

Koha ids preserved

Keep your Koha ids if you ask, so references elsewhere stay valid.

A reconciliation report

Counts in, counts out, and every row that needed attention, stored with the batch.

Read-only on Koha

Lumina never writes to Koha. MySQL access is a read-only transaction on a consistent snapshot.

The wizard

Pick a source, choose the entities, run a preview, dry-run it, import, and watch live progress with a log. The same engine powers a command-line tool for scripted rehearsals.

  • 34 of the 42 entities are on by default; the rest you opt into
  • Time zone setting for naive Koha DATETIME values (default Asia/Kolkata)
  • Koha password hashes carried over and upgraded at first sign-in
Import progress with live counts

Plainly

Tested end to end: SQL dump and CSV paths against a generated, synthetic Koha dataset (about 40 records, 60 items and 26 patrons, with deliberately nasty cases).
Tested against fakes only: the live MySQL and REST adapters. No import has yet been run against a real Koha server or a production-sized dump. Rehearse on a copy first.
Also true: the REST source covers 22 of 42 entities and cannot bring passwords or staff permissions, and the import runs from a Node host (not from the Cloudflare Worker build).

Questions

Does the import change anything in Koha?

No. Lumina only reads Koha. The MySQL adapter opens a read-only, consistent-snapshot transaction and rolls back on close; the dump and file sources never touch the server at all. Everything is written to Lumina.

Which source should we use?

Use a SQL dump for the real cutover: it is the best-tested, covers all 42 entities and can be re-imported as often as you like. Use direct MySQL for fast rehearsals if you can reach the database. Use CSV and MARC files if you only have exports, and the REST API only when you have no database or file access.

Is it proven against a live Koha?

Not yet. The dump and CSV paths run end to end against a synthetic Koha dataset in the test suite. The MySQL and REST adapters have been tested against in-memory fakes. Rehearse on a copy and read the reconciliation report; that is exactly what the dry run is for.

What about our members' passwords?

Koha password hashes are carried over for MySQL, dump and file sources and verified on first sign-in, then upgraded to a stronger hash. The REST API cannot provide hashes, so those members need a password reset.

Can we run it from the web, not the command line?

Yes: there is a web wizard in the staff console and a command-line tool. Both use the same engine. The import runs from a Node host; it has not been verified on the Cloudflare Worker build.

Next step

Rehearse your move.

Bring a copy of your Koha dump. We will run a dry run with you and read the reconciliation report together.