One thing to note here is the traditional model is: Lorax(rpms) -> boot.iso ImageFactory(boot.iso, kickstart, rpms) -> cloud image With Atomic image composes there is an intermediate step: Lorax(rpms) -> boot.iso rpm-ostree(rpms, treefile) -> ostreerepo ImageFactory(boot.iso, kickstart, ostreerepo) -> cloud image The model is the ostreerepo can be consumed by clients in the same way that RPMs can, but it means there's another step.