foundry

Self-hosting FOLIO with Foundry: two libraries, one ILL system

  • foundry
  • folio
  • folio-hosting
  • self-hosting
  • openrs
  • interlibrary-loan
  • iso-18626

Can two libraries run an interlibrary loan system in the same FOLIO tenant and still exchange requests under separate institutional identities? In this interim Foundry check-in, Riverside Library sends a request for The Atlas of Quiet Rivers. Parkside Library receives it as a separate supplier request. Both are using the current single ILL app.

We recorded that exchange as part of a fresh, self-hosted Foundry FOLIO Distribution install. The local Podman run selected signed Snapshot 183, used real Zitadel sign-in and passed 11 tests across seven app areas. It took 21 minutes and 2 seconds from launch through verified cleanup. The three-minute video compresses provisioning and shows the test actions, sign-out and teardown.

Watch the chaptered walkthrough on YouTube. The two-institution Directory setup and the ILL exchange are the most relevant chapters for OpenRS.

Multi-organisation ILL in one FOLIO tenant

Riverside and Parkside each have a managed Directory entry and a distinct ISIL symbol. Their ISO 18626 services point to the same local ILL instance. The test submits the borrowing request in Riverside’s staff context, switches to Parkside and checks that the incoming request has its own supplier record ID. There is no second FOLIO tenant in the fixture.

Parkside Library is selected in the ILL app, with a supplier-side request for The Atlas of Quiet Rivers.
The supplier record on a disposable local Foundry Workspace, 11 November 2026. The test checks the request handoff. Fulfilment and return are outside this recording.

We updated the Cypress workflow in platform-ill for the current app, replacing assumptions about separate Request and Supply apps in this scenario with the institution switcher. A separate Directory test creates, edits, reloads and deletes an entry. For the OpenRS founders group, the useful evidence here is the protocol handoff and its two independently scoped staff views. See the current ILL test source and the related OpenRS resource-sharing work.

For teams evaluating open-source ILL, check the licence of the version you plan to run. The ILL backend and staff UI builds shown here use the Functional Source License (FSL-1.1-ALv2). The Directory uses Apache 2.0. See the ILL backend licence, staff UI licence and Directory licence.

What the app tests now cover

App areaWhat passed
InventoryUpstream Cypress item search and reset, plus the upstream Karate test for reciprocal preceding and succeeding title links.
Agreements and LicensesUpstream smoke checks, record creation in both apps, and a controlling license linked through the native API and verified in the Agreements UI. The upstream picker scenario still needs the Find License plugin.
Open AccessThe upstream form smoke check and a new test that saves a publication request, checks its native Service Interaction number and reloads it.
Serials ManagementThe upstream page smoke check, the native form with its purchase-order line section, and a readback of an API-created active serial.
ILL and ILL DirectoryThe same-tenant, two-institution ISO 18626 handoff and the independent Directory record lifecycle.

Our first priority was the K-Int apps, especially ILL and Directory. The plan is to bring in the applicable upstream suites for every app. We kept the upstream assertions where we could and adapted login and shell-specific selectors for Foundry. The evidence identifies the Foundry-specific workflows alongside the upstream cases. Download the run summary and version evidence.

Reproducing the run when you install FOLIO LSP

For teams evaluating FOLIO hosting or planning to self-host FOLIO LSP, this is a way to test a specific installation against the same cases. On a prepared Foundry developer host, bin/qualify-folio takes a release channel and a set of workflow packs. It verifies and freezes the signed release, provisions a disposable Workspace, runs the tests and checks teardown. The runner writes JSON, JUnit and browser recordings. Video assembly uses those outputs separately.

bin/qualify-folio --channel snapshot \
  --pack inventory --pack agreements --pack licenses \
  --pack open-access --pack serials --pack ill --pack ill-directory \
  --record-session \
  --search-engine localhost/foundry-native-indexing-engine:local \
  --output work/foundry-folio-checkin

The run needs the prepared Podman host, the runner’s pinned test sources and a qualified local Search image. The output directory must be new. This run peaked at 14.41 GiB of sampled Compose memory and left at least 28.52 GiB available on the host. Those are observations from this fixture. See the runner prerequisites and inputs and our previous Foundry check-in.

We plan to publish these runs regularly for different Foundry release channels. Each report will name the exact signed release, upstream test revisions and cases that ran. That gives teams repeatable evidence of wire compatibility with the FOLIO test suite for the interfaces and workflows exercised, and a way to see coverage grow from one release to the next.