FlwKit
Editor

Blocks

Every block type available in the FlwKit visual editor.

Blocks are the building blocks of screens. Each screen contains an ordered array of blocks rendered top-to-bottom. Interactive blocks (Choice, Text Input, Slider) record user answers under their key property — you receive these in FlwKitCompletionResult.answers when the flow completes.


Displays a title with an optional subtitle. Typically the first block on a screen.

PropertyTypeDefaultDescription
type"header"Block type.
titlestringPrimary headline text.
subtitlestringSecondary text below the title.
align"left" | "center" | "right""left"Title alignment.
colorstringtheme textPrimaryHex color for the title.
opacitynumber100Title opacity, 0–100.
fontWeight"normal" | "bold""bold"Title font weight.
fontStyle"normal" | "italic""normal"Title font style.
fontSizenumber24Title font size in pixels.
spacingnumberLetter spacing in pixels.
subtitleColorstringtheme textSecondaryHex color for the subtitle.
subtitleOpacitynumber100Subtitle opacity, 0–100.
subtitleFontSizenumber16Subtitle font size in pixels.
subtitleAlign"left" | "center" | "right"inherits alignSubtitle alignment.
subtitleSpacingnumber0Subtitle letter spacing in pixels.
{
  "type": "header",
  "title": "Welcome to the app",
  "subtitle": "Let's get you set up in 2 minutes.",
  "align": "center",
  "fontSize": 28
}

Description

A block of body text. Use it for explanatory copy between other blocks.

PropertyTypeDefaultDescription
type"description"Block type.
textstringBody text to display.
align"left" | "center" | "right""left"Text alignment.
colorstringtheme textSecondaryHex color.
opacitynumber100Opacity, 0–100.
fontWeight"normal" | "bold""normal"Font weight.
fontStyle"normal" | "italic""normal"Font style.
fontSizenumber16Font size in pixels.
spacingnumber0Letter spacing in pixels.
{
  "type": "description",
  "text": "FlwKit lets you update onboarding flows without shipping a new app version.",
  "align": "center"
}

Media

Displays an image or video asset. The backend resolves asset IDs to public URLs before serving the flow.

PropertyTypeDefaultDescription
type"media"Block type.
urlstringResolved public URL of the asset. Set by the backend.
video_urlstringURL of a video asset.
aspect"square" | "wide" | "tall"Aspect ratio preset.
align"left" | "center" | "right""center"Horizontal alignment.
widthnumber | "auto" | string"auto"Width in pixels, "auto", or a percentage like "100%".
heightnumberHeight in pixels.
borderRadiusnumberCorner radius in pixels.
padding{ vertical, horizontal }Internal padding in pixels.
margin{ top, bottom, left, right }External margin in pixels.
{
  "type": "media",
  "url": "https://assets.flwkit.com/your-image.png",
  "aspect": "wide",
  "borderRadius": 12
}

Choice

A list of selectable options. Supports single-select and multi-select. Records the selected label(s) under the block's key.

PropertyTypeDefaultDescription
type"choice"Block type.
keystringRequired. Answer key in FlwKitCompletionResult.answers.
optionsChoiceOption[]Required. List of options to display.
multiplebooleanfalseAllow selecting more than one option.
backgroundColorstringUnselected option background (hex).
activeBackgroundColorstringSelected option background (hex).
borderColorstringOption border color (hex).
borderWidthnumberBorder width in pixels.
borderRadiusnumberCorner radius in pixels.
heightnumberOption row height in pixels.
colorstringtheme textPrimaryOption label text color (hex).

ChoiceOption

PropertyTypeDescription
labelstringDisplay text shown to the user.
valuestringInternal value (mapped to label in completion result).
emojistringEmoji shown alongside the label.
action"next" | "back" | "skip" | "close" | "submit"Per-option navigation action on selection.

answers["goal"] in FlwKitCompletionResult contains the option label (e.g. "Lose weight"), not the raw value ("lose_weight").

{
  "type": "choice",
  "key": "goal",
  "options": [
    { "label": "Lose weight", "value": "lose_weight", "emoji": "🏃" },
    { "label": "Build muscle", "value": "build_muscle", "emoji": "💪" },
    { "label": "Improve flexibility", "value": "flexibility", "emoji": "🧘" }
  ]
}

Text Input

A single-line text field. Records entered text under the block's key.

PropertyTypeDefaultDescription
type"text_input"Block type.
keystringRequired. Answer key.
placeholderstringPlaceholder text.
input_typestringKeyboard type hint, e.g. "email" or "number".
requiredbooleanfalsePrevent advancing until the field is filled.
backgroundColorstringInput field background (hex).
borderColorstringBorder color (hex).
borderWidthnumberBorder width in pixels.
borderRadiusnumberCorner radius in pixels.
heightnumberInput height in pixels.
colorstringtheme textPrimaryText color (hex).
{
  "type": "text_input",
  "key": "name",
  "placeholder": "Your first name",
  "required": true
}

Slider

A horizontal numeric slider. Records the selected value under the block's key.

PropertyTypeDefaultDescription
type"slider"Block type.
keystringRequired. Answer key.
minnumberMinimum value.
maxnumberMaximum value.
stepnumberStep increment.
default_valuenumberInitial slider position.
{
  "type": "slider",
  "key": "age",
  "min": 18,
  "max": 80,
  "step": 1,
  "default_value": 30
}

Benefits List

An icon-labeled list of benefit items. Use it for feature highlights or value propositions.

PropertyTypeDefaultDescription
type"benefits_list"Block type.
items{ text: string }[]List items.
iconstringLucide icon name applied to all items, e.g. "Check".
iconColorstringtheme primaryIcon color (hex).
iconSizenumber16Icon size in pixels (8–64).
colorstringtheme textPrimaryItem text color (hex).
fontSizenumberItem text size in pixels.
{
  "type": "benefits_list",
  "icon": "Check",
  "iconColor": "#6EBA81",
  "items": [
    { "text": "Personalized workout plans" },
    { "text": "Progress tracking" },
    { "text": "Expert coaching" }
  ]
}

Testimonial

A customer quote with attribution. Use it to build social proof.

PropertyTypeDefaultDescription
type"testimonial"Block type.
quotestringTestimonial text.
authorstringName of the person quoted.
metastringAdditional context, e.g. job title or review source.
backgroundColorstringtheme surfaceCard background (hex).
borderRadiusnumberCorner radius in pixels.
colorstringtheme textPrimaryQuote text color (hex).
{
  "type": "testimonial",
  "quote": "I lost 12 pounds in the first month. Best app I've ever used.",
  "author": "Sarah M.",
  "meta": "Verified user"
}

CTA

One or two action buttons. CTA buttons drive navigation between screens and mark flows as complete. Sticky by default.

PropertyTypeDefaultDescription
type"cta"Block type.
primaryCTAActionPrimary (main) button.
secondaryCTAActionSecondary button below the primary.
stickybooleantrueAttach to the bottom of the screen.
heightnumberButton height in pixels.
backgroundColorstringtheme primaryPrimary button background (hex).
borderRadiusnumberButton corner radius in pixels.

CTAAction

PropertyTypeDescription
labelstringButton label text.
action"next" | "back" | "skip" | "close" | "complete"Navigation action on tap. Use "complete" to end the flow and fire onComplete.
targetstringScreen ID to navigate to directly, bypassing sequential order.
{
  "type": "cta",
  "primary": { "label": "Continue", "action": "next" },
  "secondary": { "label": "Skip for now", "action": "skip" }
}

Progress Bar

A horizontal progress indicator. Progress is calculated from the user's current screen index relative to total screens.

PropertyTypeDefaultDescription
type"progress_bar"Block type.
fillColorstringtheme primaryFilled portion color (hex).
fillOpacitynumber100Fill opacity, 0–100.
backgroundColorstringtheme surfaceTrack background (hex).
borderRadiusnumberCorner radius in pixels.
heightnumberBar height in pixels.
{
  "type": "progress_bar",
  "fillColor": "#6EBA81",
  "height": 8,
  "borderRadius": 4
}

Personalization

A timed sequence of text strings that cycle automatically. Use it to enumerate personalized benefits while the user waits.

PropertyTypeDefaultDescription
type"personalization"Block type.
itemsPersonalizationItem[]Required. Ordered items to cycle through.
keystringOptional answer key to record which item was last shown.

PersonalizationItem

PropertyTypeDescription
textstringText to display.
durationMsnumberDisplay duration in milliseconds (500–60,000).
{
  "type": "personalization",
  "items": [
    { "text": "Analyzing your goals...", "durationMs": 1500 },
    { "text": "Building your plan...", "durationMs": 1500 },
    { "text": "Almost ready!", "durationMs": 1000 }
  ]
}

Spacer

Inserts vertical whitespace between blocks.

PropertyTypeDefaultDescription
type"spacer"Block type.
size"xs" | "sm" | "md" | "lg" | "xl"Token-based size.
heightnumberExact height in pixels. Takes precedence over size.
{ "type": "spacer", "size": "md" }

Small text at the bottom of a screen. Rendered at 12px, centered, in the theme's textSecondary color.

PropertyTypeDescription
type"footer"Block type.
textstringFooter text.
{
  "type": "footer",
  "text": "By continuing you agree to our Terms of Service and Privacy Policy."
}

On this page