Config reference
Every key of the drop-in flow's config, with its type, default and allowed values.
The drop-in flow takes one config, the same on Flutter and the Web. Keys are snake_case in JSON; in code they follow the language (requireBack, buttonShape). Every key is optional. Unknown keys are ignored and invalid values fall back to the default, with a warning in debug builds. See Drop-in screens and config for how to use them.
flow
| Key | Type | Default | Values |
|---|---|---|---|
flow.steps |
list of strings | Flutter ["card", "selfie", "fingerprints"], Web ["card", "selfie"] |
card, selfie, fingerprints. The order is fixed; leave a step out to skip it. A selfie needs the card. The web skips fingerprints with a warning. |
flow.documents |
list of strings | ["nida", "driving_licence"] |
Which cards are accepted. Any other card ends on "Please use your …". |
flow.require_back |
string | "off" |
off; optional (the person may skip the back); required (no skip button). The step timeout still applies. |
flow.fingerprints.hand |
string | "ask" |
ask, right, left. Flutter only. |
engine
Applied when the flow creates its engine (DigidFlow.createEngine in Flutter; mountFlow without an engine of your own on the web). An engine you create yourself keeps its own settings, and debug builds warn when they differ.
| Key | Type | Default | Values |
|---|---|---|---|
engine.step_timeout_s |
number | 30 |
Seconds before a step carries on without its capture. A back not read in time is skipped and flagged. |
engine.expiry_policy |
string | "review" |
What an expired card or licence does to the verdict: review (the expiry check warns, the verdict is review), reject (it fails), ignore (no expiry check). The result screen tags an expired document "Expired" whatever the policy. |
engine.lock_frames |
integer | 2 |
Card reading consistency setting. Leave it at the default unless digid support advises a change. |
engine.face_threshold |
number or null |
null |
null uses the engine's built-in setting. Change it only on digid support's advice. |
The bare engine (without the drop-in flow) names the expiry policies fail, review and ignore, and defaults to ignore.
language and strings
| Key | Type | Default | Values |
|---|---|---|---|
language |
string | "auto" |
en, sw, auto (the app's or page's language, then the device's or browser's) |
language_switch |
boolean | true |
Shows the flow's own EN / SW control |
strings |
object | {"en": {}, "sw": {}} |
Text by string id, per language. Ids per SDK: STRING_IDS and DEFAULT_STRINGS (Web), FlowStrings (Flutter). |
theme
| Key | Type | Default | Values |
|---|---|---|---|
theme.mode |
string | "light" |
light, dark, system |
theme.colors.primary |
colour | #000000 |
The main button |
theme.colors.on_primary |
colour | #FFFFFF |
Text on the main button |
theme.colors.accent |
colour | #3F48FD |
Links, tags, toggles |
theme.colors.background |
colour | #F6F6F6 |
The page |
theme.colors.surface |
colour | #FFFFFF |
Cards and panels |
theme.colors.text |
colour | #000000 |
Body text |
theme.colors.muted |
colour | #5A5A5A |
Secondary text |
theme.colors.overlay |
colour | #010334 |
The camera's instruction box |
theme.colors.on_overlay |
colour | #FFFFFF |
Text in the instruction box |
theme.colors.frame |
colour | #FFFFFF |
Camera brackets and the selfie oval |
theme.colors.frame_ready |
colour | #22C55E |
The same, when the capture is ready |
theme.colors.success |
colour | #15803D |
Pass |
theme.colors.warning |
colour | #B45309 |
Needs review |
theme.colors.danger |
colour | #B42318 |
Fail |
theme.font_family |
string or null |
null |
A font your app bundles or your page loads. null: Inter in Flutter, the page's font on the web. |
theme.radius |
number | 24 |
Cards and panels, in logical pixels (CSS pixels on the web), 0 to 64 |
theme.button_shape |
string | "pill" |
pill, rounded, square |
Colours are hex: #RGB, #RRGGBB or #RRGGBBAA (alpha last). The defaults are the digid light palette; dark mode has its own. A colour you set applies in both modes.
branding
| Key | Type | Default | Values |
|---|---|---|---|
branding.logo |
string or null |
null |
Shown on the intro. Flutter: an asset path or an https:// URL. Web: an image URL; same-origin, data: or blob: keep the page offline. |
branding.powered_by |
boolean | true |
The "Verified with digid" line under the result |
screens
| Key | Type | Default | Values |
|---|---|---|---|
screens.intro.show |
boolean | true |
false starts the flow at the camera (on the web, as soon as it is mounted) |
screens.intro.title |
string or null |
null |
Replaces the intro's heading. Web: a string or { "en": …, "sw": … } |
screens.intro.body |
string or null |
null |
Replaces the intro's text, as title |
screens.consent.show |
boolean | false |
A checkbox the person must tick before the camera opens |
screens.consent.text |
string or null |
null |
The consent sentence; null uses the default |
screens.consent.link |
string or null |
null |
A link to your privacy notice (http(s) or relative on the web; opened through onOpenLink in Flutter) |
screens.result.show |
boolean | true |
false returns to your app as soon as the last step is done |
screens.result.fields |
list or null |
null |
The rows the result screen shows; null uses the defaults. See below. |
screens.result.download |
boolean | true |
Offers the document as a JSON file on the result screen, with no upload. Turn it off in production. |
screens.manual_capture_after_s |
number | 6 |
A shutter button appears on the card steps after this many seconds without a read; 0 never. Never on the selfie. |
screens.haptics |
boolean | true |
A short vibration when a step completes, where the device supports it |
Result fields. Web: name, nin, sex, date_of_birth, expiry_date, card_type, licence_number, reference_number, issue_date, categories, issuing_authority, residence, face, back, checks. Flutter: name, nin, date_of_birth, sex, card_type, licence_number, reference_number, issue_date, expiry_date, categories, issuing_authority, residence, selfie, card_back, fingerprints. A field the card does not have is skipped.
Options outside the config
These are arguments of the flow call, not config keys.
Flutter, DigidFlow.start and DigidFlowView: engine (required), config, fingerEngine, licence, onStepChanged, onCompleted, onCancelled, onError, onLanguageChanged, onEvent, onOpenLink, navigatorObservers.
Web, mountFlow(element, options): config, models (default "models/"), preload ("card", "all" or "none"), licence, nida or engine (an engine you created), wasm, workerUrl, debug, headingLevel (default 2), injectStyles (default true), onStep, onComplete, onCancel, onError.