The main web IDE — drag components onto a phone canvas, then wire logic with blocks. No install required.
Control panel for managing projects, account settings, and app data.
Forums for help, bug reports, extensions, and ideas.
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.
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: ""
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"
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
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
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
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"
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"
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
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"
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 ""
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
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
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
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"
Fires when the back arrow in the app bar is tapped. Separate from the device back button event.
when Screen1.TitleBarBackButtonClicked close screen
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
Triggers Android's runtime permission dialog for dangerous permissions. Param: permissionName (e.g. android.permission.CAMERA).
call Screen1.AskForPermission permissionName: "android.permission.CAMERA"
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"
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"
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"
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"
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
Programmatically open or close the side drawer. Useful for hamburger button clicks.
when HamburgerBtn.Click call Screen1.SideMenuOpen when CloseBtn.Click call Screen1.SideMenuClose
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
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
Programmatically show or hide the Android soft keyboard.
call Screen1.ShowKeyboard // focus a TextBox first: set TextBox1.Focused to true call Screen1.HideKeyboard
Minimizes the app (like pressing Home) without destroying it.
when BackButton.Click call Screen1.MoveTaskToBack
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
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]
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 ")"
Manually triggers the About This Application dialog defined in Screen properties.
when AboutBtn.Click call Screen1.ShowAboutApplication
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"
Sets the Material Design theme. Options: AppTheme, AppTheme.Dark, AppTheme.Light. Set in designer only.
Three color slots used across Material UI elements like the ActionBar, FABs, and highlights.
App bar title text, background color, and optional subtitle below the main title.
portrait, landscape, sensor, user, or unspecified. Can be changed at runtime from blocks.
If true, the screen scrolls vertically. If false, content is constrained to device height.
Custom colors for the top status bar and bottom nav bar. Works from API 21+.
Toggle visibility. Hiding both bars gives a full immersive (kiosk-style) experience.
Show a loading screen while the app initializes. Set a custom image asset for the splash.
Transition animations: default, fade, zoom, slidehorizontal, slidevertical, none.
Android package ID (e.g. com.myapp.hello). 8–35 chars, 3–5 dot-separated words, ASCII only.
Integer version code (must increment for Play Store) and string version name (e.g. "2.1.0").
Enables right-to-left layout mirroring for Arabic, Hebrew, Urdu, etc. Set on Screen 1.
Responsive (uses actual device resolution) or Fixed (designed for one size, auto-scaled).
Prevents the device display from turning off while the app is in use. Advanced property.
When true, images are loaded at full quality. May increase memory usage on older devices.
Minimum Android API required to install. Default 21 (Android 5.0). Advanced property.
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]
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]
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
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
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"
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]
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
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
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"
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
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
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
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
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
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]
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
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
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]
Fully customizable progress bar with custom drawable or animated asset resources.
set CustomProgress1.Value to 50 set CustomProgress1.Drawable to "my_progress_bar.xml"
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
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"
Lays child components side by side in a row. Properties: width, height, align horizontal/vertical, background color, padding, image.
Stacks child components in a column top to bottom. Same alignment and style properties as horizontal.
Horizontal arrangement with overflow scrolling — ideal for carousels of cards or horizontal item lists.
Vertical arrangement with a vertical scrollbar for long content that exceeds screen height.
Grid of rows and columns. Specify column and row count. Good for form-like or data-grid layouts.
Material Design card container with elevation shadow. Properties: corner radius, elevation, full-clickable, stroke color and width.
Scrollable grid of items. Specify column count; items auto-fill rows. Similar to Android's native GridView widget.
Invisible spacer component. Set width and height to create gaps or push components apart.
Wraps a layout and adds pull-to-refresh gesture support. Event: Refresh. Method: Stop Refreshing.
Scrollable list of text items. Properties: elements list, text color, background, selection color. Event: After Picking (returns selection).
List with a thumbnail image + primary title + secondary subtitle per row. Pass image paths and text as parallel lists.
Slides up from the screen bottom as a panel. Methods: Show, Hide. Wrap any layout inside as content.
Ready-made chat UI with message bubbles (sent/received), timestamps, and user avatars. Method: AddMessage.
Full-screen swipeable image gallery. Pass a list of image URLs or local file paths.
Flips between multiple child views with animation. Methods: ShowNext, ShowPrevious. Simple carousel for onboarding slides.
Low-level drawing surface for Canvas or video rendering. Used in advanced custom drawing and game scenarios.
Embedded browser (WebView). Methods: GoToURL, GoBack, GoForward, LoadHTML, EvaluateJavaScript. Events: Page Loaded, Got Web View String.
Android-style bottom tab bar with icons and labels. Up to 5 tabs. Event: Tab Item Selected (returns tab ID).
Top tab bar with swipeable screens (used with View Pager). Properties: tab color, indicator color, text color.
Swipeable page container that syncs with Tab Layout. Pages are added programmatically.
Pre-built drawer/side menu layout component. Works differently from Screen's Side Menu method — is itself the drawer container.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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]
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
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
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]
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
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"
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
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
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"
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
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
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
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"
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
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"
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
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]
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
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"
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"
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"
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
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"
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
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
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
Initiates a phone call. Method: MakePhoneCall. Property: PhoneNumber. Requires CALL_PHONE permission grant.
set PhoneCall1.PhoneNumber to "+91 98765 43210" call PhoneCall1.MakePhoneCall
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
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
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"
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
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"
Manage user segmentation for targeting. Methods: SendTag, DeleteTag, SetExternalUserId, RemoveExternalUserId, GetTags.
call OneSignalMgmt1.SendTag key: "plan" value: "premium" call OneSignalMgmt1.SetExternalUserId externalId: FirebaseAuth1.Uid
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"
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
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"
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"
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
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
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
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
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
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
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
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"
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
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]
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
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
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
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
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
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"
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
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
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
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
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..."
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
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
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!"
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
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"
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"
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
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
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"
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
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
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
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"
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
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
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"
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
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
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
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
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"
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
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
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
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"
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
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
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
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
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
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
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 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 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
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 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 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
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!"
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
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
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
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
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
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"
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
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
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
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
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
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!"
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
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
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
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
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"
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"
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
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
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
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
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
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
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]
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
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"
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
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
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
Fully terminates the app process. Use sparingly — confirm with the user first.
when Notifier1.AfterChoosing choice if choice = "Exit" close application
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"
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.Text ≥ 8 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"
Introductory tutorial: build your first app with a button that shows a message. Covers Designer layout and Blocks logic basics end-to-end.
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.
Interactive learning cards inside the Creator editor that explain core concepts with examples, tips, and links to further documentation.
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.
Connect device via USB with USB debugging enabled. Run the Companion app, select USB mode. Useful when WiFi is unavailable or unreliable.
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.
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.
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.
Configuring Firebase Realtime Database security rules: public read, authenticated write, per-user data isolation, and custom validation rule patterns.
Best practices: environment variables for credentials, strict database rules, server-side token validation, what not to hardcode in the app APK.
Tutorial: use Dynamic Card View + Dynamic Label + Firebase to build a real-time data feed. Common pattern for news, social, and listing apps.
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.
Using OneSignal Management to send segmented push notifications. Tag users based on behavior, then target notifications to specific segments.
Integrate Pollfish surveys as a monetization layer. Initialize on screen load, show at natural breakpoints, handle completion callbacks to reward the user.