KODULAR
// Complete Reference — Dark Neon Edition //
200+ Components 10 Block Categories 15 Component Groups API 21+ Android
System Overview
Kodular is a no-code Android app builder using a visual drag-and-drop designer + event-driven block programming. Design on a phone canvas, write logic as visual blocks, export a real signed APK.
200+
Total Components
17
Sensor Types
23
Ad Network Formats
10
Block Categories
12
Google Components
15
LEGO MINDSTORMS
creator.kodular.io

The main web IDE — drag components onto a phone canvas, then wire logic with blocks. No install required.

my.kodular.io

Control panel for managing projects, account settings, and app data.

community.kodular.io

Forums for help, bug reports, extensions, and ideas.

status.kodular.io

Live health check for all Kodular services and servers.

Every app is made of Screens (pages), Components (UI + logic), and Blocks (event-driven code). Design in the visual Designer, then write logic in the Blocks editor. Test live on a device over WiFi or USB via the Kodular Companion app. Export as a signed APK from the Build menu.

User Interface (21) Layout (15) Media (15) Sensors (17) Social (10) Storage (6) Utilities (14) Dynamic (6) Connectivity (10) Google (12) Monetization (23) LEGO MINDSTORMS (15) Experimental (5) Drawing & Animation (5) Maps (8)
Control Logic Math Text Lists Dictionaries Colors Variables Procedures Any Component
Screen Component
Root container of every app view. Think of an app as a book — each Screen is a page. All other components live inside a Screen. Requires API 21 (Android 5.0+).
EVENT Initialize

Fires when the screen first loads. Use this to set default values, load data, and configure state on startup.

when Screen1.Initialize
  set Label1.Text to "App Ready"
  call TinyDB1.GetValue
    tag: "username"
    valueIfTagNotThere: ""
EVENT Back Pressed

Fires when the device hardware back button is pressed. Override here to prevent closing or show a confirm dialog.

when Screen1.BackPressed
  call Notifier1.ShowChooseDialog
    message: "Exit app?"
    title: "Confirm"
    button1Text: "Yes"
    button2Text: "No"
EVENT Error Occurred

Fires on runtime errors. Params: component, functionName, errorNumber, message. Replace default system error handling.

when Screen1.ErrorOccurred
    component  functionName
    errorNumber  message
  call Notifier1.ShowAlert
    notice: join "Error: " message
EVENT Got Received Shared

Fires when another app shares content to this app. type: 0=none, 1=audio, 2=image, 3=text, 4=video. value=content.

when Screen1.GotReceivedShared
    type  value
  if type = 3  // text
    set Label1.Text to value
EVENT Keyboard Visibility Changed

Fires when keyboard shows/hides. Param: isKeyboardVisible (Boolean). Does not work in split-screen or floating mode.

when Screen1.KeyboardVisibilityChanged
    isKeyboardVisible
  if isKeyboardVisible
    set Button1.Visible to false
  else
    set Button1.Visible to true
EVENT Menu Initialize

Fires when the options menu loads. Add TitleBar icons and menu items inside this event, not elsewhere.

when Screen1.MenuInitialize
  call Screen1.AddTitleBarIcon
    icon: "search"
    name: "Search"
  call Screen1.AddMenuItem
    menuItem: make a list "Settings" "About"
EVENT Menu Item Selected

Fires when the user picks an overflow menu item. Param: menuItem (Text). Use an if/else to handle each item.

when Screen1.MenuItemSelected
    menuItem
  if menuItem = "Settings"
    open another screen "SettingsScreen"
EVENT On App Pause

First signal the user is leaving (but app not destroyed). Save state here. Maps to Android Activity.onPause().

when Screen1.OnAppPause
  call TinyDB1.StoreValue
    tag: "lastSeen"
    valueToStore: call Clock1.Now
EVENT On App Resume

Activity comes to foreground. Refresh UI or resume timers. Maps to Android Activity.onResume().

when Screen1.OnAppResume
  set Clock1.TimerEnabled to true
  call FirebaseDB1.GetValue
    tag: "feed"
EVENT On App Stop

App is no longer visible. Maps to Activity.onStop(). Heavy cleanup should happen here.

when Screen1.OnAppStop
  set Clock1.TimerEnabled to false
  set Player1.Source to ""
EVENT Other Screen Closed

Fires when a child screen returns. Params: otherScreenName (Text), result (Any — the return value).

when Screen1.OtherScreenClosed
    otherScreenName  result
  if otherScreenName = "ProfileScreen"
    set Label1.Text to result
EVENT Permission Denied / Granted

Fires after AskForPermission is called. Denied: component, functionName, permissionName. Granted: permissionName.

when Screen1.PermissionGranted
    permissionName
  call Camera1.TakePicture

when Screen1.PermissionDenied
    component functionName permissionName
  call Screen1.OpenAppSettings
EVENT Screen Orientation Changed

Fires whenever the device rotates between portrait and landscape. No params — read current orientation from property.

when Screen1.ScreenOrientationChanged
  set Label1.Text to
    Screen1.ScreenOrientation
EVENT Side Menu Opened / Closed

Fires when the side drawer opens or closes. Use to trigger animations or update content.

when Screen1.SideMenuOpened
  call AnimationUtil1.Animate
    view: MenuLayout
    animation: "fadein"
EVENT Title Bar Back Button Clicked

Fires when the back arrow in the app bar is tapped. Separate from the device back button event.

when Screen1.TitleBarBackButtonClicked
  close screen
EVENT Title Bar Icon Selected

Fires when an action icon in the title bar is tapped. Params: icon (icon name string), name (display label).

when Screen1.TitleBarIconSelected
    icon  name
  if name = "Search"
    set SearchBox.Visible to true
METHOD Ask For Permission

Triggers Android's runtime permission dialog for dangerous permissions. Param: permissionName (e.g. android.permission.CAMERA).

call Screen1.AskForPermission
  permissionName:
    "android.permission.CAMERA"
METHOD Are Permissions Granted

Returns Boolean — true only if ALL required permissions for the app have been granted by the user.

if call Screen1.ArePermissionsGranted
  call Camera1.TakePicture
else
  call Screen1.AskForPermission
    permissionName: "android.permission.CAMERA"
METHOD Add Menu Item

Adds items to the overflow menu. Pass a list of text strings using the "make a list" block.

// inside MenuInitialize event:
call Screen1.AddMenuItem
  menuItem: make a list
    "Settings" "Share" "About"
METHOD Add Menu Item With Icon

Adds a menu item with a Material icon on the left side. Params: menuItem (Text), menuIcon (Material icon name).

call Screen1.AddMenuItemWithIcon
  menuItem: "Settings"
  menuIcon: "settings"
METHOD Add Title Bar Icon

Adds an action icon to the app bar. Params: icon (Material icon name), name (tooltip text). Call in Menu Initialize event.

// in MenuInitialize event:
call Screen1.AddTitleBarIcon
  icon: "search"
  name: "Search"
METHOD Side Menu

Creates the side drawer. Pass a layout component (e.g. VerticalArrangement) as the drawer content. Removes that layout from the screen.

call Screen1.SideMenu
  layout: VerticalArrangement1
METHOD Side Menu Open / Close

Programmatically open or close the side drawer. Useful for hamburger button clicks.

when HamburgerBtn.Click
  call Screen1.SideMenuOpen

when CloseBtn.Click
  call Screen1.SideMenuClose
METHOD Lock / Unlock Side Menu

Lock prevents users from swiping the drawer open. Unlock re-enables swipe gesture.

// lock during a modal flow:
call Screen1.LockSideMenu
// re-enable later:
call Screen1.UnlockSideMenu
METHOD Remove Side Menu

Destroys the current side menu. Useful before recreating it dynamically with updated content.

call Screen1.RemoveSideMenu
// then recreate with new layout:
call Screen1.SideMenu
  layout: UpdatedMenuLayout
METHOD Show / Hide Keyboard

Programmatically show or hide the Android soft keyboard.

call Screen1.ShowKeyboard
// focus a TextBox first:
set TextBox1.Focused to true

call Screen1.HideKeyboard
METHOD Move Task To Back

Minimizes the app (like pressing Home) without destroying it.

when BackButton.Click
  call Screen1.MoveTaskToBack
METHOD Open App Settings

Opens this app's system settings page. Direct users here to grant permissions manually after denial.

when Screen1.PermissionDenied
    component functionName permissionName
  call Screen1.OpenAppSettings
METHOD Task Description

Sets the label and accent color shown in the Android Recents (recent apps) screen. Params: text, color.

call Screen1.TaskDescription
  text: "My App — Home"
  color: make color [63,81,181]
METHOD Version Code / Version Name

Returns the app's version code (integer) and version name (string) as set in Screen properties.

set Label1.Text to join
  "v"
  call Screen1.VersionName
  " ("
  call Screen1.VersionCode ")"
METHOD Show About Application

Manually triggers the About This Application dialog defined in Screen properties.

when AboutBtn.Click
  call Screen1.ShowAboutApplication
METHOD Remove Title Bar Icons

Removes all action icons currently added to the title bar. Useful when rebuilding the toolbar.

call Screen1.RemoveTitleBarIcons
// then add fresh icons:
call Screen1.AddTitleBarIcon
  icon: "edit"  name: "Edit"
PROP Theme

Sets the Material Design theme. Options: AppTheme, AppTheme.Dark, AppTheme.Light. Set in designer only.

PROP Primary Color / Dark / Accent

Three color slots used across Material UI elements like the ActionBar, FABs, and highlights.

PROP Title / Title Bar Color / Subtitle

App bar title text, background color, and optional subtitle below the main title.

PROP Screen Orientation

portrait, landscape, sensor, user, or unspecified. Can be changed at runtime from blocks.

PROP Scrollable

If true, the screen scrolls vertically. If false, content is constrained to device height.

PROP Status Bar / Navigation Bar Color

Custom colors for the top status bar and bottom nav bar. Works from API 21+.

PROP Show Status / Navigation Bar

Toggle visibility. Hiding both bars gives a full immersive (kiosk-style) experience.

PROP Splash Screen / Splash Image

Show a loading screen while the app initializes. Set a custom image asset for the splash.

PROP Open / Close Screen Animation

Transition animations: default, fade, zoom, slidehorizontal, slidevertical, none.

PROP Package Name

Android package ID (e.g. com.myapp.hello). 8–35 chars, 3–5 dot-separated words, ASCII only.

PROP Version Code / Name

Integer version code (must increment for Play Store) and string version name (e.g. "2.1.0").

PROP RTL Support

Enables right-to-left layout mirroring for Arabic, Hebrew, Urdu, etc. Set on Screen 1.

PROP Sizing

Responsive (uses actual device resolution) or Fixed (designed for one size, auto-scaled).

PROP Keep Screen On

Prevents the device display from turning off while the app is in use. Advanced property.

PROP High Quality Images

When true, images are loaded at full quality. May increase memory usage on older devices.

PROP Minimum SDK Level

Minimum Android API required to install. Default 21 (Android 5.0). Advanced property.

User Interface (21)
All visual widgets the user directly interacts with. Each component has Events, Methods, and Properties.
UI Button

Clickable button with text and optional icon. Events: Click, Long Click, Touch Down, Touch Up. Properties: text, color, font, shape, image, enabled.

when Button1.Click
  set Button1.Text to "Clicked!"
  set Button1.BackgroundColor
    to make color [57,255,20]
UI Label

Non-editable text display. Supports HTML formatting, custom fonts, size, bold/italic, color. Good for headings and static text.

set Label1.Text to "Hello World"
set Label1.FontSize to 20
set Label1.FontBold to true
set Label1.TextColor
  to make color [0,245,255]
UI Text Box

Single or multi-line text input. Properties: hint, input type (numeric/email/password), keyboard type, read-only. Events: Before Text Changed, Got Focus, Lost Focus.

when Button1.Click
  set Label1.Text to
    TextBox1.Text
  call TextBox1.RequestFocus
UI Image

Displays an image from assets, SD card, or URL. Properties: scale to fit, rotation angle, clickable. Supports GIF, PNG, JPG, WebP.

set Image1.Picture to
  "https://example.com/img.png"
set Image1.RotationAngle to 45
set Image1.ScalePictureToFit
  to true
UI Checkbox

Boolean toggle checkbox. Event: Changed. Properties: checked state, text label, text/box color.

when CheckBox1.Changed
  if CheckBox1.Checked
    set Label1.Text to "ON"
  else
    set Label1.Text to "OFF"
UI Switch

Material Design on/off toggle. Event: Changed. Styleable thumb and track colors for brand consistency.

when Switch1.Changed
  set Screen1.BackgroundColor
    to if Switch1.On
       then make color [2,4,8]
       else make color [255,255,255]
UI Radio Button

Single-selection button used in groups. Event: Clicked. Linked via RadioGroup for mutual exclusion between options.

when RadioButton1.Click
  set Label1.Text to
    RadioButton1.Text
// only one in group selected at once
UI Slider

Horizontal drag slider. Properties: min value, max value, thumb position, thumb and track color. Event: Position Changed (returns current value).

when Slider1.PositionChanged
    thumbPosition
  set Label1.Text to
    round thumbPosition
  set Image1.Width to thumbPosition
UI Rating Bar

Star-based rating input. Properties: number of stars, step size (full/half), current rating. Event: Rating Changed.

when RatingBar1.RatingChanged
    rating
  set Label1.Text to
    join "Rating: " rating " / 5"
UI Spinner

Drop-down selector. Properties: items list, prompt text, selection. Event: After Selecting (returns selected item text).

set Spinner1.Elements
  to make a list
    "Option A" "Option B" "Option C"

when Spinner1.AfterSelecting
    selection
  set Label1.Text to selection
UI List Picker

Opens a full-screen list dialog for selection. Properties: elements (list or CSV), title, selection. Events: After Picking, Before Picking.

set ListPicker1.Elements
  to make a list
    "Red" "Green" "Blue"

when ListPicker1.AfterPicking
  set Label1.Text
    to ListPicker1.Selection
UI Date Picker

Shows Android system date picker dialog. Returns year, month, day properties. Event: After Date Set. Method: LaunchPicker.

when DatePicker1.AfterDateSet
  set Label1.Text to join
    DatePicker1.Year "/"
    DatePicker1.Month "/"
    DatePicker1.Day
UI Time Picker

Shows system time picker dialog. Returns Hour and Minute properties. Event: After Time Set. Method: LaunchPicker.

when TimePicker1.AfterTimeSet
  set Label1.Text to join
    TimePicker1.Hour ":"
    TimePicker1.Minute
UI Notifier

Dialogs and toasts: ShowAlert, ShowChooseDialog, ShowMessageDialog, ShowTextDialog, ShowProgressDialog, DismissProgressDialog, ShowToast, ShowCustomDialog.

call Notifier1.ShowChooseDialog
  message: "Delete this item?"
  title: "Confirm"
  button1Text: "Delete"
  button2Text: "Cancel"
  cancelable: true

when Notifier1.AfterChoosing
    choice
  if choice = "Delete"
    // delete logic here
UI Snackbar

Material Design bottom notification bar with optional action button. Properties: text, action text, text/background color, duration.

call Snackbar1.Show
  message: "Item saved!"
  duration: 3000
  actionName: "UNDO"
  actionColor:
    make color [0,245,255]
UI Floating Action Button

Circular Material Design button (typically bottom-right corner). Properties: icon, background color, mini size. Event: Click.

set FloatingActionButton1.Icon
  to "add"
set FloatingActionButton1.BackgroundColor
  to make color [57,255,20]
when FloatingActionButton1.Click
  // open new item form
UI Linear Progressbar

Horizontal progress bar. Properties: value (0–100), color, indeterminate mode, animation. Method: SetProgress.

set LinearProgressbar1.Value
  to 75
set LinearProgressbar1.Color
  to make color [0,245,255]
set LinearProgressbar1.Indeterminate
  to false
UI Circular Progress

Ring-shaped progress indicator. Properties: progress value, max, ring color, width. Useful for percentage displays.

set CircularProgress1.Value
  to 60
set CircularProgress1.Max
  to 100
set CircularProgress1.Color
  to make color [191,0,255]
UI Custom Progress

Fully customizable progress bar with custom drawable or animated asset resources.

set CustomProgress1.Value
  to 50
set CustomProgress1.Drawable
  to "my_progress_bar.xml"
UI State Progress Bar

Step-by-step multi-stage progress indicator (e.g. step 1 of 4). Shows states as labeled steps or dots. Ideal for wizards.

set StateProgressBar1.MaxStateNumber
  to 4
set StateProgressBar1.CurrentStateNumber
  to 2
// shows user is on step 2 of 4
UI Spotlight

Highlights a specific component with a darkened overlay for user onboarding tours. Properties: target component, title, description text.

call Spotlight1.Show
  x: Button1.Left
  y: Button1.Top
  title: "Tap here to start"
  description: "Press this button"
Layout (15)
Containers and navigation structures that organize how components are positioned on screen.
LAYOUT Horizontal Arrangement

Lays child components side by side in a row. Properties: width, height, align horizontal/vertical, background color, padding, image.

LAYOUT Vertical Arrangement

Stacks child components in a column top to bottom. Same alignment and style properties as horizontal.

LAYOUT Horizontal Scroll Arrangement

Horizontal arrangement with overflow scrolling — ideal for carousels of cards or horizontal item lists.

LAYOUT Vertical Scroll Arrangement

Vertical arrangement with a vertical scrollbar for long content that exceeds screen height.

LAYOUT Table Arrangement

Grid of rows and columns. Specify column and row count. Good for form-like or data-grid layouts.

LAYOUT Card View

Material Design card container with elevation shadow. Properties: corner radius, elevation, full-clickable, stroke color and width.

LAYOUT Grid View

Scrollable grid of items. Specify column count; items auto-fill rows. Similar to Android's native GridView widget.

LAYOUT Space

Invisible spacer component. Set width and height to create gaps or push components apart.

LAYOUT Swipe Refresh Layout

Wraps a layout and adds pull-to-refresh gesture support. Event: Refresh. Method: Stop Refreshing.

LAYOUT List View

Scrollable list of text items. Properties: elements list, text color, background, selection color. Event: After Picking (returns selection).

LAYOUT List View Image and Text

List with a thumbnail image + primary title + secondary subtitle per row. Pass image paths and text as parallel lists.

LAYOUT Bottom Sheet

Slides up from the screen bottom as a panel. Methods: Show, Hide. Wrap any layout inside as content.

LAYOUT Chat View

Ready-made chat UI with message bubbles (sent/received), timestamps, and user avatars. Method: AddMessage.

LAYOUT Gallery Viewer

Full-screen swipeable image gallery. Pass a list of image URLs or local file paths.

LAYOUT View Flipper

Flips between multiple child views with animation. Methods: ShowNext, ShowPrevious. Simple carousel for onboarding slides.

LAYOUT Surface View

Low-level drawing surface for Canvas or video rendering. Used in advanced custom drawing and game scenarios.

LAYOUT Web Viewer

Embedded browser (WebView). Methods: GoToURL, GoBack, GoForward, LoadHTML, EvaluateJavaScript. Events: Page Loaded, Got Web View String.

LAYOUT Bottom Navigation

Android-style bottom tab bar with icons and labels. Up to 5 tabs. Event: Tab Item Selected (returns tab ID).

LAYOUT Tab Layout

Top tab bar with swipeable screens (used with View Pager). Properties: tab color, indicator color, text color.

LAYOUT View Pager

Swipeable page container that syncs with Tab Layout. Pages are added programmatically.

LAYOUT Side Menu Layout

Pre-built drawer/side menu layout component. Works differently from Screen's Side Menu method — is itself the drawer container.

Media (15)
Capture, playback, recognition, translation, QR/barcode, and OCR across audio, video, and image.
MEDIA Camera

Capture photos with the device camera. Method: TakePicture. Event: After Picture Taken (returns file path to captured image).

when CaptureBtn.Click
  call Camera1.TakePicture

when Camera1.AfterPictureTaken
    image
  set Image1.Picture to image
MEDIA Camcorder

Record video clips. Method: RecordVideo. Event: After Recording (returns file path to video file).

when RecordBtn.Click
  call Camcorder1.RecordVideo

when Camcorder1.AfterRecording
    clip
  set VideoPlayer1.Source
    to clip
MEDIA Image Picker

Opens device gallery to pick an image. Event: After Picking (returns image URI for use in Image component).

when PickBtn.Click
  call ImagePicker1.Open

when ImagePicker1.AfterPicking
  set Image1.Picture
    to ImagePicker1.Selection
MEDIA Audio Picker

Picks an audio file from device storage. Event: After Picking (returns file path).

when AudioPicker1.AfterPicking
  set Player1.Source
    to AudioPicker1.Selection
  call Player1.Start
MEDIA Video Picker

Picks a video from device gallery or storage. Event: After Picking (returns URI). Usable with Video Player.

when VideoPicker1.AfterPicking
  set VideoPlayer1.Source
    to VideoPicker1.Selection
  call VideoPlayer1.Start
MEDIA Player

Full-featured audio player. Methods: Start, Pause, Stop, SeekTo, Loop. Properties: Source (file or URL). Events: Completed, Other Player Started.

set Player1.Source
  to "background.mp3"
set Player1.Loop to true
call Player1.Start

when Player1.Completed
  call Player1.Start // manual loop
MEDIA Sound

Low-latency short sound player for SFX. Preloads sounds for minimal playback delay. Methods: Play, Pause, Resume, Stop. Property: Source.

set Sound1.Source to "click.wav"
set Sound1.MinimumInterval
  to 500
when AnyButton.Click
  call Sound1.Play
MEDIA Sound Recorder

Records audio from microphone. Methods: Start, Stop. Event: After Soundrecorded (returns saved file path). Property: SavedRecording.

when StartBtn.Click
  call SoundRecorder1.Start

when StopBtn.Click
  call SoundRecorder1.Stop

when SoundRecorder1.AfterSoundRecorded
    sound
  set Label1.Text to sound
MEDIA Video Player

Inline video playback. Methods: Start, Pause, SeekTo, GetDuration. Properties: Source, Loop. Event: Completed.

set VideoPlayer1.Source
  to "intro.mp4"
call VideoPlayer1.Start

when VideoPlayer1.Completed
  call VideoPlayer1.SeekTo
    ms: 0
MEDIA Speech Recognizer

Converts spoken audio to text using device speech engine. Method: GetText. Events: BeforeGettingText, AfterGettingText (returns recognized text).

when MicBtn.Click
  call SpeechRecognizer1.GetText

when SpeechRecognizer1.AfterGettingText
    result
  set TextBox1.Text to result
MEDIA Text To Speech

Converts text to spoken audio. Methods: Speak, Pause, Resume, Stop. Properties: Language, Pitch, SpeechRate. Event: After Speaking.

set TextToSpeech1.Language
  to "en"
set TextToSpeech1.SpeechRate
  to 1
call TextToSpeech1.Speak
  message: Label1.Text
MEDIA Yandex Translate

Translates text between languages via the Yandex API. Method: RequestTranslation(languageCode, text). Event: GotTranslation (returns translated text).

call YandexTranslate1.RequestTranslation
  languageToTranslateTo: "hi"
  textToTranslate: TextBox1.Text

when YandexTranslate1.GotTranslation
    responseCode  translation
  set Label1.Text to translation
MEDIA OCR

Optical Character Recognition — reads text from images using Google Vision API. Method: Detect(imageFile). Event: GotResponse (returns extracted text string).

when Camera1.AfterPictureTaken
    image
  call OCR1.Detect
    imageFile: image

when OCR1.GotResponse
    responseCode  text
  set Label1.Text to text
MEDIA QR Code

Generates a QR code Bitmap from a text string. Properties: Content, Width, Height. Use the result in an Image component's Picture property.

set QRCode1.Content
  to "https://kodular.io"
set QRCode1.Width to 300
set Image1.Picture
  to QRCode1.QRCode
MEDIA Metadata

Reads media file metadata (artist, title, duration, album, year, bitrate) from an audio or video file by its path.

set Metadata1.Source
  to Player1.Source
set Label1.Text to join
  Metadata1.Artist " — "
  Metadata1.Title
Drawing, Animation & Maps
2D drawing surfaces, sprite animation, Lottie, image editing, and full OpenStreetMap-based mapping.
DRAW Canvas

2D drawing surface. Methods: DrawLine, DrawCircle, DrawRect, DrawText, DrawShape, DrawArc, Clear, Save (as file). Events: Dragged, Touched, Flung. Foundation for games and drawing apps.

call Canvas1.DrawCircle
  x: 160  y: 160
  r: 60  fill: true
call Canvas1.DrawLine
  x1: 0 y1: 0
  x2: 320 y2: 320
DRAW Ball

Animated bouncing ball sprite on a Canvas. Properties: radius, color, speed, heading. Events: CollidedWith, EdgeReached, TouchDown, Flung. Built-in physics-style movement.

set Ball1.Speed to 8
set Ball1.Heading to 45
set Ball1.Radius to 20
when Ball1.EdgeReached
    edge
  call Ball1.Bounce
    edge: edge
DRAW Image Sprite

A moving image on a Canvas. Properties: picture, speed, heading, rotation. Same events as Ball. Use for game characters, projectiles, and interactive objects.

set ImageSprite1.Picture
  to "hero.png"
set ImageSprite1.Speed
  to 5
when ImageSprite1.CollidedWith
    other
  call Sound1.Play
DRAW Image Editor

Apply non-destructive edits: resize, crop, rotate, flip, brightness, contrast, saturation, blur. Methods return an edited image file path.

call ImageEditor1.Rotate
  image: Image1.Picture
  degrees: 90

when ImageEditor1.Done
    result
  set Image1.Picture
    to result
DRAW Lottie

Renders Lottie JSON animations (from After Effects). Methods: Play, Pause, Stop, SetProgress. Properties: Source (URL or asset), Loop, Speed, Frame.

set LottieAnimation1.Source
  to "loading.json"
set LottieAnimation1.Loop
  to true
set LottieAnimation1.Speed
  to 1.5
call LottieAnimation1.Play
MAPS Map

OpenStreetMap base map view. Properties: center lat/lng, zoom level, map type, enable zoom/rotation/compass controls. Events: Map Click, Map Long Click, Ready, BoundingBoxChanged.

set Map1.Latitude to 26.9124
set Map1.Longitude to 75.7873
set Map1.ZoomLevel to 14
set Map1.EnableZoom to true
MAPS Marker

Pins a point on the map. Properties: lat/lng, title, snippet, draggable, image, anchor. Events: Click, Long Click, Start Drag, Stop Drag, InfoWindow Click.

set Marker1.Latitude to 26.9124
set Marker1.Longitude to 75.7873
set Marker1.Title to "Jodhpur"
set Marker1.Draggable
  to true
MAPS Circle

Draws a filled circle on the map. Properties: center lat/lng, radius (meters), fill color/opacity, stroke color/width.

set Circle1.Latitude to 26.9124
set Circle1.Longitude to 75.7873
set Circle1.Radius to 1000
set Circle1.FillColor
  to make color [0,245,255,80]
MAPS Rectangle

Draws a bounding box rectangle defined by north/south/east/west lat/lng bounds. Fill and stroke style properties.

set Rectangle1.NorthLatitude
  to 27.0
set Rectangle1.SouthLatitude
  to 26.8
set Rectangle1.WestLongitude
  to 75.6
set Rectangle1.EastLongitude
  to 75.9
MAPS Line String

Draws a polyline (path) through a list of lat/lng point pairs. Properties: stroke color, stroke width, points list.

set LineString1.Points to
  make a list
    make a list 26.9 75.7
    make a list 27.0 75.8
    make a list 27.1 75.9
MAPS Polygon

Draws a closed filled polygon through a list of lat/lng point pairs. Properties: fill color, stroke color and width, points.

set Polygon1.Points to
  make a list
    make a list 26.9 75.7
    make a list 27.0 75.8
    make a list 26.8 75.9
set Polygon1.FillColor
  to make color [57,255,20,90]
MAPS Feature Collection

Loads and displays GeoJSON data containing multiple features (markers, lines, polygons) at once from a URL or local file.

set FeatureCollection1.Source
  to "https://example.com/data.geojson"

when FeatureCollection1.FeatureClick
    feature
  set Label1.Text
    to feature.Title
MAPS Navigation

Requests directions between two lat/lng coordinate pairs. Method: RequestDirections. Event: GotDirections (returns route and distance data).

call Navigation1.RequestDirections
  startLatitude: 26.9
  startLongitude: 75.7
  endLatitude: 28.6
  endLongitude: 77.2
  transportationMethod: "driving"
Sensors (17)
Access all hardware sensors and system-level inputs on Android devices. All have an Enabled property to save battery.
SENSOR Accelerometer

Measures device acceleration on X, Y, Z axes in m/s². Event: AccelerationChanged. Shaking event fires when device is shaken. Property: Sensitivity.

when AccelerometerSensor1.AccelerationChanged
    xAccel  yAccel  zAccel
  set Label1.Text
    to join "X:" xAccel

when AccelerometerSensor1.Shaking
  call Sound1.Play
SENSOR Gyroscope

Measures rotation rate around X, Y, Z axes in rad/s. Event: GyroscopeChanged. Useful for detecting fine rotation gestures.

when GyroscopeSensor1.GyroscopeChanged
    xAngularVelocity
    yAngularVelocity
    zAngularVelocity
  set Label1.Text
    to round xAngularVelocity
SENSOR Gravity Sensor

Measures gravitational force on all three axes. Filters out device motion (unlike accelerometer). Event: GravityChanged.

when GravitySensor1.GravityChanged
    xGravity  yGravity  zGravity
  // detect device tilt direction
  if xGravity > 5
    set Label1.Text to "Tilted Right"
SENSOR Orientation Sensor

Gives yaw (azimuth), pitch, and roll angles of the device. Event: OrientationChanged. Used for compasses and AR apps.

when OrientationSensor1.OrientationChanged
    azimuth  pitch  roll
  set Image1.RotationAngle
    to azimuth // compass needle
SENSOR Magnetic Field

Reads ambient magnetic field strength in microteslas on X, Y, Z axes. Event: MagneticChanged. Used for digital compass apps.

when MagneticFieldSensor1.MagneticChanged
    xFieldStrength
    yFieldStrength
    zFieldStrength
  set Label1.Text
    to round xFieldStrength
SENSOR Location Sensor

GPS and network location. Properties: Latitude, Longitude, Altitude, Speed, Accuracy, CurrentAddress. Events: LocationChanged, StatusChanged. Methods include geocoding.

set LocationSensor1.Enabled
  to true

when LocationSensor1.LocationChanged
    latitude  longitude  altitude  speed
  set Label1.Text to join
    latitude ", " longitude
SENSOR Clock

Timer component. Event: Timer (fires at set interval). Methods: Now (current datetime), FormatDateTime, SystemTime, TimerAlwaysFires. Properties: TimerInterval, TimerEnabled.

set Clock1.TimerInterval
  to 1000 // 1 second
set Clock1.TimerEnabled
  to true

when Clock1.Timer
  set Label1.Text to
    call Clock1.FormatDateTime
      instant: call Clock1.Now
      pattern: "HH:mm:ss"
SENSOR Barcode Scanner

Scans 1D and 2D barcodes and QR codes using the camera. Method: DoScan. Event: AfterScan (returns scanned content as text string).

when ScanBtn.Click
  call BarcodeScanner1.DoScan

when BarcodeScanner1.AfterScan
    result
  set Label1.Text to result
SENSOR Fingerprint

Authenticates user via the device fingerprint sensor. Events: OnAuthenticated, OnAuthenticationFailed, OnAuthenticationError. Requires API 23+.

call Fingerprint1.Authenticate

when Fingerprint1.OnAuthenticated
  open another screen
    "SecureScreen"

when Fingerprint1.OnAuthenticationFailed
  call Notifier1.ShowAlert
    notice: "Try again"
SENSOR Near Field (NFC)

Reads NFC tags when the device is tapped to them. Event: TagRead (returns tag MIME type and data as text). Passive reading only.

when NearField1.TagRead
    tagContents
  set Label1.Text
    to tagContents
  call Sound1.Play
SENSOR Light Sensor

Reads ambient light level in lux units. Event: LightChanged. Useful for auto-brightness or adaptive dark/light mode switching.

when LightSensor1.LightChanged
    lightValue
  if lightValue < 50
    set Screen1.BackgroundColor
      to make color [2,4,8]
  else
    set Screen1.BackgroundColor
      to make color [255,255,255]
SENSOR Proximity Sensor

Detects when something is close to the screen (e.g. ear during call). Event: ProximityChanged. Returns distance value or near/far boolean.

when ProximitySensor1.ProximityChanged
    distance
  if distance < 5
    // near — mute speaker
    call AudioUtils1.SetVolume
      volume: 0
SENSOR Pressure Sensor

Reads atmospheric pressure in hPa/millibars. Event: PressureChanged. Can estimate relative altitude changes between readings.

when PressureSensor1.PressureChanged
    pressure
  set Label1.Text to join
    round pressure " hPa"
SENSOR Temperature Sensor

Reads ambient air temperature in Celsius (hardware availability varies by device). Event: TemperatureChanged.

when TemperatureSensor1.TemperatureChanged
    temperature
  set Label1.Text to join
    round temperature " °C"
SENSOR Hygrometer

Reads ambient relative humidity percentage. Event: HumidityChanged. Works only on devices with a humidity sensor.

when Hygrometer1.HumidityChanged
    humidity
  set Label1.Text to join
    round humidity "% RH"
SENSOR Sound Sensor

Reads ambient sound level from the microphone. Event: SoundChanged. Returns a level value (not a recording). Use for clap detection, etc.

when SoundSensor1.SoundChanged
    sound
  if sound > 80
    set Label1.Text
      to "Loud!"
    call Sound1.Play
SENSOR Pedometer

Counts the user's footsteps using the hardware step counter. Methods: Start, Stop, Reset. Properties: StepCount, Distance, ElapsedTime.

call Pedometer1.Start

when Pedometer1.WalkStep
    simpleSteps  distance
  set Label1.Text to join
    simpleSteps " steps"
Social (10)
Communication, sharing, contact access, phone, SMS, Twitter, and OneSignal push notification components.
SOCIAL Contact Picker

Opens the device contact book. Event: AfterPicking (returns name, email, phone number, URI). Method: Open.

call ContactPicker1.Open

when ContactPicker1.AfterPicking
  set Label1.Text to
    ContactPicker1.ContactName
  set Label2.Text to
    ContactPicker1.PhoneNumber
SOCIAL Email Picker

Specifically picks a contact's email address from the address book. Event: AfterPicking (returns email string).

call EmailPicker1.Open

when EmailPicker1.AfterPicking
  set ToField.Text to
    EmailPicker1.EmailAddress
SOCIAL Phone Number Picker

Picks a phone number from contacts. Event: AfterPicking (returns selected phone number string).

call PhoneNumberPicker1.Open

when PhoneNumberPicker1.AfterPicking
  set PhoneCall1.PhoneNumber to
    PhoneNumberPicker1.PhoneNumber
SOCIAL Phone Call

Initiates a phone call. Method: MakePhoneCall. Property: PhoneNumber. Requires CALL_PHONE permission grant.

set PhoneCall1.PhoneNumber
  to "+91 98765 43210"
call PhoneCall1.MakePhoneCall
SOCIAL Texting (SMS)

Sends SMS messages. Methods: SendMessage (via app), SendMessageDirect (background). Properties: PhoneNumber, Message. Event: MessageReceived. Requires permissions.

set Texting1.PhoneNumber
  to "+91 98765 43210"
set Texting1.Message
  to "Hello from Kodular!"
call Texting1.SendMessageDirect
SOCIAL Sharing

Opens Android share dialog to share text, images, or files to other apps. Methods: ShareMessage, ShareFile, ShareFileWithMessage.

call Sharing1.ShareMessage
  message: join
    "Check this out: "
    Label1.Text

// or share an image:
call Sharing1.ShareFile
  file: Image1.Picture
SOCIAL Twitter

OAuth-based Twitter integration. Methods: Authorize, Tweet, SearchTwitter, RequestTweets. Events: IsAuthorized, NewTweet, SearchSuccessful. Requires Twitter API keys.

call Twitter1.Authorize

when Twitter1.IsAuthorized
  call Twitter1.Tweet
    status: "Hello from Kodular! #nocode"
SOCIAL OneSignal Notifications

Send and receive push notifications via OneSignal. Requires OneSignal App ID set in Screen properties. Events: GotNotification, NotificationOpened.

// set App ID in Screen1 properties
// then handle received notifications:
when OneSignalNotif1.GotNotification
    id  title  message  data
  set Label1.Text to title
SOCIAL OneSignal InApp Messages

Display rich in-app overlay messages triggered by OneSignal events or tags. Manage templates and display conditions server-side.

// triggers are set in OneSignal dashboard
// respond to display events here:
when OneSignalInApp1.MessageDisplayed
    messageId
  set Label1.Text
    to "Banner shown"
SOCIAL OneSignal Management

Manage user segmentation for targeting. Methods: SendTag, DeleteTag, SetExternalUserId, RemoveExternalUserId, GetTags.

call OneSignalMgmt1.SendTag
  key: "plan"
  value: "premium"

call OneSignalMgmt1.SetExternalUserId
  externalId: FirebaseAuth1.Uid
Storage (6)
Local and cloud data persistence — key-value stores, SQL, file I/O, spreadsheet APIs, and cloud file hosting.
STORAGE Tiny DB

Local key-value store that persists across app restarts. Methods: StoreValue(tag, value), GetValue(tag, default), ClearAll, GetTags. Tags are strings; values can be any type including lists.

call TinyDB1.StoreValue
  tag: "username"
  valueToStore: TextBox1.Text

set Label1.Text to
  call TinyDB1.GetValue
    tag: "username"
    valueIfTagNotThere: "Guest"
STORAGE Tiny Web DB

Cloud-hosted key-value store. Methods: StoreValue, GetValue. Events: GotValue, ValueStored, WebServiceError. Can use Kodular's server or a custom endpoint.

call TinyWebDB1.StoreValue
  tag: "score"
  valueToStore: 9500

when TinyWebDB1.GotValue
    tagFromWebDB  valueFromWebDB
  set Label1.Text
    to valueFromWebDB
STORAGE File

Read/write text and binary files on device storage. Methods: SaveFile, ReadFrom, AppendToFile, Delete, MakeDirectory, CopyFile, MoveFile, ListFiles. Supports app-private and external scopes.

call File1.SaveFile
  text: "Log entry"
  fileName: "/log.txt"

set Label1.Text to
  call File1.ReadFrom
    fileName: "/log.txt"
STORAGE SQLite

Full local SQL database. Methods: ExecuteQuery, ExecuteQueryWithLocalDatabase, ExecuteNonQuery, ExecuteQueryFile. Event: GotResult. Supports full SQL: SELECT, INSERT, UPDATE, DELETE with parameters.

call SQLite1.ExecuteNonQuery
  database: "mydb.db"
  statement:
    join "INSERT INTO users VALUES('"
    TextBox1.Text "')"

call SQLite1.ExecuteQuery
  database: "mydb.db"
  statement: "SELECT * FROM users"
STORAGE Spreadsheet (Airtable)

Connect to an Airtable base via its REST API. Methods: GetRow, GetColumn, GetCell, SetCell, AddRow, DeleteRow. Events return data or report errors.

call Spreadsheet1.GetColumn
  sheetName: "Users"
  column: "Name"

when Spreadsheet1.GotColumnData
    columnData
  set ListView1.Elements
    to columnData
STORAGE Cloudinary

Upload images and files to Cloudinary CDN. Method: Upload(file, presetName). Event: GotResponse (returns the secure public URL). Properties: API key, secret, cloud name, preset.

when Camera1.AfterPictureTaken
    image
  call Cloudinary1.Upload
    file: image
    preset: "ml_default"

when Cloudinary1.GotResponse
    response
  set Label1.Text to response
Utilities (14)
System access, image processing, animations, cryptography, device info, and more helper components.
UTIL Animation Utilities

Apply animations to any component: slide in/out, fade, zoom, rotate, bounce, flip. Method: Animate(component, animationType, duration). Many preset Material motion types.

call AnimationUtil1.Animate
  view: Card1
  animation: "fadein"
  duration: 400

// Other types: slideright, slideleft,
// zoomin, rotate, bounce, flash
UTIL Color Utilities

Work with colors programmatically: make color from RGB/HSV values, get individual channels, convert hex string to color, darken/lighten by a percentage.

set Label1.TextColor to
  call ColorUtil1.MixColors
    color1: make color [0,245,255]
    color2: make color [57,255,20]
    ratio: 0.5
UTIL Cryptography

Encrypt and decrypt text. Methods: Encrypt, Decrypt. Algorithms: AES, RC4, MD5, SHA-1, SHA-256, Base64 encode/decode, BCrypt hashing.

set global encryptedPwd to
  call Cryptography1.Encrypt
    algorithm: "AES"
    key: "MySecretKey12345"
    text: PasswordBox.Text
UTIL Device Utilities

Read device info: Android version, API level, model, manufacturer, unique device ID, screen dimensions, pixel density, country, language, available RAM.

set Label1.Text to join
  DeviceUtils1.Model " | "
  DeviceUtils1.AndroidVersion
  " | API "
  DeviceUtils1.ApiLevel
UTIL Battery Utilities

Get battery state: level percentage, is charging boolean, charge source (USB/AC/wireless), temperature, technology type, voltage.

set Label1.Text to join
  BatteryUtils1.BatteryLevel
  "% | Charging: "
  BatteryUtils1.IsCharging
  " | "
  BatteryUtils1.Source
UTIL Package Utilities

Query installed apps: IsPackageInstalled, GetPackageVersionCode, GetVersionName, LaunchApp, GetInstalledPackages (returns full list).

if call PackageUtils1.IsPackageInstalled
    packageName: "com.whatsapp"
  call PackageUtils1.LaunchApp
    packageName: "com.whatsapp"
else
  call Notifier1.ShowAlert
    notice: "WhatsApp not installed"
UTIL Image Utilities

Process images: resize, scale, crop, rotate, convert format, save to file, get image dimensions. Operates on file paths or bitmap objects.

call ImageUtils1.Resize
  image: Image1.Picture
  width: 800
  height: 600
  keepAspectRatio: true

when ImageUtils1.Done
    result
  set Image1.Picture to result
UTIL Decoration

Apply visual styles at runtime: rounded corners, box shadow, border, gradient background, custom shapes. Works on arrangements and card views.

call Decoration1.SetRadius
  view: HorizArrange1
  topLeft: 24  topRight: 24
  bottomLeft: 0  bottomRight: 0
call Decoration1.SetBackground
  view: HorizArrange1
  color: make color [8,14,20]
UTIL Screenshot

Capture the current screen or a specific layout as an image file. Methods: TakeScreenshot, TakeScreenshotOf(layout). Event: ScreenshotTaken (returns saved file path).

when ShareBtn.Click
  call Screenshot1.TakeScreenshotOf
    view: ResultCard

when Screenshot1.ScreenshotTaken
    path
  call Sharing1.ShareFile
    file: path
UTIL Keyguard Manager

Check and interact with the device screen lock state. Method: IsKeyguardLocked, RequestDismissKeyguard. Useful for lock-screen-aware apps.

if KeyguardManager1.IsKeyguardLocked
  call Notifier1.ShowAlert
    notice: "Unlock device first"
else
  // proceed with secure action
UTIL Shell

Execute shell (terminal) commands on rooted devices. Method: ExecuteCommand(command). Event: GotResult (returns stdout). Requires root access.

call Shell1.ExecuteCommand
  command: "ls /sdcard/"

when Shell1.GotResult
    result
  set Label1.Text to result
UTIL Wallpaper

Set the device home screen wallpaper. Method: SetWallpaper(imagePath). Requires WRITE_SETTINGS or a system permission on newer Android.

when Camera1.AfterPictureTaken
    image
  call Wallpaper1.SetWallpaper
    image: image
UTIL Audio Utilities

Control system audio streams: get/set volume for ring, media, alarm, notification channels. Check if headphones are currently connected.

set AudioUtils1.Volume to 80
set AudioUtils1.Stream
  to "MEDIA"

if AudioUtils1.IsHeadsetPlugged
  call Player1.Start
UTIL Resource Utilities

Access Android resource IDs by name at runtime. Get drawable, string, color, or dimen resources from the system or app's own resource files.

set Image1.Picture to
  call ResourceUtils1.GetDrawable
    name: "ic_launcher"

set Label1.Text to
  call ResourceUtils1.GetString
    name: "app_name"
Dynamic Components (6)
Create and manage UI components programmatically at runtime — essential for data-driven UIs like feeds, dynamic forms, and API-generated lists.
DYNAMIC Dynamic Button

Create buttons at runtime. Methods: CreateButton(id, layout), SetText(id, text), SetBackgroundColor, SetTextColor, SetOnClickListener. Each button referenced by unique string ID.

call DynamicButton1.CreateButton
  id: 1
  arrangement: VertArrange1

call DynamicButton1.SetText
  id: 1
  text: "Click Me"

when DynamicButton1.Click
    id
  set Label1.Text
    to join "Btn " id
DYNAMIC Dynamic Label

Generate labels dynamically inside any layout. Methods: CreateLabel, SetText, SetTextColor, SetFontSize, SetFontBold, SetFontItalic, DeleteLabel(id).

call DynamicLabel1.CreateLabel
  id: 1
  arrangement: VertArrange1

call DynamicLabel1.SetText
  id: 1
  text: "Dynamic Text"
call DynamicLabel1.SetFontSize
  id: 1  size: 18
DYNAMIC Dynamic Image

Show images dynamically. Methods: CreateImage, SetImage(id, path), SetWidth, SetHeight, SetClickable, DeleteImage(id).

call DynamicImage1.CreateImage
  id: 1
  arrangement: CardView1

call DynamicImage1.SetImage
  id: 1
  image: "https://example.com/pic.jpg"
call DynamicImage1.SetWidth
  id: 1  width: 200
DYNAMIC Dynamic Card View

Create Material card containers at runtime. Set corner radius, elevation, stroke color. Nest other dynamic components inside. Foundation for dynamic feed UIs.

for each item in dataList
  call DynamicCardView1.CreateCardView
    id: index
    arrangement: FeedLayout
  call DynamicCardView1.SetElevation
    id: index  value: 4
DYNAMIC Dynamic Text Box

Create input fields dynamically. Methods: CreateTextBox, SetHint, SetText, SetInputType, SetFontSize, GetText(id). Specify keyboard type per field.

call DynamicTextBox1.CreateTextBox
  id: 1
  arrangement: FormLayout

call DynamicTextBox1.SetHint
  id: 1
  hint: "Enter name..."
DYNAMIC Dynamic Space

Create invisible spacer elements to pad content in dynamic layouts. Set width and height in pixels or percentage.

call DynamicSpace1.CreateSpace
  id: 1
  arrangement: VertArrange1

call DynamicSpace1.SetHeight
  id: 1  height: 20
Connectivity (10)
HTTP, Bluetooth, WiFi, FTP, downloads, USB serial, and external app/activity launching.
NET Web (HTTP)

Full HTTP client. Methods: Get, Post, PostFile, Put, Delete, PatchText, BuildRequestData. Properties: URL, Headers, Timeout. Event: GotResponse (returns status code, content, response headers).

set Web1.Url to
  "https://api.example.com/data"
call Web1.Get

when Web1.GotResponse
    url statusCode content
  set Label1.Text
    to content
NET Network

Check connectivity state. Properties: IsConnected, IsWifiConnected, IsMobileConnected, NetworkType (returns "WIFI", "MOBILE", or "NONE"). Poll on demand.

if Network1.IsConnected
  call Web1.Get
else
  call Notifier1.ShowAlert
    notice: "No internet!"
NET Download

Downloads files from URLs using Android DownloadManager. Shows a system notification. Event: DownloadComplete (returns saved file path). Properties: URL, SaveLocation.

call Download1.Start
  url: "https://example.com/file.pdf"
  title: "Downloading PDF"

when Download1.DownloadComplete
    downloadedFile
  call File1.ReadFrom
    fileName: downloadedFile
BT Bluetooth Client

Connect to and communicate with classic Bluetooth devices. Methods: Connect(address), Disconnect, SendText, SendBytes1ByteNumber. Events: ConnectionEstablished, Disconnected, DataReceived.

call BluetoothClient1.Connect
  address: "AA:BB:CC:DD:EE:FF"

when BluetoothClient1.ConnectionEstablished
  call BluetoothClient1.SendText
    text: "HELLO"
BT Bluetooth Server

Act as a Bluetooth server and accept incoming connections. Methods: AcceptConnection, StopAccepting, SendText, SendBytes. Same data events as client side.

call BluetoothServer1.AcceptConnection
  serviceName: "MyBTService"

when BluetoothServer1.ConnectionAccepted
  call BluetoothServer1.SendText
    text: "Connected OK"
BT Bluetooth Admin

Manage the Bluetooth adapter: Enable, Disable, StartDiscovery (find nearby devices), GetPairedDevices (returns paired device list), check adapter state.

call BluetoothAdmin1.Enable
set Spinner1.Elements to
  call BluetoothAdmin1.GetPairedDevices
NET WiFi

Query WiFi state: SSID, IP address, BSSID, signal level, MAC address, link speed, is connected. Read-only on API 29+ due to Android privacy restrictions.

when InfoBtn.Click
  set Label1.Text to join
    "SSID: " WiFi1.SSID
    "\nIP: " WiFi1.IpAddress
    "\nSignal: "
    WiFi1.SignalStrength
NET FTP

Upload/download files to/from FTP servers. Methods: Upload, Download, ListFiles, DeleteFile, MakeDirectory. Properties: server hostname, port, username, password.

set FTP1.Server to "ftp.mysite.com"
set FTP1.Username to "user"
set FTP1.Password to "pass"
call FTP1.Upload
  source: "/sdcard/file.txt"
  destination: "/public/file.txt"
SYS Activity Starter

Launch other Android apps or system activities via Intents. Properties: Action, Data URI, MIME type, Activity class, extras. Opens Maps, Dialer, Browser, Camera, custom apps, etc.

set ActivityStarter1.Action
  to "android.intent.action.VIEW"
set ActivityStarter1.DataUri
  to "https://kodular.io"
call ActivityStarter1.StartActivity
HW Arduino

Serial communication with an Arduino via USB OTG. Methods: SendData, OpenConnection, CloseConnection. Event: DataReceived (returns string). Requires USB OTG cable.

call Arduino1.OpenConnection
  baudRate: 9600
call Arduino1.SendData
  data: "LED:ON\n"

when Arduino1.DataReceived
    data
  set Label1.Text to data
Google Components (12)
Full Firebase stack, Play Services integrations, and Google-specific APIs for authentication, data, storage, and app lifecycle.
FIREBASE Firebase Database

Real-time NoSQL database. Methods: GetValue, StoreValue, AppendChildValue, RemoveFirst. Events: DataChanged, GotValue. Requires Firebase project URL and credentials.

call FirebaseDB1.StoreValue
  tag: "users/abhi/score"
  valueToStore: 9500

when FirebaseDB1.DataChanged
    tag  value
  set Label1.Text to value
FIREBASE Firebase Authentication

User sign-in with email/password, Google Sign-In, and anonymous. Methods: CreateUser, SignIn, SignOut, GetCurrentUser. Events: GotToken, SignedIn, SignedOut, Error.

call FirebaseAuth1.SignIn
  email: EmailBox.Text
  password: PassBox.Text

when FirebaseAuth1.SignedIn
    user
  open another screen
    "HomeScreen"
FIREBASE Firebase Storage

Upload and download files to Google Cloud Storage bucket. Methods: Upload, DownloadFile, GetDownloadUrl, Delete. Events: GotResponse (returns download URL on success).

call FirebaseStorage1.Upload
  bucket: "myapp.appspot.com"
  path: "avatars/abhi.jpg"
  file: pickedImagePath

when FirebaseStorage1.GotResponse
    downloadUrl
  set Image1.Picture
    to downloadUrl
FIREBASE Firebase Remote Config

Fetch and apply remote key-value configuration from Firebase. Used for staged rollouts and A/B testing. Method: FetchAndActivate, GetValue(key). Event: GotValue.

call FirebaseRemoteConfig1.FetchAndActivate

when FirebaseRemoteConfig1.GotValue
    tag  value
  if tag = "show_banner"
    set Banner.Visible
      to call value
GOOGLE Google Maps

Embeds the official Google Maps (requires Google Maps API key). Separate from the OSM-based Maps component — uses Google tile servers and styling.

set GoogleMaps1.ApiKey
  to "YOUR_API_KEY"
set GoogleMaps1.Latitude
  to 26.9124
set GoogleMaps1.MapType
  to "normal"
GOOGLE Google Account Picker

Lets the user pick a Google account from those signed in on the device. Event: AccountPicked (returns email address). Useful for Google-linked services.

call GoogleAccountPicker1.Pick

when GoogleAccountPicker1.AccountPicked
    accountName
  set Label1.Text
    to accountName
GOOGLE Google Play Games

Play Games Services integration: leaderboards, achievements, sign-in. Methods: SignIn, SubmitScore(leaderboardId, score), UnlockAchievement(id), ShowLeaderboard.

call GooglePlayGames1.SignIn

call GooglePlayGames1.SubmitScore
  leaderboardId:
    "CgkI..."
  score: 9500
GOOGLE Google reCaptcha

Bot verification for sensitive actions. Method: Verify. Event: VerifyResponse (returns success boolean and token string). Requires reCaptcha site key.

when SubmitBtn.Click
  call GoogleReCaptcha1.Verify

when GoogleReCaptcha1.VerifyResponse
    isSuccess  token
  if isSuccess
    // proceed with form submit
GOOGLE InApp Review

Triggers the Google Play in-app review sheet. Method: RequestReview. Best triggered after a positive user action, never on cold start.

// trigger after user completes level:
when LevelComplete.Click
  if completedLevels > 5
    call InAppReview1.RequestReview
GOOGLE InApp Update

Notifies users of Play Store updates. Types: Flexible (background download) or Immediate (forced blocking update). Events: UpdateAvailable, UpdateDownloaded.

when Screen1.Initialize
  call InAppUpdate1.CheckForUpdate

when InAppUpdate1.UpdateAvailable
    versionCode
  call InAppUpdate1.StartUpdate
    type: "flexible"
GOOGLE Play Integrity

Checks if the app runs on a genuine, Play-certified device. Protects against tampering and sideloading. Method: RequestToken. Event: GotToken (send to your server to verify).

call PlayIntegrity1.RequestToken
  nonce: "unique-nonce-string"

when PlayIntegrity1.GotToken
    token
  // send token to backend for verify
  call Web1.PostText
    url: "/verify"
    text: token
GOOGLE YouTube Player

Embeds the official YouTube player. Properties: VideoId, AutoPlay, Fullscreen. Methods: Load, Play, Pause, Stop, SeekTo. Events: Ready, StateChange, Error.

set YoutubePlayer1.VideoId
  to "dQw4w9WgXcQ"
set YoutubePlayer1.AutoPlay
  to true
call YoutubePlayer1.Play
Monetization (23)
Complete suite of ad networks and billing integrations for revenue generation from your Android app.
BILLING In-App Billing

Google Play billing library integration. Methods: Initialize, Purchase(SKU), ConsumePurchase, QueryInventory, Subscribe. Events: GotPurchased, PurchaseError, InventoryReceived. Supports one-time and subscription products.

call InAppBilling1.Initialize

when BuyBtn.Click
  call InAppBilling1.Purchase
    productId: "remove_ads"

when InAppBilling1.GotPurchased
    purchaseToken  productId
  set TinyDB1.StoreValue
    tag: "pro"
    valueToStore: true
SURVEYS Pollfish

Embed surveys for revenue per completion. Methods: Initialize, Show. Events: SurveyCompleted, SurveyOpened, SurveyNotAvailable, UserNotEligible. Requires API key.

call Pollfish1.Initialize
  apiKey: "YOUR_API_KEY"
  position: "BOTTOM_RIGHT"
  padding: 50
  rewardMode: false

when Pollfish1.SurveyCompleted
  set Label1.Text
    to "Survey done! Reward sent"
ADMOB Banner

Persistent banner ad shown inline in a layout. Sizes: smart, standard, medium rectangle, full banner. Events: AdLoaded, AdFailedToLoad, AdClicked, AdOpened, AdClosed.

set AdMobBanner1.AdUnitId
  to "ca-app-pub-xxx/yyy"
set AdMobBanner1.AdSize
  to "SMART_BANNER"
call AdMobBanner1.LoadAd

when AdMobBanner1.AdLoaded
  set AdMobBanner1.Visible
    to true
ADMOB Interstitial

Full-screen ad displayed between content transitions. Methods: LoadAd, ShowInterstitial. Events: AdLoaded, AdClosed, AdFailedToLoad, AdClicked.

set AdMobInterstitial1.AdUnitId
  to "ca-app-pub-xxx/yyy"
call AdMobInterstitial1.LoadAd

when LevelComplete.Click
  if AdMobInterstitial1.IsLoaded
    call AdMobInterstitial1.ShowInterstitial
ADMOB Rewarded

Opt-in video ad the user watches for an in-app reward. Events: AdLoaded, UserEarnedReward (returns reward type and amount), AdClosed, FailedToLoad.

set AdMobRewarded1.AdUnitId
  to "ca-app-pub-xxx/yyy"
call AdMobRewarded1.LoadAd

when WatchAdBtn.Click
  call AdMobRewarded1.Show

when AdMobRewarded1.UserEarnedReward
    type  amount
  set global coins to
    global coins + amount
ADMOB Rewarded Interstitial

Full-screen interstitial that also rewards the user. Combines interstitial UX with rewarded incentive. Same event structure as Rewarded.

set AdMobRewardedInterstitial1.AdUnitId
  to "ca-app-pub-xxx/yyy"
call AdMobRewardedInterstitial1.LoadAd

when AdMobRewardedInterstitial1.UserEarnedReward
    type  amount
  // grant the reward here
ADMOB Native Ad Layout

Blends into the app's own UI. Customize the native ad template with your own layout. Requires a native ad unit ID and template setup.

set AdMobNativeAd1.AdUnitId
  to "ca-app-pub-xxx/yyy"
set AdMobNativeAd1.Layout
  to NativeAdLayout1
call AdMobNativeAd1.LoadAd
ADMOB App Open

Shows a full-screen ad when the user opens or returns to the app from the background. Good for cold-start monetization.

set AdMobAppOpen1.AdUnitId
  to "ca-app-pub-xxx/yyy"

when Screen1.Initialize
  call AdMobAppOpen1.LoadAd

when Screen1.OnAppResume
  if AdMobAppOpen1.IsLoaded
    call AdMobAppOpen1.Show
GAM Banner GAM Interstitial GAM Rewarded GAM Rewarded Interstitial GAM Native Ad Layout GAM App Open
META Facebook Banner / Interstitial / Rewarded Video

Meta Audience Network ads. Requires Facebook App ID and Placement ID per ad unit. Similar event structure to AdMob.

set FacebookBanner1.PlacementId
  to "YOUR_PLACEMENT_ID"
call FacebookBanner1.LoadAd

when FacebookInterstitial1.AdLoaded
  call FacebookInterstitial1.ShowAd
AMAZON Amazon Banner / Interstitial

Amazon Publisher Services ads. Requires Amazon App Key and Slot ID. Especially effective for Amazon device users.

set AmazonBanner1.AppKey
  to "YOUR_APP_KEY"
set AmazonBanner1.SlotId
  to "YOUR_SLOT_ID"
call AmazonBanner1.LoadAd
APPLOVIN AppLovin Interstitial

AppLovin full-screen ads. Requires SDK key. Events: AdLoaded, AdDisplayed, AdClicked, AdHidden, AdLoadFailed.

set AppLovinInterstitial1.SdkKey
  to "YOUR_SDK_KEY"
call AppLovinInterstitial1.LoadAd

when AppLovinInterstitial1.AdLoaded
  call AppLovinInterstitial1.ShowAd
ADCOLONY AdColony Interstitial

Video-first high-quality interstitials. Requires Zone ID. Known for high CPM rates on video inventory.

set AdColonyInterstitial1.AppId
  to "appXXXXXX"
set AdColonyInterstitial1.ZoneId
  to "vzXXXXXX"
call AdColonyInterstitial1.LoadAd
STARTAPP StartApp Banner / Interstitial

StartApp SDK ads in banner and full-screen formats. Requires StartApp App ID. Global ad network coverage.

set StartAppBanner1.AppId
  to "YOUR_APP_ID"
call StartAppBanner1.LoadAd

call StartAppInterstitial1.LoadAd
when StartAppInterstitial1.AdLoaded
  call StartAppInterstitial1.ShowAd
LEADBOLT LeadBolt

LeadBolt performance advertising. Requires module ID. Events: OnLoad, OnClick, OnClose, OnError, OnMediaFinished.

set LeadBolt1.ModuleId
  to "YOUR_MODULE_ID"
call LeadBolt1.LoadAd

when LeadBolt1.OnLoad
  call LeadBolt1.ShowAd

when LeadBolt1.OnClose
  call LeadBolt1.LoadAd // preload next
LEGO® MINDSTORMS® (15)
Control LEGO robotics kits over Bluetooth from your Kodular app. Two generations: EV3 (newer, more capable) and NXT (legacy).
EV3 EV3 Commands

Send raw system and direct commands to the EV3 brick. Handles Bluetooth connection establishment and management.

call Ev3Commands1.Connect
  address:
    BluetoothAdmin1.SelectedDeviceAddress

when Ev3Commands1.ConnectionEstablished
  set Label1.Text
    to "EV3 Connected!"
EV3 EV3 Motors

Control motor ports A–D. Methods: RotateByAngle, RotateByDegrees, RotateByTime, RotateSyncForever, Stop, TurnRatioBySetting. Supports power levels and braking modes.

call Ev3Motors1.RotateByTime
  motorPortList: make a list "A"
  power: 50
  milliseconds: 2000
  useBrake: true
EV3 EV3 Color Sensor

Read color (returns values 0–7) or light intensity. Modes: color detection or reflected/ambient light measurement. Event: ColorSensorChanged.

set Ev3ColorSensor1.SensorPort
  to "1"
set Ev3ColorSensor1.Mode
  to "color"

when Ev3ColorSensor1.ColorSensorChanged
    colorCode
  set Label1.Text to colorCode
EV3 EV3 Gyro Sensor

Measures rotation angle and angular rate. Methods: GetAngle, GetRate. Event: SensorValueChanged. Used for balance and direction control.

set Ev3GyroSensor1.SensorPort
  to "2"

when Clock1.Timer
  set Label1.Text to join
    "Angle: "
    call Ev3GyroSensor1.GetAngle
EV3 EV3 Touch Sensor

Detects press and release on the physical touch button. Events: Pressed, Released, Bumped (press + release cycle).

when Ev3TouchSensor1.Pressed
  call Ev3Motors1.RotateSyncForever
    motorPortList:
      make a list "A" "B"
    power: 60

when Ev3TouchSensor1.Released
  call Ev3Motors1.Stop
    motorPortList:
      make a list "A" "B"
    useBrake: true
EV3 EV3 Ultrasonic Sensor

Measures distance to objects using sonar. Returns value in centimeters or inches. Event: DistanceChanged.

set Ev3UltrasonicSensor1.SensorPort
  to "4"

when Ev3UltrasonicSensor1.DistanceChanged
    cmDistance
  if cmDistance < 20
    call Ev3Motors1.Stop
      motorPortList:
        make a list "A" "B"
      useBrake: true
EV3 EV3 Sound

Play tones or system sounds on the EV3 brick's built-in speaker. Methods: PlayTone(volume, frequency, duration), PlaySoundFile.

call Ev3Sound1.PlayTone
  volume: 80
  frequency: 440
  milliseconds: 500

call Ev3Sound1.PlaySoundFile
  volume: 100
  fileName: "beep.rsf"
EV3 EV3 UI

Draw text, lines, and shapes on the EV3's LCD screen. Methods: DrawText, DrawRect, DrawCircle, FillScreen, Clear, UpdateScreen.

call Ev3UI1.FillScreen
  color: false
call Ev3UI1.DrawText
  color: true
  x: 10  y: 50
  text: "Hello EV3!"
call Ev3UI1.UpdateScreen
NXT NXT Direct Commands

Send raw NXT direct commands over Bluetooth. Provides low-level access to the NXT firmware command set.

call NxtDirectCommands1.Connect
  address:
    BluetoothAdmin1.SelectedDeviceAddress
// then send direct commands:
call NxtDirectCommands1.PlayTone
  frequencyHz: 440
  durationMs: 1000
NXT NXT Drive

Control both drive motors simultaneously. Methods: MoveForward, MoveBackward, TurnLeft, TurnRight, StopDriving. Specify speed (0–100) and optional distance.

call NxtDrive1.MoveForward
  driveMotors: "B,C"
  power: 75
  distance: 100

call NxtDrive1.TurnLeft
  driveMotors: "B,C"
  power: 50
NXT NXT Color Sensor

Read color values from the NXT Color sensor. Returns a color integer. Event: ColorChanged.

set NxtColorSensor1.SensorPort
  to "1"

when NxtColorSensor1.ColorChanged
    colorCode
  set Label1.Text
    to colorCode
NXT NXT Light Sensor

Reads reflected light intensity from the NXT Light sensor. Useful for line-following robots. Event: LightChanged.

set NxtLightSensor1.SensorPort
  to "2"
set NxtLightSensor1.GenerateLight
  to true

when NxtLightSensor1.LightChanged
    lightLevel
  if lightLevel < 40
    // dark surface = black line
    call NxtDrive1.TurnLeft
      driveMotors: "B,C"
      power: 40
NXT NXT Touch Sensor

Detects button press on the NXT touch input. Event: Pressed. Returns a boolean state via IsPressed property.

when NxtTouchSensor1.Pressed
  call NxtDrive1.StopDriving
    driveMotors: "B,C"

if NxtTouchSensor1.IsPressed
  set Label1.Text
    to "Button held!"
NXT NXT Sound Sensor

Measures sound level in the environment. Returns a 0–100 normalized level value. Event: SoundChanged.

set NxtSoundSensor1.SensorPort
  to "3"

when NxtSoundSensor1.SoundChanged
    soundLevel
  if soundLevel > 70
    call NxtDrive1.MoveForward
      driveMotors: "B,C"
      power: 60
NXT NXT Ultrasonic Sensor

Distance measurement via sonar. Returns distance in centimeters or inches. Event: DistanceChanged.

set NxtUltrasonicSensor1.SensorPort
  to "4"

when NxtUltrasonicSensor1.DistanceChanged
    distance
  set Label1.Text to join
    distance " cm"
  if distance < 15
    call NxtDrive1.TurnRight
      driveMotors: "B,C"
      power: 50
Experimental (5)
Beta and preview features — functional but APIs may change in future Kodular versions.
BETA CloudDB

Redis-backed real-time cloud key-value store. Methods: GetValue, StoreValue, RemoveFirst, Append, GetTagList. Events: DataChanged, GotValue. A lightweight alternative to Firebase Realtime DB.

call CloudDB1.StoreValue
  tag: "score"
  valueToStore: 9500

when CloudDB1.DataChanged
    tag  value
  set Label1.Text to value
BETA ExoPlayer

Advanced video and audio player using Google's ExoPlayer library. Supports HLS, DASH, progressive MP4, and other adaptive streaming formats. Better performance than the standard Video Player.

set ExoPlayer1.Source
  to "https://example.com/stream.m3u8"
call ExoPlayer1.Play

when ExoPlayer1.Completed
  call ExoPlayer1.Stop
BETA Notification

Create and display local Android notifications (not push). Methods: Show, Cancel. Properties: title, text, icon, channel ID, priority, bigText, large image. Requires notification channels on API 26+.

call Notification1.Show
  id: 1
  title: "Reminder"
  message: "Check your tasks"
  channelId: "general"
  priority: "high"
BETA Custom Tabs

Opens URLs in Chrome Custom Tabs — a browser experience embedded within the app context. Much faster and more native than WebView. Properties: toolbar color, enter/exit animations.

set CustomTabs1.ToolbarColor
  to make color [2,4,8]
call CustomTabs1.LaunchURL
  url: "https://kodular.io"
BETA Shortcut Badge

Shows a numeric badge counter on the app icon in supported launchers (Samsung, Huawei, MIUI, etc.). Methods: SetBadge(count), ClearBadge. Not all launchers support this.

call ShortcutBadge1.SetBadge
  count: 5
// clears the badge dot:
call ShortcutBadge1.ClearBadge
Blocks — Visual Programming
The Blocks editor is where app logic is written. Blocks snap together like puzzle pieces. 10 built-in categories plus per-component blocks.
BLOCK if / if else / if else if

Conditional branching. Chain as many else-if arms as needed using the mutator (+) button on the block.

if TextBox1.Text = ""
  call Notifier1.ShowAlert
    notice: "Field empty"
else if length of TextBox1.Text < 6
  call Notifier1.ShowAlert
    notice: "Too short"
else
  // valid — proceed
BLOCK for each number from to

Numeric loop from start to end, stepping by a given increment. Loop variable holds the current number.

for each i from 1 to 10 by 1
  call DynamicLabel1.CreateLabel
    id: i
    arrangement: VertArrange1
  call DynamicLabel1.SetText
    id: i
    text: join "Row #" i
BLOCK for each item in list

Iterates every element in a list. The item variable holds the current element each pass.

initialize global cities to
  make a list
    "Jodhpur" "Jaipur" "Delhi"

for each city in global cities
  call DynamicLabel1.SetText
    id: 1  text: city
BLOCK for each key in dictionary

Iterates every key-value pair. Both key and value variables are available inside the loop body.

initialize global info to
  make a dictionary
    key: "name" value: "Abhi"
    key: "age"  value: 21

for each key value in global info
  set Label1.Text
    to join key ": " value
BLOCK while

Keeps repeating while a condition is true. Always ensure an exit path to avoid freezing the app.

initialize local n to 1
while n ≤ 5
  call DynamicLabel1.CreateLabel
    id: n
    arrangement: VertArrange1
  set n to n + 1
BLOCK if then else (value)

Inline ternary: returns one of two values based on a condition. Embed directly inside a set-property socket.

set Label1.Text to
  if Switch1.On
  then "Dark Mode ON"
  else "Dark Mode OFF"

set Label1.TextColor to
  if score > 100
  then make color [57,255,20]
  else make color [255,0,170]
BLOCK do … return

Run a sequence then return a computed value inline — avoids creating a full separate procedure.

set global result to
  do
    initialize local x to
      TextBox1.Text * 2
    initialize local y to
      x + 10
  result  y
BLOCK evaluate but ignore result

Calls a value-returning block purely for its side-effects, discarding the return value.

// Procedure returns a value but
// we only need the side-effect:
evaluate but ignore result
  call MyLogProcedure
    msg: "App started"
BLOCK open screen / with start value

Navigate to another screen by name, optionally passing a start value to it.

// Simple navigation:
open another screen
  screenName: "Screen2"

// Pass a value along:
open another screen with start value
  screenName: "ProfileScreen"
  startValue: global userId
BLOCK get start value

Reads the value that was passed when this screen was opened from another screen.

when Screen2.Initialize
  set global userId to
    get start value
  set Label1.Text
    to global userId
BLOCK close screen / with value

Close this screen, optionally returning a result to the calling screen's OtherScreenClosed event.

// Just close:
close screen

// Close and return a value:
close screen with value
  result: TextBox1.Text

// Parent receives it in:
when Screen1.OtherScreenClosed
    otherScreenName  result
  set Label1.Text to result
BLOCK close application

Fully terminates the app process. Use sparingly — confirm with the user first.

when Notifier1.AfterChoosing
    choice
  if choice = "Exit"
    close application
BLOCK get plain start text / close with plain text

Interop with non-Kodular Android activities — passes and reads raw text strings instead of typed values.

// Read text from launcher app:
when Screen1.Initialize
  set Label1.Text
    to get plain start text

// Return plain text to caller:
close screen with plain text
  text: "done"
BLOCK break

Immediately exits the innermost containing loop. Useful for early exit once a search target is found.

for each item in global dataList
  if item = TextBox1.Text
    set Label1.Text
      to "Found!"
    break

Boolean operators: and, or, not. Comparisons: =, ≠, <, ≤, >, ≥. Literals: true, false. Also: is empty test (text and lists).

if TextBox1.Text""
   and length of TextBox1.Text8
  set Label1.Text to "Strong password"

if score > 100 or lives = 0
  set Label1.Text to "Game Over"

if not Network1.IsConnected
  call Notifier1.ShowAlert
    notice: "You are offline"

Arithmetic: +, −, ×, ÷, ^ (power), √, mod, abs. Rounding: ceiling, floor, round. Trig: sin, cos, tan, asin, acos, atan2. Random: random integer / fraction. Logs: log, e^x. Bitwise ops included.

set global area to
  round (3.14159 * radius ^ 2)

// Dice roll:
set global dice to
  random integer from 1 to 6

// Compass bearing:
set bearing to
  atan2 yDelta xDelta

// Celsius to Fahrenheit:
set result to
  celsius * 1.8 + 32

Build, analyze, transform, and search text. Includes join, length, contains, starts at, trim, upcase, downcase, split, replace all, segment, and comparison functions.

// Concatenate:
set Label1.Text to
  join "Hello, "
    upcase TextBox1.Text "!"

// Split CSV:
set global parts to
  split csvLine at ","

// Replace spaces with underscores:
set Label1.Text to
  replace all TextBox1.Text
    segment: " "
    replacement: "_"

// Email validation:
if contains email piece: "@"
  set Label1.Text to "Valid"

Create, access, modify, and query lists. Includes make a list, select item, add/insert/remove/replace, length, is in list, CSV conversions, and lookup in pairs.

initialize global fruits to
  make a list
    "Mango" "Apple" "Banana"

set Label1.Text to
  select list item
    list: global fruits  index: 1

add items to list
  list: global fruits
  item: "Papaya"

remove list item
  list: global fruits  index: 2

set ListView1.Elements
  to global fruits

Key-value mappings. Create, read, update, delete keys; merge dictionaries; check has key; iterate with for-each-key; convert to/from list of pairs.

initialize global user to
  make a dictionary
    key: "name" value: "Abhimanyu"
    key: "city" value: "Jodhpur"
    key: "score" value: 9500

set Label1.Text to
  get value for key
    key: "name"
    in dictionary: global user

set value for key
  key: "score"
  value: 10000
  in dictionary: global user

Preset color chips, make color from [R,G,B] list (0–255), split a color back into [R,G,B], and pass colors to any component property.

// Neon cyan from RGB:
set Label1.TextColor
  to make color [0,245,255]

// Split a color to read its channels:
initialize local channels to
  split color
    Image1.BackgroundColor
set Label1.Text to
  join "R="
    select list item
      list: channels  index: 1

Global variables persist across all events on a screen. Local variables are scoped to their enclosing block group. Any type can be stored.

// App-wide counter:
initialize global counter to 0

when Button1.Click
  set global counter
    to global counter + 1
  set Label1.Text
    to global counter

// Block-scoped temp value:
initialize local fahrenheit to
  celsius * 1.8 + 32
set Label2.Text
  to fahrenheit

Two types: procedure do (side-effect only) and procedure result (returns a value). Both accept named parameters. Procedures can call themselves (recursion supported).

// Side-effect procedure:
to ShowError message
  call Notifier1.ShowAlert
    notice: message
  set Label1.TextColor
    to make color [255,0,60]

// Value-returning procedure:
to CelsiusToF c
  result  c * 1.8 + 32

// Calling both:
call ShowError "Invalid input"
set Label2.Text
  to call CelsiusToF 100

Get/Set any property of any component by name at runtime. Call any method generically. Register event handlers dynamically. Eliminates repetitive blocks when the same logic applies to many components.

// Get a property by name:
set global txt to
  get property
    component: Button1
    name: "Text"

// Set a property by name:
set property
  component: Label1
  name: "TextColor"
  to: make color [0,245,255]

// Call a method by name:
call method
  component: Player1
  name: "Start"
Guides & Developer Features
Tutorials, live development, extensions, keyboard shortcuts, security best practices, and advanced integration guides.
Hello World

Introductory tutorial: build your first app with a button that shows a message. Covers Designer layout and Blocks logic basics end-to-end.

Backpack

The Backpack is a cross-project clipboard in the Blocks editor. Copy blocks into the Backpack, paste them into any other project. Persists between sessions.

Concept Cards

Interactive learning cards inside the Creator editor that explain core concepts with examples, tips, and links to further documentation.

Live Dev via WiFi

Install Kodular Companion, connect to the same WiFi network, scan the QR code in Creator — your app runs live on your phone. Changes reflect instantly without rebuilding.

Live Dev via USB

Connect device via USB with USB debugging enabled. Run the Companion app, select USB mode. Useful when WiFi is unavailable or unreliable.

Extensions (.aix)

Third-party extension files add components beyond what Kodular ships. Import via the Extensions panel in the Designer. Developers can create extensions using the Kodular Extension API in Java.

Keyboard Shortcuts

Ctrl+Z/Y (undo/redo), Ctrl+C/V (copy/paste blocks), Ctrl+D (duplicate block), Ctrl+A (select all), Delete (remove block). Ctrl+scroll to zoom the blocks workspace.

Monetization Guide

Step-by-step: create AdMob ad units in Google console, enter ad unit IDs in Kodular components, enable test mode during development, switch to production before release.

Firebase Rules Guide

Configuring Firebase Realtime Database security rules: public read, authenticated write, per-user data isolation, and custom validation rule patterns.

Securing Firebase

Best practices: environment variables for credentials, strict database rules, server-side token validation, what not to hardcode in the app APK.

Dynamic Cards Guide

Tutorial: use Dynamic Card View + Dynamic Label + Firebase to build a real-time data feed. Common pattern for news, social, and listing apps.

Staged App Updates

Using Firebase Remote Config as a feature flag system for staged rollouts — push incremental feature changes to subsets of users without releasing a new APK build.

Targeting Notifications

Using OneSignal Management to send segmented push notifications. Tag users based on behavior, then target notifications to specific segments.

Pollfish Surveys Guide

Integrate Pollfish surveys as a monetization layer. Initialize on screen load, show at natural breakpoints, handle completion callbacks to reward the user.