Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
The label component allows you to display text in your app.
The label component is used to display read-only text and can be made clickable using blocks.
Labels work alongside other user interface components like buttons, images, and text inputs to create a cohesive and intuitive user experience.
You can customize your label using the following properties:
To access the blocks specific to the label component:
On the Design tab, add a Label component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the label component.
Color
Color
Color of the text that appears on the label
Font Weight
True/False
Make the label's text bold
Font Style
True/False
Make the label's text italicized
Underline
True/False
Underline the label's text
Strikethrough
True/False
Apply strikethrough formatting to the label's text. You can further select the strikethrough's color and style.
Text Align
Select from menu
Set alignment of the text relative to the label's outline
Font Size
Number
Size of the text that appears on the label
Number Of Lines
Number
Maximum amount of lines of text that your label will display
Height
number in pixels
The label's height is defined by a custom number of pixels.
Width
number in pixels
The label's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the label's to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the label in the same aspect ratio as the design, regardless of the device size.
Background Color
color
The background color of the label.
Border: Style
solid
The label's border is a solid line.
Border: Style
dotted
The label's border is a dotted line.
Border: Style
dashed
The label's border is a dashed line.
Border: Color
color
The label's border is the color selected.
Border: Width
number in pixels
The width of the label's border is defined by a custom number of pixels.
Border: Radius
number in pixels
The radius of the label border’s corners is defined by a custom number of pixels.
Shadow: Color
color
The label's shadow is the color selected.
Shadow: Opacity
number between 0 and 100
The opacity of the label's shadow.
Shadow: Radius
number in pixels
The radius of the label shadow’s corners is defined by a custom number of pixels.
Shadow: Offset
number in pixels
How far the label's shadow should be offset, in height and width, is defined by a custom number of pixels.
A drawer of label-specific blocks opens.
Set the label's font size.
Get the label's font size.
Set the label's font.
Get the label's font.
Set the label's custom font.
Get the label's custom font.
Set the label's number of lines.The number of lines property is used to work with the maximum number of lines of text that should be displayed in a label before that label starts to scroll.
Get the label's number of lines.
Set the label's line height.
Get the label's line height.
Set the label's color. Best practice is to use one of the to set this value, but HEX or RGB values may be used too.
Get the label's color.
Set the label's background color with the color of the label itself i.e. the region behind the label text. Best practice is to use one of the to set this value but HEX or RGB values may be used too.
Get the label's background color.
Set the label's font style. The font style property can be either "Normal" or "Italic".
Get the label's font style.
Set the label's font weight. The font weight value can be either "Normal", "Bold" or a value from 100 to 900
Get the label's font weight.
Set the label's Text Align. Text Align can be any of the following values: Auto, Left, Right, Center, or Justify.
Get the label's Text Align.
Set the label's border color. Best practice is to use one of the to set this value but HEX or RGB values may be used too.
Get the label's border color.
Set the label's border width.
Get the label's border width.
Set the label's height. Acceptable input values are: Number of Pixels, Percentage Height, "Fit Contents", or "Fill Container."
Get the label's height.
The Computed Height block gets the on-screen dimensions of the label, after it has been rendered on-screen. The value returned is an integer, representing the size of the label in pixels.
Set the label's width. The width blocks work with the Width property of the label component. Acceptable values are.
Get the label's width.
The Computed Width block gets the on-screen dimensions of the label, after it has been rendered on-screen. The value returned is an integer, representing the size of the label in pixels.
Set the label's Visibility. The visible blocks are used to show or hide the entire image component. Acceptable values are: true or false.
Get the label's Visibility.
Set the label's X coordinate.
Get the label's X coordinate.
Set the label's Y coordinate.
Get the label's Y coordinate.
Text
Text
Text that appears on the label
Font
Select from menu
Font used to display label's text
Custom Font (mobile only)*
OTF or TTF file
Font used to display label's text
Writing Direction
(iOS and web only)
Select from list [left-to-right, right-to-left]
Writing direction of your label's text
Letter Spacing
(iOS and web only)
number
X
coordinate value
Position of the upper left corner of the label on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Visible
visible
Users can see the label.
Visible
invisible
This event will fire when the user clicks on the label.
Set the label's text. This property corresponds to the text that is displayed in the label component.
Custom Fonts may only be available for Creators on certain Thunkable plans. Read more about our pricing plans here.

Spacing between letters of your label
Position of the upper left corner of the label on the Y-axis, where the top of the screen is Y=0.
Users cannot see the label.
Get the label's text.






































The image component allows you to display pictures in your app and can be made clickable using blocks.
The image component is used to display visual content, such as pictures, icons, logos, and other types of images and can be made clickable using blocks. The image component is foundational in creating visually appealing and engaging mobile app interfaces.
You can customize your image using the following properties:
Center: The image is displayed at its original size within the container, and it is centered both vertically and horizontally. This means that if the image is larger than the container, parts of it may extend beyond the container's edges.
Cover: The image is resized to completely cover the container while maintaining its aspect ratio. This mode ensures that the entire container is filled with the image, and any excess image parts are cropped if necessary. This can result in parts of the image being clipped.
Contain:
When working with these resize modes, it's important to consider the context of your app's design and the type of content you're displaying. Different situations might call for different resize modes to achieve the desired visual outcome. For instance, cover might be suitable for background images, while contain could work well for displaying profile pictures. Always strive to maintain a visually pleasing and user-friendly experience while keeping the specific characteristics of each resize mode in mind.
To access the blocks specific to the image component:
On the Design tab, add an Image component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the image component.
Repeat: The image is tiled or repeated to fill the entire container, both horizontally and vertically. This mode is often used for creating patterns or backgrounds that seamlessly repeat across the container.
Stretch: The image is resized to fully cover the container without maintaining its original aspect ratio. This can distort the image and may result in an unnatural appearance, so it's generally not recommended for most scenarios.
Height
number in pixels
The image's height is defined by a custom number of pixels.
Width
number in pixels
The image's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the image to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the image in the same aspect ratio as the design, regardless of the device size.
Border: Color
color
The image's border is the color selected.
Border: Width
number in pixels
The width of the image's border is defined by a custom number of pixels.
Border: Radius
number in pixels
The radius of the image border’s corners is defined by a custom number of pixels.
Shadow: Color
color
The image's shadow is the color selected.
Shadow: Opacity
number between 0 and 100
The opacity of the image's shadow.
Shadow: Radius
number in pixels
The radius of the image shadow’s corners is defined by a custom number of pixels.
Shadow: Offset
number in pixels
How far the image's shadow should be offset, in height and width, is defined by a custom number of pixels.
A drawer of image-specific blocks opens.
Set the image component's .
Get the image component's .
Set the image component's filter.
Get the image component's filter.
Set the image component's height.
Get the image component's height.
Returns the height of the image component in pixels after it has been rendered on-screen.
Set the image component's width.
Get the image component's width.
Returns the width of the image component in pixels after it has been rendered on-screen.
Set whether the image component is visible on the screen.
Get whether the image component is visible on the screen.
Set the position image the upper left corner of the image on the X-axis, where the left side of the screen is X=0.
Get the position of the upper left corner of the image on the X-axis, where the left side of the screen is X=0.
Set the position of the upper left corner of the image on the Y-axis, where the top of the screen is Y=0.
Get the position of the upper left corner of the image on the Y-axis, where the top of the screen is Y=0.
Picture
PNG, JPG, GIF, etc. Can also use a URL that ends in a file extension.
The image file displayed in the image component.
Picture Resize Mode
Select from: cover, contain, stretch, repeat, and center.
Define how the image is displayed if the file and the image component have different dimensions/aspect ratios. See the definitions of each setting below.
Filter
Select from: None, Blur, Brightness, Contrast, Grayscale, Invert, Sepia, and Opasit
Define the filter that will be applied in the image component.
X
coordinate value
Position of the upper left corner of the image on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Visible
visible
Users can see the image.
Visible
invisible
This event will fire when the user clicks on the image.
Set the image component's Picture.
Using SVG files might result in images not being displayed correctly.
Position of the upper left corner of the image on the Y-axis, where the top of the screen is Y=0.
Users cannot see the image.
Get the image component's Picture.



There are a number of ways that Modules can speed up app development or enhance apps themselves.
Reusable designs and functionality. Creators can use Modules to help them avoid repeating designs and blocks across multiple screens. Today, when copying sets of components, the associated blocks will not copy. However, when copying Modules that contain components, not only are the designs preserved but also the associated Blocks and functionality.
Blocks organization. While today you can visually collapse certain Block clusters, you may still have many blocks for variables, functions, or other blocks. By compartmentalizing them to just the components where they’re needed, you can keep your Blocks workspace more tidy and easier to understand.
Easier updates. Have a change for a common feature across your app? Now you can just update the Module once and it will update everywhere the feature exists within the project.
Shared advanced capabilities. Sometimes you want functionality that you’re unable to build or are unfamiliar with. Through Module publishing and importing, Creators will be able to share what they’ve built with one another.
To help you get started on building Modules, we’ve assembled a small list of samples you can use directly or even remix and make your own. To view the samples, click the plus icon next to the Add Components library on the project’s Design tab.
Stepper. A simple user interface (UI) element that allows users to easily increment or decrement the value within a Text Input. Using its associated blocks, you can obtain the value whenever it changes or directly set the value when you need to reset it. ()
Sign-In/Up. When paired with a valid account, app users can create accounts and sign into the app. Simply use the Module’s “successful sign up” and “successful sign in” blocks to return the new or returning user’s Firebase UUID. ()
User Profile. This is a design template for displaying different app users’ details. You can remix this module and apply your own stylings. Once added to your project, you can set the profile fields directly using the available blocks or change multiple fields at once using the “set profile” block. Note that if left empty, a field will display the default value from its parameters. (
In-App Notification. Customize an in-app notification to match your app's stylings. Note that in order to use this Module, you will need to place it within a Group and toggle its visibility based on when you want the notification displayed or not. ()

There are two data viewer components: the data viewer list and the data viewer grid. Each of these acts as a presentation layer for your data source.
Thunkable provides various default data viewer list and data viewer grid templates, but saving a customized layout component as a data viewer allows you to display your data in a way that reflects your brand design and preferences.
Custom Data ViewerWhen a data source powers your app, you can continuously update your app contents without having to republish it. It allows you to build a dynamic app that can create, read, update, and delete data. Thunkable supports Google Sheets, Airtable, Webflow, and local tables as data sources.
Data SourcesBy incorporating the data source blocks into your app, you can allow users to create, read, update, and delete data in your data source when they interact with the data viewer.
Data Sources BlocksThe switch component is a two-state toggle that allows users to select between two options. It is commonly used in selecting on/off for things like sound, Bluetooth, WiFi, etc.
Value
To access the blocks specific to the switch component:
On the Design tab, add a Switch component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the switch component.
This event fires every time the switch is clicked.
Outputs
newValue - returns the new value of the switch (true or false) each time the switch is clicked.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a group component to be enabled for a user until they've typed a set number of characters into a text input component, you can use the group's dark green set group's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
Height
number in pixels
The switch's height is defined by a custom number of pixels.
Width
number in pixels
The switch's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the switch to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the switch in the same aspect ratio as the design, regardless of the device size.
A drawer of switch-specific blocks opens.
True/False
Initial value of switch
Tint Color
Color
Color of background when switch is false
On Tint Color
Color
Color of background when switch is true
Thumb Tint Color
Color
Color of the switch's slider
Disabled
True/False
Toggle whether value switch can be changed by user
X
coordinate value
Position of the upper left corner of the switch on the X-axis, where the left side of the screen is X=0.
Y
coordinate value

Position of the upper left corner of the switch on the Y-axis, where the top of the screen is Y=0.


In this short guide, we will go through the entire process of creating a module and using a module within a project.
To demonstrate all aspects of Modules, we will be creating a simple module that will show the text “Hello World” in many different styles and themes. When someone clicks on “Hello World”, the background color will change.
When creating a module, the first step would be to plan what we want our module to do and how we want it to function.
First, we can think about what components we want to use first. This module will be very straightforward as we want to display text, so we will use a label component.
Next, we want to consider how it will function. It’s important to think about Modules as a separate entity in your project. It doesn’t have any way to communicate with our project unless we make that connection.
For this module, we want to display “Hello World” in many different styles. So we need to have a way to set “styles” or “modes”. When it comes to setting, there are two places where we can set. The first is done through Properties and is in the Designer tab. The second is done through Methods and is in the Blocks tab. Setting in the Designer tab would allow us to choose a design before the app loads while setting in the blocks lets us change the design while the app is running. For this module, we will opt for both options. Thus, we will need to create a connection for the project to tell the module what style of “Hello World” to display.
Another aspect to consider is whether we would like any information from the module. Information can also take the form of any actions or events taking place in the module that we would like to be able to access or know of in the project. We can do this through Events and the Blocks tab. For our module, I would like to know when someone clicks on “Hello World” or when it changes.
Although there aren’t concrete plans, it is recommended to have a general idea of what you want your module to do.
First, we will need to create a new module.
Now that we have a new module, let's start building our Module.
A module’s properties can be found by clicking on the gear icon next to the Module Workspace in the component tree. Module properties can be used to pass information from the project to the module through the Designer before the app loads up.
It is recommended that modules be published and tested throughout the development process. One important thing to note is that once we publish the module, method parameters, properties, events, and methods can not be deleted.
Module Events can be found by clicking on the gear icon next to the Module Workspace under UI Components. Module events can be used to pass information from the module to the project. You can think of events as a doorbell. Anytime the module runs that block, a doorbell is pressed to alert the project
As you add features and make fixes to your module, you will need to push those updates out to all the projects that imported your module already.
Module Methods allow your project to give commands to run blocks inside your module. This is also how you can have your project pass information from your project to your module through blocks.
Now that you have created a new feature, it is recommended to publish and test your module following the steps from and .
Like regular projects, if there is a module that looks interesting that you would like to use, modify, or look at its components or blocks, you can remix modules in projects. Give it a try with the project and module in this guide. A link to the project can be found .

Create powerful, no-code, data-driven apps connected directly to Google Sheets, Airtable, or stored locally.
The data viewer components act as a display layer for the data in a connected data source. The data viewer list displays your data as a list.
Data Source
The "Item Click" event block is fired when any list item in the data viewer is clicked. It returns "row id" which corresponds to the unique Thunkable row ID of the item that was clicked. The row id is most useful when used with the the .
The left and right swipe click events are fired when these buttons are clicked. Both return a "row id" to identify which row was clicked when using the .
Refresh the data viewer list to sync with the connected data source.
Set and get of the data viewer list.
If the data viewer list isn't the best layout to display your data, one of these other options may be more appropriate:
To access the data sources blocks, you must first connect a data source. Then, by incorporating the data source blocks into your app, you can allow users to create, read, update, and delete data in your data source when they interact with the data viewer.

Height
number in pixels
Height of the data viewer list in pixels.
Width
number in pixels
Width of the data viewer list in pixels.
Resize Mode
Stretch
Stretches the data viewer list to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the data viewer list in the same aspect ratio as the design, regardless of the device size.
References chosen data source
The data source your data is pulled from.
Table
References chosen table in data source
The table within your data source your data is pulled from.
Filter View
References filter view in table
The filter view within your table your data is pulled from.
Row Appearance
Select from list
How your data will be displayed in your app.
Populate Data
Select from lists
Map your data source's columns to the fields they will be displayed in.
Left Swipe
True/False
Toggle whether your end user can swipe a list item to the left to view an additional button. Reveals left swipe button settings if set to true.
Left Swipe Button Text
Text
Text of left swipe button when a user swipes list item to the left.
Left Swipe Button Text Color
Color
Text color of left swipe button when a user swipes list item to the left.
Left Swipe Button Background Color
Color
Background color of left swipe button when a user swipes list item to the left.
Right Swipe
True/False
Toggle whether your end user can swipe a list item to the right to view an additional button. Reveals right swipe button settings if set to true.
Right Swipe Button Text
Text
Text of right swipe button when a user swipes list item to the right.
Right Swipe Button Text Color
Color
Text color of right swipe button when a user swipes list item to the right.
Right Swipe Button Background Color
Color
Background color of right swipe button when a user swipes list item to the right.
Empty text
Text
Text that will be displayed if there is no data in your data source to fill a data viewer field.
X
coordinate value
Location of the top left corner of the data viewer list on the X-axis, where the left-hand side is X=0.
Y
coordinate value
Have feedback on this doc? Please take a moment to share your feedback here: Thunkable Docs Feedback. Your valuable insights will help us improve and better serve you in the future.
Location of the top left corner of the data viewer list on the Y-axis, where the top side is Y=0.
User interface (UI) components make up the visual aspect of your app. Combine, style and customize Thunkable UI components to give your app personality and style that best suits your brand.
Each UI component you add to your app has an associated properties panel unique to that component. Using the various settings in the properties panel, you can style and customize your Thunkable UI components to give your app personality and style that best suits your brand.
A label's properties panel is displayed on the right in the example below. Note its unique properties, such as the label's text, font, color, etc.
The component tree can be found at the top left corner of your project's designer. The component tree contains a list of the UI components in your app. The expand and collapse arrows show or hide the nested UI components.
Once you’ve perfected a UI component on the Design tab of a drag and drop project, you can duplicate it using copy-and-paste keyboard shortcuts.
To copy and paste a component:
Click on a component name in the component tree (A) or the component within a screen in your workspace (B).
Type ctrl+c or command+c on Mac, and ctrl+c on PC, to copy the component.
Type ctrl+v
You can delete UI components from the component tree or the component's properties panel.
To delete a UI component from your project:
Hover over a component's name in the component tree.
Click the trash can icon.
Confirm the deletion.
To delete a UI component from your project:
Click on a component name in the component tree or the component within a screen in your workspace.
Click the vertical ellipsis in the upper right of the component's properties panel.
Select Delete.
Learn more about each of the UI components:
Once you have designed the UI you want, you can start adding functionality to your app with blocks and app features!
Click and drag the new component to position it as you desire.
Confirm the deletion.







The PDF reader component lets users view and pinch to zoom PDF documents within the app interface. It serves as a tool for displaying various types of content, such as reports, forms, contracts, or educational materials.
File
There are two ways to set a file to display in the PDF reader.
Upload PDF File You can upload a PDF file as an asset in your project. If you opt for this option, be mindful of the Thunkable 50 MB app size limit.
Enter PDF URL
Enter the URL of the PDF you want to show in your project. The link must end in .pdf.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a button to be enabled for a user until they've typed a set number of characters into a text input component, you can use the button's dark green set button's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
Height
Height of PDF reader in pixels.
Number
Width
Width of PDF reader in pixels.
Number
Resize Mode
Define dimensions of the PDF reader component.
Select from list [Stretch, Float in Place]
PDF to be displayed in the PDF reader
PDF file or URL ending in .pdf
X
The location of the top left corner of the PDF reader on the X-axis, where the left-hand side is X=0.
Number
Y
The location of the top left corner of the PDF reader on the Y-axis, where the top side is Y=0.

Number
The animation component is powered by Lottie. It makes adding animations as easy as adding images. For designers, animations can be created in Adobe After Effects or Haiku and imported as a .json file. For the rest of us, there is a large and growing community of designers who have created free and editable animations that you can easily add to your app.
See a video tutorial for using animations in your Thunkable project here:
This event fires when the user clicks on the animation component. You can trigger actions to occur when the animation is clicked.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a button to be enabled for a user until they've typed a set number of characters into a text input component, you can use the button's dark green set button's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).


Height
Height of animation in pixels
Number
Width
Width of animation in pixels
Number
Resize Mode
Define dimensions of the animation component.
Select from list [Stretch, Float in Place]
Animation
The name of the JSON animation file you want to display
Text
Loop
Toggle whether or not the animation loops
True/False
X
Location of top left corner of animation on X-axis, where the left hand side is X=0
Number
Y
Location of top left corner of animation on Y-axis, where the top side is Y=0
Number

Create interactive gaming apps with the canvas component.
The canvas component is a touch-sensitive panel that enables the movement of objects with velocity, collisions, and the ability to bounce off each other. It is most often used to create dynamic games and experiences that involve touching the device’s screen.
To add a canvas to your app, drag and drop the canvas component into the app builder.
When you click on the Canvas in your component tree, Canvas tab will appear. Click on this tab to customize your canvas
The three elements of a Canvas are the Stage, the Sprites, and the Canvas Label.
The Stage is the background of your Canvas. You can set a background color or background picture, a border color, and the stage's Height and Width. You can click and drag your Sprites on the stage in the Canvas tab.
You can set Gravity of the Stage along the X and Y axis. The Sprites on the stage can be toggled to ignore gravity or not. If a Sprite is affected by gravity, it will be pulled in the direction of the gravity.
Your Canvas Stage will automatically scale up in order to match the size of the device screen. If the aspect ratio of the Stage does not match the aspect ratio of the device, you can use Stage Scaling Mode to resize the background to fill the device screen.
Scale: The aspect ratio of the background will be maintained, and the background will be scaled up. May result in some of the background being cropped.
Stretch: The background image will be stretch in order to fill the screen. May result in the background image being distorted.
Select how you want your background image to be centered when it is scaled to match the device screen.
Can be set to center, center horizontally only, center vertically only, or none.
You can enable Touch Drawing on your Screen. You can set the Drawing Color to choose the color you draw in. You can set the Drawing Width to choose the thickness of the line you draw on the stage.
You can add multiple stages to a Canvas component, in the same way you can add multiple Screens to an app project. when you have selected your Canvas tab, click on the + next to your Stage name to add another Stage to the Canvas.
Each Stage has its own Sprites, background color, gravity, etc.

The Rich Text component is used to compose and display formatted text, and can also be made clickable using blocks.
Rich Text works alongside other user interface components like buttons, images, and text inputs to create a cohesive and intuitive user experience.
You can customize your Rich Text component using the following properties:
To access the blocks specific to the Rich Text component:
On the Design tab, add a Rich Text component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the Rich Text component.
True/False
Make the text bold
Color
Color
Color of the text that appears on the component
Highlight Color
Color
The color in which to highlight the text
Strikethrough
True/False
Draw a line through the select text
Underline
True/False
Underline the selected text
Italic
True/False
Make the selected text italicized
Text Align
Select from menu
Set alignment of the text relative to the outline
Line Spacing
Number
Maximum amount of lines of text that will display
Visible
True/False
Display or hide the component
Height
number in pixels
The Rich Text component's height is defined by a custom number of pixels.
Width
number in pixels
The Rich Text component's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the Rich Text component to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the Rich Text component in the same aspect ratio as the design, regardless of the device size.
Background Color
color
The background color of the Rich Text.
Border: Style
solid
The Rich Text component's border is a solid line.
Border: Style
dotted
The Rich Text component's border is a dotted line.
Border: Style
dashed
The Rich Text component's border is a dashed line.
Border: Color
color
The Rich Text component's border is the color selected.
Border: Width
number in pixels
The width of the Rich Text component's border is defined by a custom number of pixels.
Border: Radius
number in pixels
The radius of the Rich Text component's border’s corners is defined by a custom number of pixels.
Shadow: Color
color
The Rich Text component's shadow is the color selected.
Shadow: Opacity
number between 0 and 100
The opacity of the Rich Text component's shadow.
Shadow: Radius
number in pixels
The radius of the Rich Text component's shadow’s corners is defined by a custom number of pixels.
Shadow: Offset
number in pixels
How far the Rich Text component's shadow should be offset, in height and width, is defined by a custom number of pixels.
Replace any text with the provided string. This will set it to the “default component styling” (no modifiers).
Get the component's text.
Set the background color of the component.
Get the background color.
Set the height of the component.
Get the height of the component.
The Computed Height block gets the on-screen dimensions of the component, after it has been rendered on-screen. The value returned is an integer, representing the size of the Rich Text component in pixels.
Set the width of the component.
Get the width of the component.
The Computed Width block gets the on-screen dimensions of the Rich Text component, after it has been rendered on-screen. The value returned is an integer, representing the size of the Rich Text component in pixels.
Choose whether to display or hide the component.
Get the True or False value for the Visible state.
Set the position of the component on the X-Axis, where the left side of the screen is X=0.
Get the position of the component on the X-Axis.
Set the position of the component on the Y-Axis, where the top of the screen is Y=0.
Get the position of the component on the Y-Axis.
Set the font of the component's text.
Set the font size of the component's text.
Make all the text Bold or Normal.
Set all the text to Italic.
Underline all the text.
Draw a line through all the text.
Highlight all the text in a specific color.
Set the line spacing.
Set all the text to a specific color.
Set the component's Text Align. Text Align can be any of the following values: Auto, Left, Right, Center, or Justify.
Text
Text
Text that appears on the Rich Text Component
Font
Select from menu
Font used to display component's text
Font Size
Number
Size of the text
X
coordinate value
Position of the upper left corner of the Rich Text component on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Visible
visible
Users can see the Rich Text.
Visible
invisible
This event will fire when the user clicks on the Rich Text.
Removes all text from the component.
Reset all text formatting (including paragraph modifiers) to the default styling (i.e., the styling that a brand new Rich Text component has before it is modified).
Using Custom Fonts may only be available for Creators on certain Thunkable plans. Please refer to our pricing page for more information: Thunkable pricing.

Font Weight
Position of the upper left corner of the Rich Text component on the Y-axis, where the top of the screen is Y=0.
Users cannot see the Rich Text.

The Simple List component allows you to add, view and click on items in a list.
Simple lists are used to organize and display information in an easy-to-read format. They help present data or options in a structured manner, making it convenient for users to scan through and find what they need quickly. Think of a list as a tidy way to show items like contacts, tasks, or menu options, saving space and making navigation smoother within an app.
You can customize the Simple List with the following properties:
To access the blocks specific to the simple list component:
On the Design tab, add a Simple List component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the simple list component.
This event fires and performs an action when the user clicks on an item within a simple list component.
Outputs
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a group component to be enabled for a user until they've typed a set number of characters into a text input component, you can use the group's dark green set group's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
Sample Blocks Combinations: Set Simple List's Text Items to
There are various ways you can define the items in a list using blocks. Using the "set simple list's text items to" block, you can:
Type each list item.
Make the list from a string of text.
Pull list items from a column of a connected . This method allows you to create a dynamic simple list where the information displayed to the user changes whenever you change your cloud-based data in the data source.





























Set font size of Text Items
Number
Show Arrow
Toggle whether arrow is shown beside text items
True/False
Height
Set the Height of your Simple List in pixels
Number
Width
Set the Width of your Simple List in pixels
Number
Resize Mode
Define dimensions of the Simple List component/container
Select from list [Stretch, Float in Place]
Border Color
Set color of Simple List's border
Color
Border Width
Set width of Simple List's border in pixels
Number
Border Radius
Set radius of corners for Simple List's border in pixels
Number
Shadow Color
Color of Simple List's shadow
Color
Shadow Opacity
Opacity of Simple List's shadow
Number between 0 and 100
Shadow Radius
Radius of corners of Simple List's shadow in pixels
Number
Shadow Offset
How far Simple List's shadow should be offset, in Height and Width, in pixels
Number
A drawer of simple list-specific blocks opens.
Text Items
Set text items of Simple List
List of text items
Color
Set font color of Text Items
Color
Background Color (text items)
Set background color for the items in the Simple List
Color
Writing Direction (iOS and web app only)
Set writing direction of text items
Select from list [auto, ltr, rtl]
Background Color (container)
Set the background color of the Simple List container.
X
Set the location of your Simple List on the X-axis in pixels
Number
Y
Set the location of your Simple List on the Y-axis in pixels
Visible
Toggle whether your end users can see the Simple List
True/False
Border Style
Set style of Simple List's border
Item
Text of selected item
String
Index
Position of item in simple list (starting with 1)
On Android devices, it is a known limitation that it is not possible to have three levels of nested scrollable components. If your list doesn't scroll you have to set at most one component as scrollable or only the screen scrollable outside of the simple list component.
Have feedback on this doc? Please take a moment to share your feedback here: Thunkable Docs Feedback. Your valuable insights will help us improve and better serve you in the future.



Font Size
Color
Number
Select from list [solid, dotted, dashed]
Number






Create powerful, no-code, data-driven apps connected directly to Google Sheets, Airtable, or stored locally.
The data viewer components act as a display layer for the data in a connected data source. The data viewer grid displays your data in a grid.
Data Source
The "Item Click" event block is fired when any grid item in the data viewer is clicked. It returns "row id" which corresponds to the unique Thunkable row ID of the item that was clicked. The row id is most useful when used with the the .
Refresh the data viewer grid to sync with the connected data source.
Set and get of the data viewer grid.
If the data viewer grid isn't the best layout to display your data, one of these other options may be more appropriate:
To access the data sources blocks, you must first connect a data source. Then, by incorporating the data source blocks into your app, you can allow users to create, read, update, and delete data in your data source when they interact with the data viewer.

Height
number in pixels
Height of the data viewer grid in pixels.
Width
number in pixels
Width of the data viewer grid in pixels.
Resize Mode
Stretch
Stretches the data viewer grid to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the data viewer grid in the same aspect ratio as the design, regardless of the device size.
References chosen data source
The data source your data is pulled from.
Table
References chosen table in data source
The table within your data source your data is pulled from.
Filter View
References filter view in table
The filter view within your table your data is pulled from.
Grid Appearance
Select from list
How your data will be displayed in your app.
Populate Data
Select from lists
Map your data source's columns to the fields they will be displayed in.
Horizontal Scroll
True/False
True - data viewer scrolls horizontally
False - data viewer scrolls vertically
Empty text
Text
Text that will be displayed if there is no data in your data source to fill a data viewer field.
X
coordinate value
Location of the top left corner of the data viewer grid on the X-axis, where the left-hand side is X=0.
Y
coordinate value
Have feedback on this doc? Please take a moment to share your feedback here: Thunkable Docs Feedback. Your valuable insights will help us improve and better serve you in the future.
Location of the top left corner of the data viewer grid on the Y-axis, where the top side is Y=0.
The checkbox component allows users to select one or more options from a set. They're like little digital checkboxes you see when you want to choose multiple options simultaneously, such as selecting items in a to-do list or filtering search results. These components play a pivotal role in enhancing user experience by providing a clear and intuitive way for users to select various options. They offer visual feedback, showing users what's currently selected and what's not, which is crucial for clarity and ease of use within an app.
The video component lets you play videos in your app.
The ability to showcase videos within a mobile application enriches user experiences and enhances engagement. The video component allows your users to play, pause, rewind, or fast-forward videos that you have uploaded to your app or linked to with a URL. The videos can be stored in the or your project.
To add a video to your project:
Drag and drop a video component onto the screen.
Thunkable provides various default and templates, but saving a customized layout component as a data viewer allows you to display your data in a way that reflects your brand design and preferences.
In this tutorial, we’ll show you how to customize a Thunkable data viewer so you can display your data in a way that meets your user’s needs and reflects your brand design.
When you're happy with the layout you have customized, ensure it is selected in the component tree.
True - checked False - unchecked
True/False
Disabled
Toggle whether the value of the checkbox can be changed by user.
True/False
Color
Background color of the checkbox when it is checked.
Color
Unchecked Color
Color of the checkbox's perimeter when it is unchecked.
Color
X
Location of top left corner of checkbox on X-axis, where the left hand side is X=0
Number
Y
Location of top left corner of checkbox on Y-axis, where the top side is Y=0
This event fires every time the checkbox component is clicked.
Outputs
newValue - returns the new value of the checkbox (true or false) each time the checkbox is clicked.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a group component to be enabled for a user until they've typed a set number of characters into a text input component, you can use the group's dark green set group's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).

Value
You have two options for adding a video:
Upload Video File
You can upload a video file as an asset in your project. If you opt for this option, be mindful of the Thunkable 50 MB app size limit.
Enter Video URL
Enter the URL of the video you want to show in your project. The link must end in .mp4, .mov, etc., so videos uploaded to YouTube and other video-sharing sites may not work.
Video
The video users can play within your app.
Uploaded video file or the video's URL.
Play
Toggle whether or not video file auto-plays when the screen opens.
X
Location of top left corner of video component on X-axis, where the left hand side is X=0.
Number
Y
Location of top left corner of video component on Y-axis, where the top side is Y=0.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a button to be enabled for a user until they've typed a set number of characters into a text input component, you can use the button's dark green set button's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
The video component is not recommended for streaming live video content.
Select Save as Data Viewer Layout.
Give your data viewer layout a detailed name.
Select the Layout Type you want to create. - List for a data viewer list - Grid for a data viewer grid
Click OK.
Click the Create New Screen icon at the top of the component tree in the Designer.
Drag a Data Viewer List or Data Viewer Grid component onto your screen.
Reposition and resize as necessary.
Connect your project to a data source. See here for instructions on connecting a data source: .
Click the sample template to access the data viewer templates available to you.
Click to select the layout you saved as a data viewer from the bottom of the template library.
Map your data source columns to components within your custom data viewer layout.
Custom data viewers are created using Thunkable’s layout component, which allow for more precise positioning of UI components on an app screen.
By incorporating the data source blocks into your app, you can allow users to create, read, update, and delete data in your data source when they interact with the data viewer.
A custom data viewer is designed to view data. It is not intended to receive user inputs. As such, we recommend that input components such as the text input and button, for example, are not included in a custom data viewer layout.
True/False
Number
Height
Height of video component in pixels.
Number
Width
Width of video component in pixels.
Number
Resize Mode
Define the dimensions of the video component.
Select from list [Stretch, Float in Place]
Number
Height
Height of checkbox in pixels
Number
Width
Width of checkbox in pixels
Number
Resize Mode
Define dimensions of the checkbox component.
Select from list [Stretch, Float in Place]







The date input component allows users to easily select dates. It's like a digital calendar where users can pick dates for appointments, deadlines, or any time-related tasks within an app. These components are essential because they simplify entering dates, reducing errors and ensuring accuracy. The date input component utilizes the native Android and iOS date pickers.
You can trigger actions to happen when an event occurs.
This event fires when the user has selected a date using the date picker.
Returns the date from the date picker in the format Mon., DD, YYYY.
Returns the date from the date picker in numeric form. For example, if the user selects February 17, 2024, this block returns 17. If they select 5 March 2025, this block returns 5.
Returns the month from the date picker in numeric form. For example, if the user selects February 17, 2024, this block returns 2. If they select 5 March 2025, this block returns 3.
Returns the year from the date picker in YYYY form.
Opens the date picker to prompt the user to enter a date.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a group component to be enabled for a user until they've typed a set number of characters into a text input component, you can use the group's dark green set group's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
Height
Height of date input in pixels
Number
Width
Width of date input in pixels
Number
Resize Mode
Define dimensions of the date input component.
Select from list [Stretch, Float in Place]
Border Color
Color of border (only visible if border width > 0)
Color
Border Width
Width of border around date input in pixels
Number
Border Radius
Radius of corners of border on date input in degrees
Number
Shadow Color
Color of date input's shadow
Color
Shadow Opacity
Opacity of date input's shadow
Number between 0 and 100
Shadow Radius
Radius of corners of date input's shadow in pixels
Number
Shadow Offset
How far date input's shadow should be offset, in height and width, in pixels
Number
Style
Format to use when displaying selected date
Select from menu [YYYY-MM-DD, MM/DD/YYYY, M/D/YY, Month Day, Year, Mth. Day, Year]
Font Size
Size of font when displaying date
Number
Font Style
Make the date's text italicized
True/False
Font Weight
Make the date's text bold
True/False
Color
Color of font when displaying date
Color
X
Location of top left corner of date input on X-axis, where the left hand side is X=0
Number
Y
Location of top left corner of date input on Y-axis, where the top side is Y=0
Visible
Toggle whether your end users can see the date input
True/False
Border Style
Set whether border style is solid, dotted or dashed (only visible if border width > 0)
Number
Select from list [solid, dotted, dashed]
The slider component is a horizontal track with a control, called a thumb, that app users can adjust between a minimum and maximum value. As a slider’s value changes, the portion of track between the minimum value and the thumb fills with color.
When you tap on the play icon to hear your favourite music, you are using a button.
The button component gives your user familiar ways to start actions in your app. Examples include navigating between app screens, submitting user inputs, and triggering a device’s camera to take a photo.
In the block combination below, when a user clicks Button1 they will be taken to, or navigate to, Screen2.
In this tutorial, you’ll learn how to use the “navigate to” block to allow your app’s users to navigate between app screens with a simple button click.
Initial value of the slider
Step
Number
Step between values on the slider
Minimum Value Range
Number
Minimum value the user can select. Must be less than Maximum Value.
Maximum Value Range
Number
Maximum value the user can select. Must be greater than Minimum Value.
Min Track
Color
Color of slider track between minimum value and current value
Max Track
Color
Color of slider track between current value and maximum value
Thumb Color
Color
Color of the slider thumb widget
Disabled
True/False
A disabled component is temporarily inactive and cannot be interacted with by the user.
X
coordinate value
Position of the upper left corner of the slider on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Visible
visible
Users can see the slider.
Visible
invisible
To access the blocks specific to the slider component:
On the Design tab, add a Slider component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the slider component.
A drawer of slider-specific blocks opens.
This event fires as the value of the slider changes. Returns the current value of the slider.
This event fires when the user lifts their finger or thumb off the slider. Returns the current value of the slider.
Value
Number
Text
Text
Text displayed on the button.
Font
Select from font menu
Font for the button's text.
Custom Font (mobile only)*
Upload TTF or OTF file
Font for the button's text.
X
coordinate value
Position of the upper left corner of the button on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Visible
visible
Users can see the button.
Visible
invisible
Navigate to screen
none
When users click on the button there is no navigation to another screen.
Navigate to screen
screen name
To access the blocks specific to the button component:
On the Design tab, add a Button component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the button component.
A drawer of button-specific blocks opens.
This event fires when a user taps (or clicks) the button.
This event fires when a user presses and holds the button for an extended period of time.
* Uploading a custom font may only be available for Creators on certain Thunkable plans. Please refer to our for more information.
** Raised is no longer supported. Please use Shadows under Style instead.
Have feedback on this doc? Please take a moment to share your feedback here: . Your valuable insights will help us improve and better serve you in the future.
Position of the upper left corner of the slider on the Y-axis, where the top of the screen is Y=0.
Height
number in pixels
The slider's height is defined by a custom number of pixels.
Width
number in pixels
The slider's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the slider to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the slider in the same aspect ratio as the design, regardless of the device size.
Users cannot see the slider.
Border: Color
color
The slider's border is the color selected.
Border: Width
number in pixels
The width of the slider's border is defined by a custom number of pixels.
Border: Radius
number in pixels
The radius of the slider border’s corners is defined by a custom number of pixels.
Shadow: Color
color
The slider's shadow is the color selected.
Shadow: Opacity
number between 0 and 100
The opacity of the slider's shadow.
Shadow: Radius
number in pixels
The radius of the slider shadow’s corners is defined by a custom number of pixels.
Shadow: Offset
number in pixels
How far the slider's shadow should be offset, in height and width, is defined by a custom number of pixels.
Set the slider's minimum value.
Get the slider's minimum value.
Set the slider's maximum value.
Get the slider's maximum value.
Set the slider's initial value.
Get the slider's initial value.
Set the slider's step value.
Get the slider's step value.
Set the slider component's height.
Get the slider component's height.
Returns the height of the slider component in pixels after it has been rendered on-screen.
Set the slider component's width.
Get the slider component's width.
Returns the width of the slider component in pixels after it has been rendered on-screen
Set whether the slider component is visible on the screen.
Get whether the slider component is visible on the screen.
Set the position of the upper left corner of the slider on the X-axis, where the left side of the screen is X=0.
Get the position of the upper left corner of the slider on the X-axis, where the left side of the screen is X=0.
Set the position of the upper left corner of the slider on the Y-axis, where the top of the screen is Y=0.
Get the position of the upper left corner of the slider on the Y-axis, where the top of the screen is Y=0.
Set the slider's minimum track tint color i.e. the color of the track the slider when set to its lowest value.
Get the slider's minimum track tint color
Set the slider's minimum track tint color i.e. the color of the track the slider when set to its highest value.
Get the slider's maximum track tint color
Set the slider's disabled value (true/false).
Get the slider's disabled value (true/false).
Set the slider's thumb tint color i.e. the color of the thumb at any given position.
Get the slider's thumb tint color.
Text Color
Color
Color for the button's text.
Font Bold
True/False
True = button's text is bold. False = button's text is not bold.
Font Italic
True/False
True = button's text is italic. False = button's text is not italic.
Raised**
True/False
True = button has a shadow. False = button does not have a shadow.
Font Size
Number
Font size of the button's text.
Disabled
True/False
True = button is disabled for the user by default. False = button is enabled for the user by default.
Position of the upper left corner of the button on the Y-axis, where the top of the screen is Y=0.
Height
number in pixels
The button's height is defined by a custom number of pixels.
Width
number in pixels
The button's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the button to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the button in the same aspect ratio as the design, regardless of the device size.
Users cannot see the button.
Background Color
color
The background color of the button.
Border: Style
solid
The button's border is a solid line.
Border: Style
dotted
The button's border is a dotted line.
Border: Style
dashed
The button's border is a dashed line.
Border: Color
color
The button's border is the color selected.
Border: Width
number in pixels
The width of the button's border is defined by a custom number of pixels.
Border: Radius
number in pixels
The radius of the button border’s corners is defined by a custom number of pixels.
Shadow: Color
color
The button's shadow is the color selected.
Shadow: Opacity
number between 0 and 100
The opacity of the button's shadow.
Shadow: Radius
number in pixels
The radius of the button shadow’s corners is defined by a custom number of pixels.
Shadow: Offset
number in pixels
How far the button's shadow should be offset, in height and width, is defined by a custom number of pixels.
When users click on the button they navigate to the selected screen.
This event fires when a user initially touches the button. It is the moment when the user's finger (or stylus) makes contact with the touchscreen.
This event fires when a user lifts their finger (or stylus) off the screen or releases the press on the button. It represents the moment when the user's interaction with the button ends.
Set the text that is displayed on the button.
Get the text that is displayed on the button.
Set the color of the text that is displayed on the button.
Get the color of the text that is displayed on the button.
Set the font size of the text that is displayed on the button.
Get the font size of the text that is displayed on the button.
Set the custom font of the text that is displayed on the button.
Get the custom font of the text that is displayed on the button.
Set the button's background color by connecting a color, or a text with a color in RGBA "rgba(93, 122, 252, 100)" or Hex "#5D7AFC".
Get the button's background color. By default, it returns the color in RGBA. If you set it using the set color block with Hex, it returns Hex.
Set the button's background picture. Click the dropdown menu to select an image from your computer.
Get the button's background picture.
Set the button's background picture resize mode.
Get the button's background picture resize mode.
Set the button's height in pixels.
Get the button's height in pixels.
Gets the button's computed height, the on-screen dimensions of the button, after it has been rendered on-screen. The value returned is an integer, representing the button's height in pixels.
Set the button's width in pixels.
Get the button's width in pixels.
Gets the button's computed width, the on-screen dimensions of the button, after it has been rendered on-screen. The value returned is an integer, representing the button's width in pixels.
When set to true, the button is visible to users.
When set to false, the button is invisible to users.
Gets the button's visibility status. Returns true (visible) or false (invisible).
Set the position of the upper left corner of the button on the X-axis, where the left side of the screen is X=0.
Get the position of the upper left corner of the button on the X-axis, where the left side of the screen is X=0.
Set the position of the upper left corner of the button on the Y-axis, where the top of the screen is Y=0.
Get the position of the upper left corner of the button on the Y-axis, where the top of the screen is Y=0.
Set the font of the text displayed on the button to bold.
Get the color of the text that is displayed on the button. tbd
Set the font of the text displayed on the button to italics.
Get whether the font of the text displayed on the button is italics.
Set the font of the text displayed on the button to raised.
Get whether the font of the text displayed on the button is raised.
When set to true, the button is disabled or inactive for users.
When set to false, the button is not disabled, it is active for users.
Get the button's disabled status.

















































The text input allows the person using your app to type in anything that they want such as words, passwords or numbers.
The text input component is a field where app users can enter text, such as a name or email address.
In this tutorial, we’ll implement text input validation to disable a button until text input conditions are met.
You need to make your screen scrollable to prevent the text input from moving up when the keyboard appears.
To access the blocks specific to the text input component:
On the Design tab, add a Text Input component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the text input component.
This event fires when the user clicks on the text input component.
This event fires when the component loses focus, i.e. the user clicks on another component.
This event fires when the enter or submit button is pressed on the device keyboard.
This event fires whenever a character is added to or removed from the text input (i.e. whenever there is a change to the content of the text input).
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a button to be enabled for a user until they've typed a set number of characters into a text input component, you can use the button's dark green set button's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
Auto Focus
true/false
Toggle whether the text input field is automatically in focus when the screen opens (i.e. the user doesn't need to tap into the field to focus).
Max Length (Android and iOS only)
number
Set the maximum number of characters of text your user can enter. Mobile only
Clear Button Mode (iOS only)
select from list [never, while-editing, unless-editing, always]
Toggle when an iOS user has the option to clear the text input's text.
Input Color
Color
The color of the text input's text.
Background Color
color
The background color of the text input field.
Hint Text Color
color
The color of the text input's hint.
Selection Color (Android and iOS only)
color
The highlight color when a user selects a section of text.
Height
number in pixels
The text input's height is defined by a custom number of pixels.
Width
number in pixels
The text input's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the text input to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the text input in the same aspect ratio as the design, regardless of the device size.
Border Color
color
Color of text input's border.
Border Width
number in pixels
The width of the text input's border is defined by a custom number of pixels.
Border Radius
number in pixels
The radius of the text input's border’s corners is defined by a custom number of pixels.
Shadow Color
color
The text input's shadow is the color selected.
Shadow Opacity
number between 0 and 100
The opacity of the text input's shadow.
Shadow Radius
number in pixels
The radius of the text input's shadow’s corners is defined by a custom number of pixels.
Shadow Offset
number in pixels
How far the text input's shadow should be offset, in height and width, is defined by a custom number of pixels.
A drawer of text input-specific blocks opens.
Hint
text
The prompt text the user sees when the text input is empty (eg. Type Email).
Text
text
Populated text of the text input.
Keyboard
select from list [default, email address, numeric, phone pad]
The keyboard style provided to a user when they tap into the text input. If none are selected, it will be the default standard keyboard.
Secure Text Entry
true/false
Toggle whether the input text is obscured as a user types (suitable for entering passwords and other sensitive information).
Font
text
Set the font for the hint and text properties. Options can be found here: Google Fonts.
Font Italic (web app only)
true/false
Select whether hint and text are shown in italics.
Underline (web app only)
true/false
Select whether the hint and text are underlined.
Strikethrough (web app only)
true/false
Apply strikethrough formatting to the hint and text.
Writing Direction (iOS and web app only)
select from icons
Set whether text should be written left-to-right or right-to-left.
Font Size
number in pixels
Set whether text should be written left-to-right or right-to-left.
Letter Spacing
number in pixels
Spacing between letters in pixels.
Editable
true/false
Toggle whether the user can edit the text.
Multiline
true/false
X
coordinate value
Position of the upper left corner of the text input on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Visible
true/false
Toggle whether users can see the text input.
Border Style
select from list [solid, dotted, dashed]

Toggle whether the user can enter multiple lines of text.
Position of the upper left corner of the text input on the Y-axis, where the top of the screen is Y=0.
Style of text input's border.
The Map component lets you show an area of a Google map to the user. You can add markers, polylines, and polygons to this map.
You can live-test your app without adding your unique Google Maps API keys, but you need to add them if you want to download or publish your app.
To generate your personal Google Maps API key, you need to:
Create a Google Cloud project for your app.
Create a billing account or enable billing for the project.
Click Enable to enable the Maps SDK for Android or Maps SDK for iOS.
Select Enable all Google Maps APIs for this project.
Copy the provided API key.
For more detailed instructions, please see here: .
Once you've generated your Google Maps API keys, you can add them to your Thunkable project. Click the gear icon on the left of your project's designer tab to access your . Scroll to the Google Map Settings section and paste your Android and iOS API keys into the corresponding fields.
The map has several events. You can trigger actions to happen when these events occur.
This event happens when the Map has loaded in your app.
This is a good time to add any markers, polylines or polygons to your app that you want the user to see as soon as your app opens.
GeoJSON is a format for encoding geographical data structures that is based on the JSON (JavaScript Object Notation) format. It is a lightweight and versatile format that is widely used for storing and exchanging spatial data. GeoJSON provides you with a simple and flexible way to add geographic data to your Google Maps app, making it easy to create engaging and informative map-based applications.
Incorporating GeoJSON in your Thunkable Map component allows you to draw lines, shapes (rectangles, triangles, squares, and custom shapes), and markers on the map.
To use the Add GeoJSON block:
On the Design tab of your Thunkable project, add a map component to a screen.
On the Blocks tab, within the component tree, click the Map component.
Drag and drop the Add GeoJSON block into your workspace.
This event happens when the location of the user changes. It returns the coordinate object. You can use to get the properties of the coordinate object.
The coordinate object has the following properties:
{ target: Numeric ID for your app coordinate:{ latitude: latitude of point selected longitude: longitude of point selected } position:{ x: x-position of selected point on the Map component y: x-position of selected point on the Map component } }
This event happens when the user taps on the Map.
This event happens when the user presses on the map for a longer period of time.
This event happens when the user clicks on a Marker that is on the Map.
The On Marker Press block returns an event object. This is an object which can be used with
The event object has the following properties:
{ latitude: latitude of the selected Marker longitude: longitude of the selected Marker }
Adds a generic map marker to your map at the specified latitude/longitude.
This block takes the following inputs:
Adds a marker of a selected image to your map at the specified latitude/longitude
This block takes the following inputs:
Add a polyline to your map. This is an outline that connects several points on your map.
This block takes the following inputs:
These blocks:
Will produce this polyline:
Note that polylines won't automatically create a closed shape. You would need to add a forth object with the properties latitude: 37 and longitude: -122 to the coordinate input of the addPolyline block above to close this triangular polyline.
Add a polygon to your map. This is a solid shape that connects several points on your map.
This block takes the following inputs:
These blocks:
Will produce this polygon:
Note that the polygon outline will automatically connect the first and last points in the list of coordinates.
You can use the deleteAllMarkers block to delete all from your app.
You can use the deleteAllPolylines block to delete all from your app.
You can use the deleteAllPolygons block to delete all from your app.
Set and get of the Map component.
Returns the height of the Map on the device screen in pixels.
Returns the width of the Map on the device screen in pixels.
You can pair the Map component with a . This helps you show content relevant to the user's location.
These blocks will set the map's latitude and longitude to show the user's location once the map is ready:
Zoom
Zoom level between -15 (most zoomed out) and 15 (most zoomed in)
Number
User location
Show the user where they are on the map.
True/False
My location button
Show button that allows the user to re-center the map on their location.
True/False
Compass
Show compass.
True/False
Scroll
Allow user to scroll on the map.
True/False
Zoom
Allow user to zoom in and out on the map.
True/False
Traffic
Show traffic data.
True/False
Height
Height of Map in pixels
Number
Width
Width of Map in pixels
Number
Resize Mode
Define dimensions of the map component/container
Select from list [Stretch, Float in Place]
Border Color
Color of border (only visible if border width > 0)
Color
Border Width
Width of border around Map in pixels
Number
Border Radius
Radius of corners of border on Map in degrees
Number
Shadow Color
Color of map's shadow
Color
Shadow Opacity
Opacity of map's shadow
Number between 0 and 100
Shadow Radius
Radius of corners of map's shadow in pixels
Number
Shadow Offset
How far map's shadow should be offset, in Height and Width, in pixels
Number
Click Text.
Drag the empty text block and connect it to the Add GeoJSON block.
Paste your GeoJSON data into the empty text block. This can be retrieved from a website such as GeoJSON.io.
Drag and drop the Add GeoJSON block into an event block. For example, the onMapReady block to render the GeoJSON when the map loads, or the when button click block to render the GeoJSON when the user clicks a button.
Number
position X
X Co-ordinate of selected position on map component
Number
position Y
Y Co-ordinate of selected position on map component
Number
Number
position X
X Co-ordinate of selected position on map component
Number
position Y
Y Co-ordinate of selected position on map component
Number
Title
Title of marker (displayed when marker is clicked)
Text
Description
Description of marker (displayed when marker is clicked)
Text
Pin Color
Color of marker
Color
Title
Title of marker (displayed when marker is clicked)
Text
Description
Description of marker (displayed when marker is clicked)
Text
Icon
Image to use as marker
Dropdown menu (select )
Number
Stroke Color
Color of polyline
Color
Number
Stroke Color
Color of outline (Only visible if Stroke Width > 0)
Color
Fill Color
Color of polygon shape
Color
Latitude
Co-ordinate of the map's center on the north-south axis
Number
Longitude
Co-ordinate of the map's center on the east-west axis
Provider
Map provider (ex. Google).
Text
Map Type
Style of map.
X
Location of top left corner of Map on X-axis, where the left hand side is X=0
Number
Y
Location of top left corner of Map on Y-axis, where the top side is Y=0
Visible
Toggle whether your end users can see the Map
True/False
Border Style
Set whether border style is solid, dotted or dashed (only visible if border width > 0)
Output name
Output value
Data Type
Latitude
Latitude of selected position
Number
Longitude
Output name
Output value
Data Type
Latitude
Latitude of selected position
Number
Longitude
Latitude
Latitude of marker's position
Number between -90 and 90
Longitude
Longitude of marker's position
Latitude
Latitude of marker's position
Number between -90 and 90
Longitude
Longitude of marker's position
Input
Description
Data Type
Coordinate
List of points to draw a line between. List can be any length.
Stroke Width
Input
Description
Data Type
Coordinate
List of points to draw a line between. List can be any length.
Stroke Width
Note: If you close this pop pup message without copying your API key
Navigate to APIs & Services.
Select Credentials from the left side menu.
Click SHOW KEY.
We do not currently support adding GeoJSON tooltips or callouts.



Number
Select from list (standard, satellite, hybrid, terrain, none)
Number
Select from list [solid, dotted, dashed]
Longitude of selected position
Longitude of selected position
Number between -90 and 90
Number between -90 and 90
Width of polyline
Width of outline





Thunkable’s layout component allows for more precise positioning of UI components on an app screen, by allowing you to position UI components dependent on other UI components on the screen. For example, in a typical sign-in screen, if a user inputs an incorrect email address or password, a screen built with a layout component allows you to shift the UI components on the screen to display the error messaging to the user.
To add a layout component to a screen:
Drag and drop the layout UI component onto a screen. You’ll notice it is composed of two containers, one on top of the other.
Click and drag the sizing handles in the corners to resize the layout UI component.
Click and drag to reposition it.
By default, a newly added layout has two horizontal containers arranged vertically, one on top of the other. To insert additional containers to a layout:
Click to select the layout UI component in the component tree or within the screen.
At the top of the layout's properties panel, select whether you want to insert a horizontal or vertical Container. ∙ Horizontal Container - UI components within the container are aligned horizontally, side by side ∙ Vertical Container - UI components within the container are aligned vertically, on top of each other
Identify into which layout or container you want to insert the new container.
To add UI components to a layout:
Drag and drop UI components into a container on a screen.
Once UI components are in a container, rearrange their order by dragging and dropping their component names in the component tree.
The following properties are configured on the right in the layout's properties panel.
Horizontal Alignment Examples
Vertical Alignment Examples
The following properties are configured on the right in the container's properties panel.
To access the blocks specific to the layout component:
Navigate to the Blocks tab.
In the component tree on the left, click the Layout component.
A drawer of layout-specific blocks opens.
To access the blocks specific to the container component:
Navigate to the Blocks tab.
In the component tree on the left, click the Container component that is nested under the layout component.
A drawer of container-specific blocks opens.
The layout component is the foundation of custom data viewers, which allows for more precise positioning of UI components on an app screen.
Click Add.
Vertical / Horizontal Alignment
top
The elements directly within the layout (could be a UI component or a container) are positioned at the top of the layout.
Vertical / Horizontal Alignment
bottom
The elements directly within the layout (could be a UI component or a container) are positioned at the bottom of the layout.
Vertical / Horizontal Alignment
left
The elements directly within the layout (could be a UI component or a container) are positioned at the left of the layout.
Vertical / Horizontal Alignment
right
The elements directly within the layout (could be a UI component or a container) are positioned at the right of the layout.
Vertical / Horizontal Alignment
center
The elements directly within the layout (could be a UI component or a container) are positioned in the center of the layout (either top to bottom or left to right, depending on the selected direction).
Vertical / Horizontal Alignment
space-between
The elements directly within the layout (could be a UI component or a container) are positioned with an equal amount of space between them.
Vertical / Horizontal Alignment
space-around
The elements directly within the layout (could be a UI component or a container) are positioned with an equal amount of space between them, including at the top and bottom for a vertical direction layout or left and right for a horizontal direction layout.
Scrollable
true/on
The user can scroll within the layout.
Scrollable
false/off
The user cannot scroll within the layout.
Scroll Bar Visible
true/on
The scroll bar is visible to the user.
Scroll Bar Visible
false/off
The scroll bar is not visible to the user.
Height
number in pixels
The layout’s height is defined by a custom number of pixels.
Width
number in pixels
The layout’s width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the layout to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the layout in the same aspect ratio as the design, regardless of the device size.
Background Picture Resize Mode
cover
Fills the entire layout without changing the height and width ratio of the image.
Background Picture Resize Mode
contain
The entire image is scaled down to fit inside the layout, without changing the height and width ratio of the image.
Background Picture Resize Mode
stretch
The image's height will change to fill the layout length-wise.
Background Picture Resize Mode
repeat
The image repeats to cover the layout. The image's height and width ratio do not change.
Background Picture Resize Mode
center
The image is positioned in the middle of the layout.
Background Color
color
The background color of the layout.
Gradient: Color
color
The layout's gradient color starts to fade from thebottom of the layout and blends into the background color.
Border: Style
solid
The layout’s border is a solid line.
Border: Style
dotted
The layoutt’s border is a dotted line.
Border: Style
dashed
The layout’s border is a dashed line.
Border: Color
color
The layout’s border is the color selected.
Border: Width
number in pixels
The width of the layout’s border is defined by a custom number of pixels.
Border: Radius
number in pixels
The radius of the layout border’s corners is defined by a custom number of pixels.
Margin
left
The margin between the layout’s left border and the next UI component as defined by a custom number of pixels.
Margin
right
The margin between the layout’s right border and the next UI component as defined by a custom number of pixels.
Padding
top
The padding between the layout and its top border as defined by a custom number of pixels.
Padding
bottom
The padding between the layout and its bottom border as defined by a custom number of pixels.
Padding
left
The padding between the layout and its left border as defined by a custom number of pixels.
Padding
right
The padding between the layout and its right border as defined by a custom number of pixels.
Vertical / Horizontal Alignment
top
UI components are positioned at the top of the container.
Vertical / Horizontal Alignment
bottom
UI components are positioned at the bottom of the container.
Vertical / Horizontal Alignment
left
UI components are positioned at the left of the container.
Vertical / Horizontal Alignment
right
UI components are positioned at the right of the container.
Vertical / Horizontal Alignment
center
UI components are positioned in the center of the container (either top to bottom or left to right depending on the selected direction).
Vertical / Horizontal Alignment
space-between
UI components are positioned with an equal amount of space between them
Vertical / Horizontal Alignment
space-around
UI components are positioned with an equal amount of space between them, including at the top and bottom for vertical direction containers or left and right for horizontal direction containers.
Scrollable
true/on
The user can scroll within the container.
Note: When setting a container as scrollable, we recommend the size of the UI components within it be set to an absolute pixel value or Fit Contents.
Scrollable
false/off
The user cannot scroll within the container.
Scroll Bar Visible
true/on
The scroll bar is visible to the user.
Scroll Bar Visible
false/off
The scroll bar is not visible to the user.
Height
Size (e.g. 50px or 50%)
The container’s height is defined by a custom number of pixels or percentage of the screen.
Width
Fit contents
The container’s width is the same as the widest UI component or container within it (vertical direction) or the side-by-side UI components or containers within it (horizontal direction).
Width
Fill container
The elements directly within the container (could be a UI component or another container) fill the container horizontally.
Width
Size (e.g. 50px or 50%)
The container’s width is defined by a custom number of pixels or percentage of the screen.
Background Picture Resize Mode
cover
Fills the entire screen without changing the height and width ratio of the image.
Background Picture Resize Mode
contain
The entire image is scaled down to fit inside the screen, without changing the height and width ratio of the image.
Background Picture Resize Mode
stretch
The image's height will change to fill the screen length-wise.
Background Picture Resize Mode
repeat
The image repeats to cover the screen. The image's height and width ratio do not change.
Background Picture Resize Mode
center
The image is positioned in the middle of the frame.
Background Color
color
The background color of the container.
Gradient: Color
color
The container's gradient color starts to fade from the bottom of the container and blends into the background color.
Border: Style
solid
The container’s border is a solid line.
Border: Style
dotted
The container’s border is a dotted line.
Border: Style
dashed
The container’s border is a dashed line.
Border: Color
color
The container’s border is the color selected.
Border: Width
number in pixels
The width of the container’s border is defined by a custom number of pixels.
Border: Radius
number in pixels
The radius of the container border’s corners is defined by a custom number of pixels.
Shadow: Color
color
The container’s shadow is the color selected.
Shadow: Opacity
number between 0 and 100
The opacity of the container’s shadow.
Shadow: Radius
number in pixels
The radius of the container shadow’s corners is defined by a custom number of pixels.
Shadow: Offset
number in pixels
How far the container’s shadow should be offset, in height and width, is defined by a custom number of pixels.
Margin
left
The margin between the container’s left border and the next container as defined by a custom number of pixels.
Margin
right
The margin between the container’s right border and the next container as defined by a custom number of pixels.
Padding
top
The padding between the container and its top border as defined by a custom number of pixels.
Padding
bottom
The padding between the container and its bottom border as defined by a custom number of pixels.
Padding
left
The padding between the container and its left border as defined by a custom number of pixels.
Padding
right
The padding between the container and its right border as defined by a custom number of pixels.
Gets the layout’s height in pixels.
Gets the layout’s computed height, the on-screen dimensions of the layout, after it has been rendered on-screen. The value returned is an integer, representing the layout's height in pixels.
Sets the layout’s width to a custom number of pixels.
Gets the layout’s width in pixels.
Gets the layout’s computed width, the on-screen dimensions of the layout, after it has been rendered on-screen. The value returned is an integer, representing the layout's width in pixels.
When set to true, it sets the layout to visible, meaning the layout is visible to users.
When set to false, it sets the layout to invisible, meaning the layout is not visible to users.
Gets the layout’s visibility status. Returns true (visible) or false (invisible).
Set the position of the upper left corner of the layout on the X-axis, where the left side of the screen is X=0.
Get the position of the upper left corner of the layout on the X-axis, where the left side of the screen is X=0.
Set the position of the upper left corner of the layout on the Y-axis, where the top of the screen is Y=0.
Get the position of the upper left corner of the layout on the Y-axis, where the top of the screen is Y=0.
Set the layout’s background color.
Get the layout’s background color.
Set the layout's background picture. Click the dropdown menu to select an image from your computer.
Get the layout's background picture.
Set the layout’s background picture resize mode. See the layout Properties section for definitions of the acceptable values.
Get the layout’s background picture resize mode.
When set to true, it sets the layout to scrollable for users.
When set to false, it sets the layout to scrollable for users.
Gets the Layout’s scrollable status. Returns true (scrollable) or false (not scrollable).
When set to true, it sets the layout’s scroll bar to be visible to users.
When set to false, it sets the layout’s scroll bar to invisible for users.
Gets the layout’s scroll bar visibility status. Returns true (visible) or false (invisible).
The blocks are the same as the ones above in the Layout Blocks section, but specific to the container instead of the layout.
Direction
vertical
The elements directly within the layout (could be a UI component or a container) are aligned vertically, on top of each other.
Direction
horizontal
X
coordinate value
Position of the upper left corner of the layout on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Background Picture
Upload files
Click to upload an image file.
Background Picture
Type in URL
Visible
visible
Users can see the layout.
Visible
invisible
Margin
top
The margin between the layout’s top border and the next UI component as defined by a custom number of pixels.
Margin
bottom
Direction
vertical
UI components within the container are aligned vertically, on top of each other.
Direction
horizontal
Height
Fit contents
The container’s height is the same as the tallest UI component or container within it (horizontal direction) or the stacked UI components or containers within it (vertical direction).
Height
Fill container
Background Picture
Upload files
Click to upload an image file.
Background Picture
Type in URL
Visible
visible
Users can see the container.
Visible
invisible
Margin
top
The margin between the container’s top border and the next container as defined by a custom number of pixels.
Margin
bottom
If the layout is scrollable, you can use this block to scroll the user to the end of the layout. For example, a user clicks a button in a chat app, and the layout scrolls to the end of the chat history to see the most recent messages.
If the layout is scrollable, you can use this block to scroll the user to the start of the layout.
Have feedback on this doc? Please take a moment to share your feedback here: Thunkable Docs Feedback. Your valuable insights will help us improve and better serve you in the future.




The elements directly within the layout (could be a UI component or a container) are aligned horizontally, side by side.
Position of the upper left corner of the layout on the Y-axis, where the top of the screen is Y=0.
Type in an image URL.
Users cannot see the layout.
The margin between the layout’s bottom border and the next UI component as defined by a custom number of pixels.
UI components within the containerntainer are aligned horizontally, side by side.
The elements directly within the container (could be a UI component or another container) fill the container vertically.
Type in an image URL.
Users cannot see the container.
The margin between the container’s bottom border and the next container as defined by a custom number of pixels.
Sets the layout’s height to a custom number of pixels.













































A group is a container component in which other user interface components are placed. Groups are useful when you want to combine multiple components into one. This allows for their positions and visibility to be easily altered.
To add components to a group:
Drag and drop a group component onto a screen.
Drag and drop other UI components inside the group on the screen.
The added components are nested under the group in the component tree.
When a group component is moved, any UI components within it are moved with it as a unit.
Center: The image is displayed at its original size within the container, and it is centered both vertically and horizontally. This means that if the image is larger than the container, parts of it may extend beyond the container's edges.
Cover: The image is resized to completely cover the container while maintaining its aspect ratio. This mode ensures that the entire container is filled with the image, and any excess image parts are cropped if necessary. This can result in parts of the image being clipped.
Contain:
To access the blocks specific to the group component:
On the Design tab, add a Group component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the group component.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a group component to be enabled for a user until they've typed a set number of characters into a text input component, you can use the group's dark green set group's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
Touch Opacity
Number between 0-100
Set the group's opacity when a user clicks on the group.
Height
number in pixels
The button's height is defined by a custom number of pixels.
Width
number in pixels
The button's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the group to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the group in the same aspect ratio as the design, regardless of the device size.
Background Image
PNG, JPG, GIF, SVG, etc. Can also use a URL that ends in a file extension.
The image displayed in the group's background.
Background Image Resize Mode
Select from list [cover, contain, stretch, repeat, center]. See the definitions of each setting below.
Define how the group's background image is displayed if the file and the group component have different dimensions/aspect ratios.
Border Style
select from list [solid, dotted, dashed]
Style of text input's border.
Border Color
color
Color of text input's border.
Border Width
number in pixels
The width of the group's border is defined by a custom number of pixels.
Border Radius
number in pixels
The radius of the group's border’s corners is defined by a custom number of pixels.
Shadow Color
color
The group's shadow is the color selected.
Shadow Opacity
number between 0 and 100
The opacity of the group's shadow.
Shadow Radius
number in pixels
The radius of the group's shadow’s corners is defined by a custom number of pixels.
Shadow Offset
number in pixels
How far the group's shadow should be offset, in height and width, is defined by a custom number of pixels.
Repeat: The image is tiled or repeated to fill the entire container, both horizontally and vertically. This mode is often used for creating patterns or backgrounds that seamlessly repeat across the container.
Stretch: The image is resized to fully cover the container without maintaining its original aspect ratio. This can distort the image and may result in an unnatural appearance, so it's generally not recommended for most scenarios.
A drawer of group-specific blocks opens.
Position
Relative to Screen
The group moves as the user scrolls.
Position
Relative to Device
X
coordinate value
Position of the upper left corner of the button on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Visible
true/false
Toggle whether users can see the group.
Background Fill
color

The group stays in place as the user scrolls (suitable for creating a floating action button).
Position of the upper left corner of the button on the Y-axis, where the top of the screen is Y=0.
Color of group's background.
The time input component allows users to easily select times. Users can pick times for appointments, deadlines, or any time-related tasks within an app. These components are essential because they simplify entering times, reducing errors and ensuring accuracy. The time input component utilizes the native Android and iOS time pickers.
Format to use when displaying selected time
Select from menu [Hour:Minute AM/PM, Hour:Minute 24h]
Font Size
Size of font when displaying time
Number
Font Style
Select whether font is italic
True/False
Font Weight
Select whether font is bold
True/False
Color
Color of font when displaying time
Color
X
Location of top left corner of time input on X-axis, where the left hand side is X=0
Number
Y
Location of top left corner of time input on Y-axis, where the top side is Y=0
Visible
Toggle whether your end users can see the time input component
True/False
Border Style
Set whether border style is solid, dotted or dashed (only visible if border width > 0)
You can trigger actions to happen when an event occurs.
This event fires when the user has selected a time using the time picker.
Opens the time picker to prompt the user to enter a time.
Returns the hour from the time picker in 24-hour format. For example, if the user selects 2:30 PM, this block returns 14.
Returns the minutes from the time picker in. For example, if the user selects 2:30 PM, this block returns 30.
Returns the selected time from the time picker in the same format as the time input's style property. For example, if the user selects 2:30 PM, and the style is set to Hour:Minute AM/PM, this block returns 2:30 PM. If the user selects 2:30 PM, and the style is set to Hour:Minute 24h, this block returns 14:30.
The time the user selects automatically displays in the time input label, but if you want to save the time to be used later, you can use the block combination below to save the time as a variable.
Get Time
Time in whichever format you specify
Get Hours
Hour of the Day from 1-24
Get Minutes
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a button to be enabled for a user until they've typed a set number of characters into a text input component, you can use the button's dark green set button's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
Style
Number
Height
Height of time input in pixels
Number
Width
Width of time input in pixels
Number
Resize Mode
Define dimensions of the time input component.
Select from list [Stretch, Float in Place]
Select from list [solid, dotted, dashed]
Border Color
Color of border (only visible if border width > 0)
Color
Border Width
Width of border around time input in pixels
Number
Border Radius
Radius of corners of border on time input in degrees
Number
Shadow Color
Color of time input's shadow
Color
Shadow Opacity
Opacity of Time Input's shadow
Number between 0 and 100
Shadow Radius
Radius of corners of time input's shadow in pixels
Number
Shadow Offset
How far time input's shadow should be offset, in height and width, in pixels
Number
Minutes from 1-60







The loading Icon is an animated graphical component used to notify users of your app that an action is taking place in the background, such as retrieving or uploading data. They serve as visual cues to users, signaling that the app is working behind the scenes, reducing uncertainty and providing reassurance while enhancing the overall user experience by managing expectations during brief wait times.
Color
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a button to be enabled for a user until they've typed a set number of characters into a text input component, you can use the button's dark green set button's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
The size property is unique to the loading icon. Using these blocks, you can set the size of the loading icon. You can choose between extra small, small, middle, large, or extra large.
The loading icon should be displayed when the app is performing an activity in the background and hidden when it is not.
One way to show and hide the icon is to use the visible property of the component.
In the following example, the loading icon becomes visible when the screen opens but disappears once data is retrieved from Airtable.
The loading icon displays on the app screen when the visibility property is true. The loading icon does not show on the app screen if the visibility property is false.
If you want to show different animation styles in your app as content loads, you can use the animation component. You can learn more here: .
Height
Height of loading icon in pixels.
Number
Width
Width of loading icon in pixels.
Number
Resize Mode
Define dimensions of the loading icon component.
Select from list [Stretch, Float in Place]
Border Color
Color of border (only visible if border width > 0)
Color
Border Width
Width of border around loading icon in pixels.
Number
Border Radius
The radius of corners of the border on the loading icon in degrees.
Number
Shadow Color
Color of loading icon's shadow.
Color
Shadow Opacity
Opacity of loading icon's shadow
Number between 0 and 100
Shadow Radius
Radius of corners of loading icon's shadow in pixels.
Number
Shadow Offset
How far loading icon's shadow should be offset, in height and width, in pixels.
Number
The color of the loading icon.
Color
X
Location of the top left corner of the loading icon on the X-axis, where the left-hand side is X=0.
Number
Y
Location of the top left corner of the loading icon on the Y-axis, where the top side is Y=0.
Visible
Toggle whether your end users can see the loading icon.
True/False
Border Style
Set whether border style is solid, dotted or dashed (only visible if border width > 0)
Number
Select from list [solid, dotted, dashed]

Display websites in your app
The web viewer component displays websites in your app. You can also use it to run HTML and JavaScript commands. For example, you can run a simple HTML URL to decode an image into base 64 text.
Some websites may not appear when previewing your app on the web. We recommend previewing with the on a device.
URL
The "when web viewer receives message" block fires when the web viewer receives a message from the web page it's displaying. It returns the "message" output, text that contains the message that was received.
The "call web viewer's reload" block reloads the web viewer.
The "call web viewer's back" block navigates the user back to the previous page visited.
The "call web viewer's forward" block navigates the user to the next page in the user's browser history.
If you own the website displayed in the web viewer, you can send and receive messages between your website and the web viewer using Javascript. The "call web viewer's post message" block posts a message to the website.
You can see examples of sending and receiving messages and get further setup instructions here: .
The "call web viewer's value from post message" block returns any message received after using the "call web viewer's post message" block.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a button to be enabled for a user until they've typed a set number of characters into a text input component, you can use the button's dark green set button's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
Height
Height of the web viewer in pixels.
Number
Width
Width of the web viewer in pixels.
Number
Resize Mode
Define dimensions of the web viewer component.
Select from list [Stretch, Float in Place]
Border Color
Color of border (only visible if border width > 0)
Color
Border Width
Width of border around the web viewer in pixels.
Number
Border Radius
Radius of corners of border on the web viewer in degrees.
Number
Shadow Color
Color of the web viewer's shadow.
Color
Shadow Opacity
Opacity of the web viewer's shadow.
Number between 0 and 100
Shadow Radius
Radius of corners of the web viewer's shadow in pixels.
Number
Shadow Offset
How far the web viewer's shadow should be offset, in height and width, in pixels.
Number
Set the initial URL to be displayed in the web viewer. The URL should begin with HTTPS://. You can also type in the name of an HTML file that has been uploaded to the project to display in the web viewer.
URL
Geolocation Enabled (Android only)
Select if you want to enable geolocation functionality for Android apps.
True/False
X
The location of the top left corner of the web viewer is on the X-axis, where the left-hand side is X=0.
Number
Y
The location of the top left corner of the web viewer on the Y-axis, where the top side is Y=0.
Visible
Toggle whether your end users can see the web viewer.
True/False
Border Style
Set whether border style is solid, dotted or dashed (only visible if border width > 0)
You may also find connecting to a Web API helpful for sending and receiving information between your app and a website.
Number
Select from list [solid, dotted, dashed]
The image component allows you to display pictures in your app and can be made clickable using blocks.
The icon component is used to display an icon and can be made clickable using blocks.
You can customize your icon component using the following properties:
To access the blocks specific to the icon component:
On the Design tab, add an Icon component to a screen.
Navigate to the Blocks tab.
In the component tree on the left, click the name of the icon component.

Height
number in pixels
The icon's height is defined by a custom number of pixels.
Width
number in pixels
The icon's width is defined by a custom number of pixels.
Resize Mode
Stretch
Stretches the icon to fit the dimensions of the device's screen.
Resize Mode
Float in Place
Renders the icon in the same aspect ratio as the design, regardless of the device size.
Border: Color
color
The icon's border is the color selected.
Border: Width
number in pixels
The width of the icon's border is defined by a custom number of pixels.
Border: Radius
number in pixels
The radius of the icon border’s corners is defined by a custom number of pixels.
Shadow: Color
color
The icon's shadow is the color selected.
Shadow: Opacity
number between 0 and 100
The opacity of the icon's shadow.
Shadow: Radius
number in pixels
The radius of the icon shadow’s corners is defined by a custom number of pixels.
Shadow: Offset
number in pixels
How far the icon's shadow should be offset, in height and width, is defined by a custom number of pixels.
Set the icon component's stroke color.
Get the icon component's stroke color.
Set the icon component's stroke width.
Get the icon component's stroke width.
Set the icon component's fill color.
Get the icon component's fill color.
Set the icon component's height.
Get the icon component's height.
Returns the height of the icon component in pixels after it has been rendered on-screen.
Set the icon component's width.
Get the icon component's width.
Returns the width of the icon component in pixels after it has been rendered on-screen.
Set whether the icon component is visible on the screen.
Get whether the icon component is visible on the screen.
Set the position icon the upper left corner of the icon on the X-axis, where the left side of the screen is X=0.
Get the position of the upper left corner of the icon on the X-axis, where the left side of the screen is X=0.
Set the position of the upper left corner of the icon on the Y-axis, where the top of the screen is Y=0.
Get the position of the upper left corner of the icon on the Y-axis, where the top of the screen is Y=0.
Icon type
Icon name
The icon displayed in the icon component.
Stroke Color
Color
Color of outline
Fill Color
Color
Color inside the icon
Stroke Width
Number
Width of outline
X
coordinate value
Position of the upper left corner of the icon on the X-axis, where the left side of the screen is X=0.
Y
coordinate value
Visible
visible
Users can see the icon.
Visible
invisible
This event will fire when the user clicks on the icon.
Set the icon component's icon type.
Position of the upper left corner of the icon on the Y-axis, where the top of the screen is Y=0.
Users cannot see the icon.
Get the icon component's icon type.



























In its most traditional use case, the rating component is used to display a rating in your app and allows users to leave their own rating. However, there are a lot of different icons to choose from so you can customize the "meaning" of your ratings. For example, you could use five hearts in a quiz app to represent the five lives or five guesses that each player gets.
This event block fires when a user inputs a rating in the rating component.
There are two types of property blocks: dark green "set" and light green "get" blocks. The specific blocks available vary according to the UI component.
The dark green set blocks allow you to change the component's properties using blocks. For example, if you don't want a group component to be enabled for a user until they've typed a set number of characters into a text input component, you can use the group's dark green set group's disabled status block.
The light green get blocks allow you to access the properties of a component (e.g. color, font, width, text, etc.).
The direction property is unique to the rating icon. Using these blocks, you can define how the rating component is filled. You can choose between row (left to right), row-reverse (right to left), column (top to bottom) or column-reverse (bottom to top).
The icon margin property is unique to the rating icon. Use these blocks to get or change the margin size between the icons of the rating component.
Height
Height of the rating component in pixels.
Number
Width
Width of the rating component in pixels.
Number
Resize Mode
Define the dimensions of the rating component.
Select from list [Stretch, Float in Place]
Value
Initial value of the rating.
Number
Count
Maximum value of the rating.
Number between 5 and 10
Image
Shape of the rating's icons.
Select from menu:
Pick One - menu of pre-set icons you can choose from. Preview these icons here.
Custom Image - upload images as an asset or provide an image URL (.jpg or .png files) for filled and empty icons.
Read Only
Toggle whether or not the user can edit the rating.
True/False
Rating Color
Color of filled-in icons reflecting the current rating.
Color
Background Color
Color of unfilled icons.
Color
X
The location of the top left corner of the rating component on the X-axis, where the left-hand side is X=0
Number
Y
The location of the top left corner of the rating component on the Y-axis, where the top side is Y=0.
Number


Creating modules allows you to save combinations of components and blocks as components or combinations of blocks without UI elements (Logic Modules) outside of the builder experience to reuse in your projects and share them for other Creators to use. Create the component in the component editor once and use it as often as you need in any of your projects.
Thunkable Modules allow you to save and reuse combinations of UI components and blocks in your projects. In this tutorial, you’ll learn how to create, share, import, copy, and edit modules.
Navigate to your Thunkable Project page.
Under Customizations, click on the Modules tab.
Click Create A New Module.
Name your module.
Click Create.
The module editor opens. It is similar to the editor you’re used to designing in, but you’ll notice the screen has a default group component within which to build your module.
From the components library, drag and drop components into the group on the screen.
Resize the group as necessary to achieve your desired design.
Navigate to the Blocks tab.
Build your module's functionality with blocks.
When you’re happy with your module, click the Publish icon in the upper right.
Select Publish Module.
Include Release Notes. For future iterations, you’ll include what changed in the version.
Click Publish.
You can share modules with other Creators using the module's unique URL. When you're ready to share a module:
In the component editor, click the Share icon in the upper right.
The module's unique URL is copied to your computer's clipboard.
Share the URL with another Creator. To import your shared module, they will follow these instructions: (choosing option 2 in step 4).
Navigate to your Thunkable Project page.
Open an existing project or create a new one.
On the project’s Design tab, click the plus icon next to the Add Components library.
If another Creator has shared a Module with you, you can remix it following the steps below (you can also ):
Open the in your browser.
Click on Click to Remix near to the top right.
Make any desired changes and then click Publish to make available for importing into a project's component library.
Open your project containing the .
When you hover over the imported module in the component library, a vertical ellipsis appears.
Hover over the vertical ellipsis to display the module's details.
Navigate to your Thunkable Project page.
Click the Modules tab.
Click the Copy associated with the module you want to make a copy of.
To make a change to an existing module:
Navigate to your Thunkable Project page.
Click the Modules tab.
Click the Edit associated with the module you want to edit.
To apply the edits to a previously imported module:
Open your project containing the imported module.
When you hover over the imported module in the component library, a vertical ellipsis appears.
Hover over the vertical ellipsis to display the module's details.
Adding a property to your module allows its properties to be modified after it has been imported into a project.
For example, a page title module. Perfect the design in the module editor, add a property and the associated blocks, and then modify the page title on each screen of the imported project.
To add a property to a module:
Navigate to your Thunkable Project page.
Click the Modules tab.
Click the Edit associated with the module you want to edit.
To configure the blocks to modify the component's properties when it is later imported into a project:
Navigate to the module editor's block tab.
In the component tree, click Module Workspace to access the module's unique blocks.
Drag the "when Module Initialized" block into the workspace. This event block is triggered when the screen the module is added to opens.
Once a module has been imported into a project, to modify its properties:
Drag and drop the imported module onto your project's screen.
In the module's properties panel, update the module property.
An event is a block that allows the project to react to behavior that occurred inside of the component.
Navigate to your Thunkable Project page.
Click the Modules tab.
Click the Edit associated with the module you want to edit.
A method is a block that allows the project to trigger behavior to occur inside of the component. When you call a method, it is possible to provide additional information in parameters. When a project calls a component's method, the component has access to the values in the parameters.
Navigate to your Thunkable Project page.
Click the Modules tab.
Click the Edit associated with the module you want to edit.
In this tutorial, you’ll learn how to use methods to trigger behavior in modules.
As part of this beta release, some functionality is not supported. This includes the following:
Modules can't be added to a layout component.
Modules can't be in shared screens.
Creators can't update a module that they do not own. To do so they will need to use the .
Building on Modules, Logic Modules are specific to blocks and allow you to to start or trigger an event, set and change properties in your projects, and share them for other Creators to use.
To create a new Logic Module, you can follow the same steps as after clicking on the Logic Modules tab.
To share a Logic Module, you can follow the same steps as after clicking on the Logic Modules tab.
Navigate to your Thunkable Project Page
Open an existing project or create a new one.
On the projects blocks editor, click the plus icon next to Logic Modules in the middle of the Blocks panel.
To remix a Logic Module that another Creator has shared with you, you can follow the same steps as after clicking on the Logic Modules tab.
To remix an already imported Logic Module you, you can follow the same steps as after clicking on the Logic Modules tab.
To copy a Logic Module you, you can follow the same steps as after clicking on the Logic Modules tab.
To edit a Logic Module, you can follow steps 1-8 in after clicking on the Logic Modules tab.
Adding a property to your logic module allows its properties to be modified after it has been imported into a project.
To add a property to a module:
Navigate to your Thunkable Project page.
Click the Logic Modules tab.
Click the Edit associated with the logic module you want to edit.
An event is a block that allows the project to react to behavior that occurred inside of the component.
Navigate to your Thunkable Project page.
Click the Logic Modules tab.
Click the Edit associated with the module you want to edit.
A method is a block that allows the project to trigger behavior to occur inside of the component. When you call a method, it is possible to provide additional information in parameters. When a project calls a component's method, the component has access to the values in the parameters.
Navigate to your Thunkable Project page.
Click the Logic Modules tab.
Click the Edit associated with the module you want to edit.

In the modal provided, either:
My Modules tab - Select a Module from the list.
Module Link tab - Type or paste the module's link.
Click Import.
The newly imported module is available under the heading Modules in the component library.
Drag the new module onto your screen.
You will be given the option to select Remix and Replace or to simply Remix. Remixing creates a copy that can be edited but won't replace the original that you have already imported into your project. Remix and Replace creates a copy that can be edited and replaces the original imported module in your project. Deselect the checkbox if and click Remix to simply make a copy that can be edited.
Make the desired changes to the copy and click Publish to make available for importing into a project's component library.
When you’re happy with your module, click Publish in the upper right.
Select Publish Module.
Include Release Notes that state what has changed in this version.
Click Publish.
Click Update to confirm the update.
Click the gear icon next to the Module Workspace in the component tree.
Click Add a Property.
Give the event a descriptive name (e.g. page title).
Select the property type (String (text), Boolean (true or false), Number, or Color).
Input the default value, the value the property will have if it is not modified in the project it's imported into.
Click the X in the upper right to close the modal.
Click the name of the component to which the property applies. In this example, we're changing the page title label.
Drag the relevant block into the "when Module Initialized" block. In our example, we want to be able to modify the page title label's text.
Click Module Workspace.
Drag the property block you created when you added a property to the module and connect it to the existing blocks.
Click the gear icon next to the Module Workspace in the component tree.
Click Add an Event.
Give the event a descriptive name (e.g. continue button clicked).
Input the parameters the event will take in.
Once you drag and drop a block that refers to the parameter or publish the component, the event's parameters cannot be edited.
Click the X in the upper right to close the modal.
Click the gear icon next to the Module Workspace in the component tree.
Click Add a Method.
Give the method a descriptive name (e.g. change color).
Input the parameters the method will take in (e.g. color).
Press your keyboard's enter or return key.
Once you drag and drop a block that refers to the parameter or publish the component, the method's parameters cannot be edited.
Click the X in the upper right to close the modal.
My Logic Modules tab - Select a Logic Module from the list.
Module Link Tab - Type or paste the logic module's link.
Click Import
The newly imported logic module is available under the heading Logic Modules in the Blocks panel.
Click Add a Property.
Give the event a descriptive name.
Select the property type (String (text), Boolean (true or false), Number, or Color).
Input the default value, the value the property will have if it is not modified in the project it's imported into.
Click the X in the upper right to close the modal.
Click Add an Event.
Give the event a descriptive name.
Input the parameters the event will take in.
Once you drag and drop a block that refers to the parameter or publish the component, the event's parameters cannot be edited.
Click the X in the upper right to close the modal.
Click Add a Method.
Give the method a descriptive name.
Input the parameters the method will take in.
Press your keyboard's enter or return key.
Once you drag and drop a block that refers to the parameter or publish the component, the method's parameters cannot be edited.
Click the X in the upper right to close the modal.
This action can't be undone and will change all of the instances of this imported module used in the project.
You must view your app with web preview or Thunkable Live to see the module property render. It will not be rendered in the project's designer.
This action can't be undone and will change all of the instances of this imported module used in the project.
Have feedback on this doc? Please take a moment to share your feedback here: Thunkable Docs Feedback. Your valuable insights will help us improve and better serve you in the future.

















