foundry

A first look at Foundry: FOLIO Licenses without Okapi

  • foundry
  • folio
  • erm
  • microservices
  • licenses
  • okapi

Foundry has reached the point where it is useful to look at it as a running thing, not just an architecture sketch.

The increment is deliberately narrow: a FOLIO application, mod-licenses on the back end and ui-licenses on the front end, rendered in a completely standalone environment. This is not Okapi. It is not Eureka. It is a small, self-contained “just licenses” application that lets us test what independently deployable FOLIO services might feel like in practice.

Why this matters

FOLIO has long had the language of independently deployable microservices, but in practice an individual module often travels with a lot of surrounding platform. Even a focused app can need supporting services for things like settings, tags, tenant context, authentication, and UI composition before it becomes usable.

This experiment asks a more direct question: what would it take to run one coherent FOLIO capability on its own?

For Licenses, the answer is beginning to look like a smaller harbour around the module rather than a full platform deployment. The back-end support scaffold provides enough shape for mod-licenses to run without dragging in a broad set of non-domain utilities. Authentication is handled through Zitadel. The front end is loaded by an app shell, not built into it.

That distinction is important. Foundry is not only showing a familiar FOLIO screen in a different place. It is testing whether the boundaries around a module can become operational boundaries too.

The shell and the app

On the front end, the shell is responsible for tenant-level rendering, tenant resolution, and application loading. ui-licenses is wrapped and published independently as a single module, then loaded dynamically by the shell at runtime.

That removes a common source of cost in multi-tenant front-end delivery. Instead of minting and publishing a fresh front-end bundle every time a tenant configuration changes, the service can be deployed once and reused. Tenant branding, available modules, and module versions can be resolved from configuration.

Virtual or wildcard domains make this feel natural. A tenant-specific hostname can map to tenant-specific configuration while still using the same deployed shell. The shell decides what the tenant should see and which application module version should be loaded.

The Lattice home page running in Foundry.
The Lattice home page: the tenant-specific entry point is rendered by the standalone shell.

The app launcher is where the composition becomes visible. Licenses is not statically baked into the shell bundle. It is an available app for this tenant, resolved and loaded by the shell.

The Lattice app launcher showing Licenses as an available application.
The launcher: applications are tenant-level capabilities, not compile-time shell decisions.

Licenses, but lighter

The point of using Licenses is not that Licenses itself is new. The point is that a recognisable FOLIO workflow is running without the usual platform envelope.

The search page is the first proof that this is more than a landing page. It is a real module screen, backed by mod-licenses, presented inside a shell that has no build-time dependency on the Licenses UI.

The Licenses search page running inside the Foundry app shell.
The Licenses search page: a familiar FOLIO workflow running in the standalone environment.

The new license flow extends that proof into write-side application behaviour. It gives us a better test of authentication, tenant context, module wiring, and the supporting scaffold around the back-end service.

The new license form running inside the standalone Licenses app.
The new license screen: the app is not just visible, it is exercising real workflow surface.

What this changes

Foundry gives us a place to explore FOLIO applications as smaller, clearer units of deployment. A module can have enough surrounding infrastructure to be useful without being forced back into a large shared runtime. A front-end app can be packaged independently and selected dynamically. Tenant configuration can change without triggering a new front-end build for every tenant.

That is the interesting part of this increment. It starts to make “independently deployable” less of a packaging aspiration and more of an operational design constraint.

There is still plenty to learn. The scaffold has to prove that it can support more than one module shape. Tenant configuration needs to stay understandable as options grow. The runtime contract between shell and app needs to remain boring enough that independently published front-end modules do not become a new source of coupling.

For now, though, Foundry has crossed a useful line: a real FOLIO app is running on its own, with its own back end, its own dynamically loaded front end, and a shell that can serve multiple tenants without becoming a tenant-specific build product.