light, dark,
minimal, rounded — and a deep token system so you can override
anything down to the corner radius of a button.
You can also style surveys without touching code using the
Brand Kit in the dashboard. The SDK applies the
Brand Kit on top of the base preset, then applies any
init() overrides on
top of that — so code always wins over the dashboard:base preset → Brand Kit (dashboard) → init() overridesTheming controls colours, type, and shape. To change the modal’s text
(buttons, placeholders, NPS anchors, progress counter), see
Labels.
Pick a preset
Override tokens
Passoverrides to deep-merge on top of a preset. Only the keys you
provide are changed.
Full token map
Custom fonts
Dark mode & auto appearance
The dashboard Brand Kit has an Appearance setting —light, dark, or auto — delivered to the SDK as brandConfig.themeMode.
No code is required: the SDK resolves the right scheme per survey.
-
autofollows the device appearance via React Native’sAppearanceAPI. The provider subscribes toAppearance.addChangeListener, so if the user flips system dark mode while a survey is open, the modal re-themes live without closing.Appearance.getColorScheme()returns your app’s effective interface style, not the raw device toggle. If your app pins itself with Expo’suserInterfaceStyle(or a nativeoverrideUserInterfaceStyle),autofollows that pinned style. UseuserInterfaceStyle: "automatic"to follow the device, or drive the survey from your own in-app theme with theappearanceprop below. -
darkforces the SDKdarkpreset as the base;lightkeeps your configuredinit()preset. -
The Brand Kit ships two colour palettes (light and dark). The matching
one is mapped on top of the resolved base preset; any dark colour left unset
in the dashboard inherits the built-in
darkpreset token.
init() overrides still win over the Brand Kit:
resolved scheme preset → Brand Kit palette → init() overrides
So a project with themeMode: "auto" and no custom dark colours renders a
clean dark survey on dark devices automatically. Surveys with no Brand Kit (or
a kit that predates dark mode) default to light — no behaviour change.
Follow your app’s theme
When your app manages light/dark itself (a theme context, a user preference, etc.) rather than only the OS toggle,auto’s device detection can disagree
with what the user sees. Pass your app’s current appearance to
<InsitoProvider appearance> and themeMode: "auto" surveys follow it instead
of the device.
The prop only affects surveys whose Brand Kit
themeMode is auto; light /
dark Brand Kits always render their forced scheme. Updating the prop
re-themes an open survey live, and switching back to "system" resumes device
following.
Reading the resolved theme
If you want to extend Insito’s color system into the rest of your app (matching button colors, e.g.), readMicroSurvey.theme after
init:
Branding rules
components.showPoweredBytoggles the “Powered by Insito” badge. Resolution is: a per-surveyshowBrandingvalue from the server (when present) wins, otherwise the theme token applies (theminimalpreset defaults it tofalse). Plan-based branding enforcement happens server-side / in the dashboard, not as a client hard rule.- Keep colors WCAG AA-compliant — primary on background should hit 3:1 contrast minimum for usability. The default presets already pass.
modalMaxHeightFraction(default0.85) sets the sheet’s max height as a fraction of the screen. Keep it roughly within0.5–0.95for a usable sheet; the value is applied as-is (not clamped by the SDK).
Custom rendering (advanced)
If the built-in bottom sheet isn’t enough — say you want an inline survey embedded inside a screen — you can render your own UI:- Subscribe to
useInsito()to read theactiveSurveyreactively. - When
activeSurvey != null, render your custom UI fromactiveSurvey.questions. - Call
MicroSurvey.submitResponse(activeSurvey.surveyId, answers)when the user submits.
<InsitoProvider> is still required for the legacy modal
fallback. We’re tracking [INS-…] for a “headless mode” that drops the
provider entirely.