Onomondo SoftSIM documentation
August 25, 2026 · View on GitHub
These pages document nrf-softsim, the nRF91 integration. They cover what the code
cannot tell you on its own: ordering constraints, hazards, and the reasons behind the
design. For option-by-option detail, read Kconfig and
lib/include/nrf_softsim.h — both are documented at the
source.
Two codebases make up the SoftSIM:
| Repository | Role |
|---|---|
| onomondo-uicc | The SIM. A portable, dependency-free C implementation of a SIM/UICC/USIM — APDU parser, smart-card filesystem, USIM authentication (MILENAGE), OTA remote file management. It knows nothing about Zephyr or Nordic hardware; it reaches the outside world through four port interfaces. Feature boundaries, specification coverage and host testing are documented in that repository. |
| nrf-softsim (this repository) | The nRF91 integration. A Zephyr module for the nRF Connect SDK that binds onomondo-uicc to the nRF91 modem, implements the port interfaces on Zephyr and TF-M, and ships a reference sample. |
The nRF91 modem firmware supports a software SIM: instead of driving the physical SIM interface it forwards SIM requests (reset, APDUs) through the Modem library's SoftSIM interface to the application core, where this module answers them using onomondo-uicc. That interface was developed in partnership with Nordic Semiconductor.
┌───────────────────────────────────────────────────────────────────────┐
│ Your application (Zephyr, NCS) │
├───────────────────────────────────────────────────────────────────────┤
│ nrf-softsim Zephyr module (this repo) │
│ · modem glue, work queue │
│ · ports: NVS fs + cache, PSA crypto, heap, logging │
├───────────────────────────────────────────────────────────────────────┤
│ onomondo-uicc portable SIM core │
│ · APDU/TLV codecs, UICC filesystem, USIM auth (MILENAGE), OTA (RFM) │
├───────────────────────────────────────────────────────────────────────┤
│ nrf_modem SoftSIM interface (nrfxlib) │
├───────────────────────────────────────────────────────────────────────┤
│ nRF91 modem core (cellular protocol) │
└───────────────────────────────────────────────────────────────────────┘
nrf-softsim is consumed as a regular west
module (zephyr/module.yml); its west.yml pins
the nRF Connect SDK version the release is validated against. onomondo-uicc is vendored
as a git submodule at lib/onomondo-uicc and built from source.
Pages
| Page | What it covers |
|---|---|
| Architecture | Request lifecycle, threading, boot flow, the NVS-backed filesystem, the security model, the port and source maps. |
| Integration | Adding the module to your application, the options worth commenting on, flash partitioning, the filesystem template, resources and coexistence, adapting to your own board. |
| Provisioning | Profile format, delivery, the on-device flow, key storage, re-provisioning. |
Just want it running? The top-level README is the quick path.
Supported hardware
nRF91 series (nRF9151, nRF9160, nRF9161) on the non-secure (*/ns) build targets —
TF-M is required for key storage. Validated board overlays ship for the nRF9151 DK,
nRF9160 DK, nRF9161 DK, Thingy:91 and Thingy:91 X.