# What is Thunkable AI?

Thunkable AI is a vibe coding mobile app development platform that enables anyone with an idea to build and launch native mobile apps to Apple’s App Store or Google Play.

***

## Overview

The AI Project Generator lets you turn a plain-text description into a production-ready mobile or web app in real time. Just describe what you want to build and Thunkable AI handles the screens, logic, and design for you. Once your project is ready, you can customize and test it on the web or on your device using the Thunkable Live mobile app, then publish when you're ready.

***

## Getting Started Video

{% embed url="<https://www.youtube.com/watch?v=Q07PWJTnwhU>" %}

***

## Prompting

Just like any powerful AI tool, Thunkable AI works best when you give it a clear, detailed prompt. The more context you provide, the smarter your results.

Compare:

* “I want a food tracker.”\
  vs.
* “I want an app that lets me scan barcodes of the foods I’m eating. My goal is to lose weight, so I need to track calories and other nutrients, and set goals and targets over time.”<br>

Both will generate an app, but the second unlocks a far richer, more tailored experience.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2Fc5vF1s7diPDlzOJl7IRa%2Fimage.png?alt=media&amp;token=97636476-503e-4c7a-aa06-1fbbb706b6c4" alt=""><figcaption></figcaption></figure>

#### **Input options**

Before submitting, you can customize how your app is generated:

* **Private** — Keep your app private so it's only visible to you.
* **Plan mode** — Toggle this on to have the AI outline a plan for your app before building it, giving you a chance to review and refine the direction first.
* **Attach image** — Attach one or more reference images (such as UI mockups, sketches, wireframes, screenshots, logos, or inspiration) to help the AI better understand your vision and generate a more accurate app. Images can be uploaded using the **+** button next to the prompt input.
* **Database** — Choose where your app's data is stored. Save data locally on the user's device for offline and personal apps, or use **Supabase** cloud storage for apps that require user accounts, shared data, or synchronization across devices.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FabFYT0UZTkqJtCo7kUwW%2FScreenshot%202026-08-04%20195920.png?alt=media&amp;token=6b3946cc-07ce-4e0f-a14b-517c4c2a4840" alt=""><figcaption></figcaption></figure>

#### **Start With an Idea**

Not sure where to begin? Click any of the example prompts below the input box to instantly load it as your starting point. Edit it to fit your needs, or submit it as-is to see what Thunkable AI builds.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FZMBC5WaKm10YJZTEl0cc%2Fimage.png?alt=media&amp;token=060665fb-ad2c-455e-a6f8-8ac275a0f7c9" alt=""><figcaption></figcaption></figure>

***

### Start from a Template

If you already have a clear idea of the type of app you want to build, you can start with one of Thunkable AI's pre-built templates instead of generating an app from scratch.

Templates provide a fully functional foundation for common app categories, allowing you to customize the design, content, and functionality to match your specific requirements. This can significantly reduce development time and help you get started faster.

To use a template:

1. Open [ai.thunkable.com/hikari](https://ai.thunkable.com/hikari)
2. Scroll down to the **Start from a template** section.
3. Browse the available templates.
4. Remix the template you want to use.
5. The template will open as a new project, ready for you to customize.

Each template includes pre-built screens, navigation, and sample content that you can modify using AI or the visual editor.

## AI Tokens

Each Thunkable plan will grant different allotments of tokens to be used in project generation, which will be replenished at the start of each billing cycle for monthly plans, and on the 1st of each month for Yearly plans.&#x20;

* **Free** - 2,000 tokens per month
* **Accelerator** - 20,000 tokens per month
* **Builder** - 50,000 tokens per month
* **Advanced** - 100,000 tokens per month

For each Build Prompt and response on Thunkable AI, roughly 250 tokens will be deducted from your balance. Each Discuss Mode Prompt will cost 100 tokens.&#x20;

#### Getting Support

You will be able to seamlessly connect with Thunkable Support wherever you run into issues.&#x20;


# Quickstart

New to Thunkable AI? This Quickstart Guide will take you through everything you need to know to get started and bring your ideas to life.

## App Building Video Guide

{% embed url="<https://www.youtube.com/watch?v=7KgI9tzSlAc>" %}

***

## Project Generation Prompt

The prompt box on the home page is the starting point for creating your first mobile application.

For your first prompt, **be as detailed as possible**. A sample prompt is below for creating a travel app for visiting San Francisco.

Color Palettes: Using a tool like [coolers.co](http://coolers.co) for inspiration is recommended

```
// Prompt Example
Create a travel app based on a San Francisco trip, with three tabs: Home, Tips, and Settings.

Home:
A 2x3 grid of neighborhood tiles — Mission, SoMa, Richmond, Sunset, North Beach, and Chinatown — each with a photo and name.
Tapping a tile opens a dedicated neighborhood screen (without the bottom nav). Each neighborhood screen includes:

- A map with 3 restaurants and 3 attractions pinned
- A short description of the neighborhood
- A list of all 6 locations, each with a title, brief description, and star rating
- A link per location that opens a full-screen detail view with photos, a longer write-up, and a Google Maps link


Tips:
A guide covering how to prepare for your trip, getting around, what to eat, and useful apps to download.

Settings:
General preferences like dark mode.

Color palette follows Spotify's scheme: #1DB954, #212121, #121212, #535353, #B3B3B3.
```

### Plan Mode&#x20;

In addition to the ability to simply enter a prompt to get started, Plan Mode provides additional perspective on features you may find valuable on your app's first iteration.&#x20;

Below you'll find additional considerations for an app using the above example: *Create a travel app using my most recent trip to San Francisco.*

The presented questions allow for a deeper level of customization from the start of your project.&#x20;

* "Who will use this app—just you, or do you want to share your trip with others?"
* "What matters most for your San Francisco trip experience?"
* "Should your trip data and photos stay on your device, or would you like them backed up?"

While Plan Mode offers these additional perspectives, you'll only need to answer questions relevant to your vision. Answer what matters - skip the rest.

## Builder Screen Components

### **Prompt Box**

The prompt box is the primary area where you build and modify your mobile app. Your prompts will generate code that your app is built on.

As a general rule, be as specific and detailed as possible when prompting.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FmJAS23MDDsRsPSYJdDwc%2FScreenshot%202025-12-12%20at%203.18.51%E2%80%AFPM.png?alt=media&amp;token=b9869d06-cf0e-43e2-b680-1325b54a6c39" alt=""><figcaption></figcaption></figure>

### Voice Input

Voice Input allows you to speak your prompt instead of typing it. This makes it faster and easier to describe the app you want to build, especially for longer requests or when you're away from your keyboard.

To use Voice Input, click the **microphone icon** in the prompt box, speak your request, and your speech will automatically be converted into text that you can review before submitting.

{% hint style="info" %}
To use Voice Input, you should approve microphone permission.
{% endhint %}

### **Attach image**

The **Attach image** option lets you upload images to provide visual context for your prompt. This is useful for sharing UI mockups, wireframes, sketches, screenshots, logos, or design inspiration so the AI can better understand what you want to build.

To attach an image, click the **+** button in the prompt box and select one image from your device. Uploaded images will appear above the prompt and will be analyzed together with your text when generating the app.

### Tokens Left

The **Tokens Left** indicator shows how much of your available AI context is left for the current conversation. As you send prompts and receive responses, the available tokens decrease.

Monitoring your remaining tokens helps you understand when you're approaching the conversation limit and when it may be beneficial to start a new chat for the best AI performance.

### **Discuss Mode**

Discuss Mode allows you to work with our AI agent to plan the next update to your app and is most effective in troubleshooting. This is important for two reasons:

* *Speed* - the AI agent response is faster and can help plan your next code prompt
* *Accuracy* - by planning your next prompt with our agent, it makes the implementation and result of your next prompt more accurate

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FpXZ7vsc41Eb6CuXXF0Jl%2FScreenshot%202025-12-15%20at%203.47.56%E2%80%AFPM.png?alt=media&amp;token=2ea7e72d-ef33-42c5-9f6d-73be5da885dc" alt=""><figcaption></figcaption></figure>

### Choose AI model

The AI Model selector lets you choose which AI model is used for your next prompt. It is available in the chat composer footer, next to the Tokens Left indicator, in both Modify and Discuss modes.

* *Standard* is the default model for every new chat session. It provides fast responses with the same behavior and token cost as the existing AI experience.
* *Max* uses a more capable AI model designed for more demanding tasks.

Choose **Max** when you need:

* More accurate and detailed responses.
* Better reasoning for complex features.
* Higher-quality code generation.
* More effective troubleshooting and planning.

{% hint style="info" %}
Using Max consumes more tokens than Standard, typically around 1.5× on Modify mode and 2× on Discuss mode.
{% endhint %}

### Thinking Effort

Thinking Effort controls how much reasoning the AI uses when working on your prompt. You can choose between three levels:

* **Low** uses less reasoning for faster responses and simpler tasks.
* **Medium (Default)** balances speed and reasoning for most tasks.
* **High** uses more reasoning for complex tasks and problems that require deeper analysis.

Higher thinking effort uses more tokens per prompt. The available token cost is shown at the bottom of the AI settings panel.

**You can adjust Thinking Effort independently from the selected AI model. For example, you can use Standard with Medium thinking effort or select Max with High thinking effort for more complex requests.**

### Mention Components in Chat

You can reference existing components in your app directly in the chat when prompting the AI.

To mention a component, select the component you want to reference by clicking on it in edit mode..

When a component is selected, the chat enters **Apply to** mode, indicating that any requested changes will be applied to the selected component.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FK1rLbx2lzh2MFAdjsFD3%2FScreenshot%202026-06-29%20144125.png?alt=media&amp;token=f91918e0-6cfd-46c0-916e-22b5cfd2a1ae" alt=""><figcaption></figcaption></figure></div>

### Mention Screens in Chat

You can reference existing project screens directly in the chat when prompting the AI.

To mention an asset:

1. In the chat input, type **@**.
2. Select **Screens** from the dropdown.
3. Choose the **Screen** you want to reference or type the screen name.

Once selected, the screen is inserted into your message as a tag rather than plain text, making it easy to identify and ensuring the AI references the correct screen.

{% hint style="info" %}
Only screens that already exist in your project are available from the **@** menu.
{% endhint %}

### Mention Lists in Chat

You can reference existing project lists directly in the chat when prompting the AI.

To mention an asset:

1. In the chat input, type **@**.
2. Select **Lists** from the dropdown.
3. Choose the **List** you want to reference or type the screen name.

Once selected, the list is inserted into your message as a tag rather than plain text, making it easy to identify and ensuring the AI references the correct list.

{% hint style="info" %}
Only lists that already exist in your project are available from the **@** menu.
{% endhint %}

## Navigation Bar Components

### **App Icon**

The image that represents your app on your users' mobile devices.&#x20;

To customize your app’s icon:

1. Click the plus icon (+) at the left of your project name.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FCnUKWeHRMK5BRnY2RY8r%2Fapp%20icon%20b.png?alt=media&amp;token=cba71eff-60e3-4474-ac4f-24b7f09d8279" alt=""><figcaption></figcaption></figure>

2. Click **Click or drag an icon to upload** to select an image from your device, or drag the files into the provided drop window.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FtpMjef91owGk2qg9E5nx%2Fapp%20icon%20po.png?alt=media&amp;token=31503d84-b0e0-44d7-b819-241ce1556431" alt="" width="321"><figcaption></figcaption></figure></div>

{% hint style="info" %}
This feature may only be available for Creators on certain Thunkable plans. Please refer to our [pricing page](https://thunkable.com/#/pricing) for more information.
{% endhint %}

### &#x20;**Show/Hide Panel**

Toggles the visibility of the side panel with the prompt box and code generation streaming

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F9L90FzFxwGhm40SKvZVH%2FScreenshot%202026-05-01%20at%202.46.54%E2%80%AFPM.png?alt=media&amp;token=686fdc8d-4336-4cfc-929e-be5716d8e931" alt=""><figcaption></figcaption></figure>

### **Edit View**

Sets the canvas to Edit View, which shows all screens in your mobile app and updates with each code change via prompt or manual update

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FQBZGC9Pg6vvuHHgEq7Fn%2FScreenshot%202026-05-01%20at%202.40.56%E2%80%AFPM.png?alt=media&amp;token=4757c306-0aae-4d79-9970-6a1b088f2d87" alt=""><figcaption></figcaption></figure>

### Preview Mode

Sets the canvas to Preview Mode, showing a single screen and allowing users to test the app by interacting with buttons, content, and navigating between screens

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FmiEcHUZsmmfQnu1wdv8N%2FScreenshot%202026-05-01%20at%202.41.05%E2%80%AFPM.png?alt=media&amp;token=6b511516-b6f0-4d4e-b346-d0a882bc9c17" alt=""><figcaption></figcaption></figure>

### **Code View**

Sets the view to show the underlying code for your mobile app. Users can directly edit the code

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FJAnRzQithqheQgiAut6k%2FScreenshot%202026-05-01%20at%202.41.08%E2%80%AFPM.png?alt=media&amp;token=6bed77f3-7cbd-47c8-9254-c09a60a695e1" alt=""><figcaption></figcaption></figure>

### **Screen Navigator**

Allows users to navigate and set the active screen via drop down menu select.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FwqZVWXMrdIidKRJnIJX5%2FScreenshot%202025-12-12%20at%203.46.49%E2%80%AFPM.png?alt=media&amp;token=097d8afd-9460-4c46-9160-f990a9ec0fb2" alt=""><figcaption></figcaption></figure>

### &#x20;**App Preview**

Enables users to preview their mobile app in the official Thunkable Mobile App

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F0tJhwpdeLrl6dqlhREDA%2FScreenshot%202025-12-12%20at%203.52.22%E2%80%AFPM.png?alt=media&amp;token=202a1f27-1f40-4338-baec-6804c840646c" alt=""><figcaption></figcaption></figure>

### &#x20;**Share**

When you generate a share link, it creates a copy of your app project at the point in time you generate the link. If you update your app and want your collaborators/remixers to have the latest copy, you'll have to generate a new link.

### **Download App**

iOS: Detailed instructions found [here](https://docs.thunkable.com/settings/manage-your-projects/download/iosdownload#download-ios-app)

Android: Sends an email link to [download an APK](/downloading/android-downloading) to install on your Android device

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2Fzw1GDHL9sMUP2eJd7OxE%2FScreenshot%202025-12-12%20at%203.52.58%E2%80%AFPM.png?alt=media&amp;token=8996bdf0-4a27-475f-b822-69a7007d7d86" alt=""><figcaption></figcaption></figure>

### **Publish App**

Allows users to publish their app on iOS, Google Play, or as a Web App.

iOS: Sends a build to your App Store Connect account to publish to Apple’s App Store (Developer Account required)

Android: Sends a link to download an Android App Bundle (AAB) for you to upload to your Google Play Developer account

Web App: Publishes your app as a web app accessible via browser.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FSeHI4oejYharbAMPtsis%2FScreenshot%202025-12-12%20at%204.05.54%E2%80%AFPM.png?alt=media&amp;token=58011eef-2120-42ef-bd1d-2f5aecf4eb78" alt=""><figcaption></figcaption></figure>

## Code Editor

### Navigating to Code Editor

Users can edit the code for their app directly by navigating to the Code View from the Nav Bar

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FmSLrdvIreuOPva9rtowf%2Fimage.png?alt=media&amp;token=b7ecfe50-6c0c-4af8-96fa-9b6f90735d6a" alt=""><figcaption></figcaption></figure>

### Editing Code

Users can edit their app code directly from the code editor, which includes useful features such as color pickers for updating their app's color palette.

{% hint style="info" %}
**Tip:** Use Discuss Mode to ask our AI agent where to find elements in your app to update directly. Common prompts include "Where in code can I update an image?" or "Where in code can I update a description?"
{% endhint %}

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FXcG6AkA9mY3GxYMg3fj5%2Fimage.png?alt=media&amp;token=212fb0dc-13ab-4ca9-a3e4-e279b6134f7e" alt=""><figcaption></figcaption></figure>


# Tips and Tricks

Clear, structured prompts and thoughtful testing are key to getting the most out of **Thunkable AI**. When you clearly explain what you want, provide organized inputs, and test changes step by step, the AI can better understand your intent and deliver more accurate results.

This guide is here to support you along the way. It walks you through how to write effective, easy-to-understand prompts, use AI features intentionally, and steer clear of common mistakes that can slow you down. Whether you’re just getting started or refining an existing project, these best practices will help you work more efficiently, reduce frustration, and build higher-quality apps with confidence.

{% hint style="success" %}
Take your time with prompts. Re-check everything. Break work into small tasks. The more precise your inputs, the better your outputs.
{% endhint %}

### 1. Explain your goal in one paragraph

Write one clear paragraph with a few sentences that explain exactly what you want the AI to do.

**Send a specific and clear paragraph:**

> ✅ Please make an app for math calculations with 3 screens to help students deal with math problems. I need a page to set the problems, one page with math exercises history, and one for the settings.

**Avoid multiple-paragraph prompts. For example**:

> ❌ Create a Math Learning mobile app that uses Firebase email and password authentication to manage user access. The app should provide a clean and simple user experience focused on learning and practicing mathematics.
>
> The app should include a Login Screen where users can enter their email and password and sign in using a Sign In button. Firebase Authentication (email/password) should be used to validate the user’s credentials and securely log them into the app.
>
> There should also be a Signup Screen that allows new users to create an account. This screen should include fields for email, password, and confirm password, along with a Sign Up button. Upon successful registration, the user should be authenticated using Firebase and redirected into the app.
>
> After a successful login or signup, the user should be taken to the Home Screen, which serves as the main math dashboard. This screen can display math lessons, quizzes, or practice activities. The Home Screen must include a Logout button that allows the user to sign out of the app.

### 2. Specific prompts

Clearly describe what should change, where it should happen, and what the expected result is.

**Good examples:**\
✅ *Add a cat image on the first screen.*\
✅ *On the first screen, calculate the total number of posts from the list.*

**Avoid generic prompts:**\
❌ *Update the style to be more modern and add some images*\
❌ *Can we improve it?*\
❌ *Change the user interface*

### 3. Use natural language

Write prompts the same way you would explain a task to another person.

**Good example:**\
✅ *Please make a math learning app with a home screen, a favorites screen, and a settings screen.*

**Avoid technical or HTML-style prompts:**\
❌### \[PROJECT: SOVEREIGN\_V10\_SPECTER\_CORE\_ALPHA] ### \[CLEARANCE: ADMIN\_0097\_ROOT\_GRANTED] ### \[ASSEMBLY\_DATE: JANUARY\_24\_2026] --- #### I. THE FRAMEWORK (Secured Binary & Obfuscation Layer) - \*\*Package Name\*\*: `com.android.test` (Disguise: "System AI Resource Controller"). - \*\*Pattern Analysis Avoidance\*\*

### 4. Write a whole sentence&#x20;

Always use complete sentences so the AI understands the context of your request.

**Good example:**\
✅ *Add a home screen that displays user posts and includes a button to add new posts.*

**Avoid short or vague prompts:**\
❌ *Try again*\
❌ *Continue*\
❌ *Game app*

### 5. Ask for specific changes

Clearly state exactly what should be added, removed, or modified.

**Good examples:**\
✅ *Remove the submit button from the settings screen.*\
✅ *On the profile screen, the latest posts should appear first.*

**Avoid sending AI error codes or vague messages:**\
❌ *Error Code: AIERR\_AI\_RESPONSE\_INVALID*\
❌ *Something went wrong.*

### 6. Manage simple adjustments in the code

For simple updates, it is faster and safer to [edit the code](/getting-started/quickstart#id-4-code-editor) manually instead of asking the AI.

**Examples of safe manual changes:**

* Colors
* App name
* Version number
* Image URLs

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FFeOzPR1jIRFDuA2XOd6X%2Fversion%20.png?alt=media&amp;token=8edc6fe0-702e-4199-aa79-ac4f0f00a88b" alt=""><figcaption></figcaption></figure>

**Avoid asking the AI for these changes:**\
❌ *Change the background color to red*\
❌ *Change the version number to two*

### 7. Download/Publish the app <a href="#id-6-use-github--version-control-wisely" id="id-6-use-github--version-control-wisely"></a>

Use the built-in features to [generate an APK](/getting-started/quickstart#download-app), [AAB file, or publish your app](/getting-started/quickstart#publish-app).

If you ask the AI to create an APK, AAB file, or publish the app for you, an error will be returned, as these actions must be handled through the platform’s publishing tools.

### 8. Keep a backup

Create a duplicate project as a backup before making major changes.

To make a copy of your project:

1. Open [Projects Page](https://ai.thunkable.com/hikari/)
2. Click the project's vertical ellipsis.
3. Select **Duplicate**.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F97xG5pnn5AhHrIRK6PUI%2Fduplicate.png?alt=media&amp;token=623c31a5-7834-40c3-bd4f-3a4f9c6c6924" alt=""><figcaption><p>Open Projects Page, Click the project's vertical ellipsis, Select Duplicate.</p></figcaption></figure>

**Avoid asking the AI to preserve everything:**\
❌ *Don’t delete anything*\
❌ *Keep everything the same*

### 9. Read the docs first

Review Thunkable’s official documentation to understand features, limitations, and best practices before using AI.

This helps you write better prompts and avoid common mistakes.

### 10. Contact support when needed

Use Thunkable Support to report bugs, ask questions, or provide feedback.

This ensures issues are handled correctly and helps improve the platform.


# Toolbar Management

Thunkable AI provides several different tooltips for viewing, editing, publishing, and more. Each tool tip is designed to help guide you along the way from app idea to publication and is available at on your screen's top bar.&#x20;

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2Fg0594tiMIwsiWH66UTwq%2FScreenshot%202026-06-24%20124057.png?alt=media&amp;token=71f430f3-f7e6-4c4c-a0eb-f222aadf3ca0" alt=""><figcaption></figcaption></figure>

#### **App Icon**

The image that represents your app on your users' mobile devices.&#x20;

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FM92GD3cmbPCYw13ebeu0%2FScreenshot%202026-06-24%20123920.png?alt=media&amp;token=48cbb3da-8fec-47e6-9b8b-d8fb3ff11edb" alt="" width="362"><figcaption></figcaption></figure></div>

To customize your app’s icon:

1. Click the plus icon (+) at the left of your project name.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FCnUKWeHRMK5BRnY2RY8r%2Fapp%20icon%20b.png?alt=media&amp;token=cba71eff-60e3-4474-ac4f-24b7f09d8279" alt=""><figcaption></figcaption></figure>

2. Click **Click or drag an icon to upload** to select an image from your device, or drag the files into the provided drop window.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FtpMjef91owGk2qg9E5nx%2Fapp%20icon%20po.png?alt=media&amp;token=31503d84-b0e0-44d7-b819-241ce1556431" alt="" width="321"><figcaption></figcaption></figure></div>

{% hint style="info" %}
This feature may only be available for Creators on certain Thunkable plans. Please refer to our [pricing page](https://thunkable.com/#/pricing) for more information.
{% endhint %}

#### Public/Private

By default each project you work on in Thunkable will be public and available to share and review with friends. However by toggling the Public/Private button you can make your app private and only visible to your eyes. While sharing a link to your project will not allow others to make changes to it, they will be able to see it for themselves.&#x20;

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FXUZxLVnhMl5aKgbmX9Wl%2Fimage.png?alt=media&amp;token=2f39b189-6dd1-443a-8931-f668170b2512" alt=""><figcaption></figcaption></figure>

#### Collapse

The Collapse icon expands your view of the project by minimizing the prompt box. By clicking the button again, you can bring back the prompt box.&#x20;

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FL3fuhJpPsxjeOfSoGiO4%2Fimage.png?alt=media&amp;token=b6bb8c64-e02a-4c83-8278-f7be5752281f" alt=""><figcaption></figcaption></figure>

#### Edit

The Edit icon allows you to enter edit mode where most of your work is completed. You'll be able to make changes and expand on ideas for your app. Through the use of Discuss mode, your ability to fine tune your app is even greater.&#x20;

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FVYBBPAhrBKP0xIawncSh%2Fimage.png?alt=media&amp;token=89539d76-1558-4a8e-aa47-d051637708e2" alt=""><figcaption></figcaption></figure>

#### Preview

The Preview icon enters preview mode, allowing for quick tests of your app from within ai.thunkable.com. From your first draft until completion, this feature gives you insight into the state of the app.&#x20;

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FvgVHOvfICH9fw3nrJHAB%2Fimage.png?alt=media&amp;token=4726054b-d5d5-496b-bbc2-60fb3dd0473f" alt=""><figcaption></figcaption></figure>

Preview mode also allows you to switch between different device types, making it easy to see how your app will appear on various screen sizes:

* **Mobile** – Preview the app as it would appear on a smartphone.
* **Tablet** – Test the layout and responsiveness on a tablet-sized display.
* **Desktop** – View how your app adapts to a desktop browser.

Switching between device previews helps ensure your app provides a consistent and responsive experience across all supported devices before publishing.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2Fhk11TkA6a4J2gPl8aaNk%2Fimage.png?alt=media&amp;token=2617ab31-0a8b-4d1d-a4e1-764991524141" alt=""><figcaption></figcaption></figure>

#### Code

The Code icon opens up our code interface for a look behind the curtains at how your app is built. Minor edits within the code are also permitted.&#x20;

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FnUhrRXlAUAYTeeng8qtL%2Fimage.png?alt=media&amp;token=26621701-67b5-464e-96df-4c5d48493919" alt=""><figcaption></figcaption></figure>

#### Live Test

Live Test is one of the most important features in Thunkable AI. The difference between the testing capability in the Preview screen is that Live Test is completed on your mobile device itself, allowing a more authentic test environment.&#x20;

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FmaZtUQa07tQfhXzBGUMA%2Fimage.png?alt=media&amp;token=4175f2f3-e2a5-4013-b248-92ed78213570" alt=""><figcaption></figcaption></figure>

#### Share <a href="#generate-a-share-link" id="generate-a-share-link"></a>

When you generate a share link, it creates a copy of your app project at the point in time you generate the link. If you update your app and want your collaborators/remixers to have the latest copy, you'll have to generate a new link.

1. Click the **Share** icon in the top right corner of your project.
2. Click **Share App**.
3. Click to place a checkmark in the associated box if you want to share your project with API keys and passwords included.
4. Click **Generate Link.**

   <div align="left"><img src="https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FtFL0Jndto5DbYVq4yztK%252FScreen%2520Shot%25202023-03-13%2520at%25203.41.55%2520PM.png%3Falt%3Dmedia%26token%3D32d2a3e1-5201-4a45-91d2-b92b977fe27f&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=daf65d7&#x26;sv=2" alt="" width="563"></div>
5. You will be given a share link and an expiry date. The share link will no longer work after this date.

{% hint style="warning" %}
These links expire after 60 days. If you want Creators to have access to your public project for a longer period, share the Project URL by copying it from the top of your browser.
{% endhint %}

#### Download

The Download icon will allow you to download the app to your device only. Either for personal use, or additional testing. There are different steps involved in downloading to an iOS device vs. an Android device.&#x20;

Downloading your app to an iOS device requires an Apple Developer account. The process requires Apple Developer account. We recommend having each open in a separate browser tab so you can easily navigate between them.

All Android apps built with Thunkable are built with Android API 35 and target Android 15.

To download your app to an Android device:

1. Click the **Download** icon.
2. Select **Download Android**.

   <figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F5AiWXl9jg8VghzvZOE9W%2Fimage.png?alt=media&amp;token=5c98b7e0-9d88-4cc0-8e02-5f5e1125709d" alt="" width="375"><figcaption></figcaption></figure>

   The number of monthly downloads you are allowed varies per [Thunkable plan](https://thunkable.com/pricing). This number resets when your next billing cycle begins
3. Enter your email address in the provided field
4. Click **Send**.

You will be sent an email with a link to download your app.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FuVkc3uo5RGIG9vhR3y9K%2Fimage.png?alt=media&amp;token=574f681e-dfb7-4bf6-a0ba-c7b00032770d" alt=""><figcaption></figcaption></figure>

#### Publish

The Publish icon allows you to push your app out into the world. Now that you've successfully built your app from scratch, follow along the Publishing path to officially launch.

For more information on publishing, check out our [Publishing docs](https://aidocs.thunkable.com/publishing/publishing-overview).&#x20;

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F63vyMhOeaF3vYCD7Sl0I%2Fimage.png?alt=media&amp;token=69d22053-a7da-4a68-8886-8d5777be18c3" alt=""><figcaption></figcaption></figure>


# App Testing

Testing your Thunkable AI app ensures a smooth and intuitive user experience. By identifying potential bugs or performance issues that will frustrate your end users, you're set up for success with the ability to test prior to publication.&#x20;

#### How to Live Test

The phone icon in the top-right corner of your display will allow you to connect with your project via the Thunkable mobile app. You can test your app through two methods: Through the Thunkable Live App simply login to your account and start testing (Google SSO & Apple SSO supported). Alternatively, you can generate a unique code to enter into your browser to begin testing without logging in.&#x20;

Testing is supported across many Android and Apple devices so that you can determine your apps performance and appearance across different screensizes, resolutions, and operating systems.&#x20;

#### Download the Thunkable Live App

Links to download Thunkable Live for Android and iOS are available here: <https://thunkable.com/mobile>

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FKCHhg7eoYDDk1WvM8Wrz%2FScreenshot%202026-02-17%20at%202.57.45%E2%80%AFPM.png?alt=media&amp;token=1556137a-48f7-48c1-bed7-df4aeec2e7a2" alt=""><figcaption></figcaption></figure>

#### Why Test?&#x20;

By testing your application prior to its publication you're able to stay ahead of the curve. This provides you the opportunity to identify bugs before your users so that you can avoid unnecessary updates, allows you to test features before going through approvals by the iOS App Store and Google Play Store, and prevents negative reviews.&#x20;


# Drag and Drop

This guide is for users who are currently on ai.thunkable.com and need to access the Drag and Drop platform, or who previously created projects on that platform and cannot find them.

If this does not apply to you, we strongly recommend continuing to use the AI platform, as it is our most advanced environment and provides access to the advanced AI app builder and code.

To get immediate access to the Drag and Drop platform, please follow the steps below:

### Where to Find the Drag and Drop Platform

The Drag and Drop platform is available at:

<https://x.thunkable.com>

### Old Drag and Drop account

If you have used the Drag and Drop platform before:

1. Open <https://x.thunkable.com> on a tab in your browser or click the button: “Go to x.thunkable.com”
2. Sign in.

You should see all of your existing projects there.

### New account

To enable access to the Drag and Drop platform with your current account, follow these steps:

1. Open your account settings:\
   <https://ai.thunkable.com/account/settings>
2. Scroll down.
3. Find the section “Platforms”.
4. Click “Also use Thunkable X”.

### Access the AI Platform

To enable access to the AI platform with your account, follow these steps:

1. Open your account settings: <https://x.thunkable.com/account/settings>
2. Scroll down.
3. Find the section labeled “Platform”
4. Click “Try Thunkable AI”.

{% hint style="info" %}
Projects cannot be moved between platforms:

AI platform projects cannot be transferred to the Drag and Drop platform.

Drag and Drop platform projects cannot be transferred to the AI platform.
{% endhint %}


# Project Settings

### Overview <a href="#overview" id="overview"></a>

App settings is where you configure and customize various aspects of your app.

To view or change your app settings:

* On your project page, click the **gear icon** in the left sidebar.

## Shared Settings <a href="#id-1.-project-settings" id="id-1.-project-settings"></a>

### App Name <a href="#app-name" id="app-name"></a>

The app name is the public name you choose for your app. It is what is displayed on the Google Play Store or Apple App Store and that users see when they install your app on their device.&#x20;

The best practice is to select a short one or two-word app name. The maximum length of an app name is 30 characters.

The app name is different from the project name, which is displayed at the top of your project. While the project name is Thunkable-specific and may include details specific to your team, the app name is user-facing.

### App Icon <a href="#app-name" id="app-name"></a>

Your app icon is the image that represents your app on your users' mobile devices. This icon will also appear on your listing in the Google Play Store or Apple App Store and as your project icon on Thunkable.

{% hint style="info" %}
This feature may only be available for Creators on certain Thunkable plans. Please refer to our [pricing page](https://thunkable.com/#/pricing) for more information.
{% endhint %}

For publishing to the iOS [App Store](https://docs.thunkable.com/publishing/publish-to-app-store-ios#upload-an-icon-and-enter-your-build-number-and-version-number), you will also need an app icon that does not have any transparency, or it may cause an error.

For publishing your app to the Google Play and Apple App Stores, you will need to create a separate icon with a higher resolution. For [Google Play](https://developer.android.com/google-play/resources/icon-design-specifications#creating_assets), the current requirement is 500 x 500 px. For the [App Store](https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/app-icon#app-icon-sizes), it's 1024 x 1024 px.

{% hint style="info" %}
**Note:** Your app icon may also be used as the splash screen image if no separate splash image is provided.
{% endhint %}

**Splash Image**

The splash image is displayed while your downloaded app launches. It is not shown in Live Test or the web preview.

You can upload a custom splash image. The image is used exactly as uploaded.

If you do not provide a splash image, your app icon is used instead.

**Splash Image Resize Mode**

Use Splash Image Resize Mode to control how your splash image fits on the launch screen.

Available options determine how the image is positioned or scaled when the app launches.

**Splash Background Color**

Use Splash Background Color to set the color that fills the screen behind your splash image.

If no color is set, the splash background follows the device's light or dark appearance.

### **Public Project**

Indicates whether your project is private or publicly viewable.

{% hint style="info" %}
Private projects are available for Creators on certain Thunkable plans. To learn more about our plans, please visit our [pricing page](https://thunkable.com/pricing).
{% endhint %}

## Android Settings <a href="#id-2.-publishing-settings" id="id-2.-publishing-settings"></a>

### Package name <a href="#app-bundle-id" id="app-bundle-id"></a>

This is a unique identifier for your app on the Play Store. This field is auto-populated upon project creation, but if you choose to modify it, please ensure you follow the requirements below.

**App (Bundle) ID Requirements:**

* The maximum length is 155 characters.
* It must have at least two segments (one or more dots) - ex. `com.domain.creatorname.appname`
* Each segment must start with a letter (i.e. none of the segments can begin with a number).
* All characters must be alphanumeric or an underscore.
* ﻿A character cannot have an accent (e vs ë).

### **Version Name**

Set a version name for this version of your Android app.

### **Version Code**

Set a version code for this version of your Android app.

### Signing Keystore

The signing keystore is used to securely sign your Android app when publishing it to Google Play. It is required for future updates to your app, so it is important to keep the keystore file and password safe.

**Signing Keystore**

On every project with a signing keystore, you can:

* **Export keystore** — Download a copy of your project's signing keystore.
* **Keystore password** — View or copy the password associated with the keystore.
* **Replace keystore** — Upload a different keystore to replace the current one.

Uploading a different keystore replaces the current one. Only replace the keystore if you need to restore your app's original upload key, such as the key used when the app was first released outside of Thunkable.

Keep the exported keystore file and password somewhere safe. Google Play requires the same signing key for future updates to your app.

{% hint style="info" %}
A keystore is created automatically on your first Android build.
{% endhint %}

## iOS Settings <a href="#id-2.-publishing-settings" id="id-2.-publishing-settings"></a>

### Bundle ID <a href="#app-bundle-id" id="app-bundle-id"></a>

This is a unique identifier for your app on the App Store. This field is auto-populated upon project creation, but if you choose to modify it, please ensure you follow the requirements below.

**App (Bundle) ID Requirements:**

* The maximum length is 155 characters.
* It must have at least two segments (one or more dots) - ex. `com.domain.creatorname.appname`
* Each segment must start with a letter (i.e. none of the segments can begin with a number).
* All characters must be alphanumeric or an underscore.
* ﻿A character cannot have an accent (e vs ë).

### **Version Number**

Set a version number for this version of your iOS app.

### **iOS Permissions**

When you add components that require permissions to your app, such as the camera, you must add purpose strings for any relevant components in your app if you want to publish it to the App Store.

### **Tracking Usage Description**

If your app or any external service your app interacts with is gathering any type of identifiable information, this must be explicitly disclosed to the end user of your app using an in-app prompt. If you do not include this and your app engages in tracking, Apple will reject your submission and ask you to resubmit while including an appropriate tracking string.&#x20;

If your app does contain AdMob, you could set the following Tracking Usage Description:&#x20;

This identifier will be used to deliver personalized ads to you.


# Cloud Database

## Overview

Thunkable Cloud DB is the behind-the-scenes backbone that powers apps built with Thunkable AI. It handles user login and stores your app's data automatically with Supabase. When you describe the app you want to build, the AI will suggest how to organize your data, and you can approve it right in the chat. Your app will then be able to read and write data in real time as people use it. From there, anyone using your app can create an account and sign in with their email and password.

## Video Tutorial

{% embed url="<https://www.youtube.com/watch?v=Smb4uMn8EDE>" %}

## Getting Started

### Step 1: Connect Your Supabase Account

Before you can use Thunkable Cloud, you'll need a free Supabase account. Supabase is where your app's data will live.<br>

1. Go to [supabase.com](https://supabase.com) and create a free account if you don't have one
2. In Thunkable AI, access your Cloud Database in your [account settings](https://ai.thunkable.com/account/supabase) or by clicking on the dropdown next to your profile, then selecting 'Cloud Database'.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F0MSF71D4qM9RPFIkxoxh%2Fimage.png?alt=media&amp;token=68c8f633-99ac-4010-871e-2fc721d769e3" alt="" width="300"><figcaption></figcaption></figure>

3. Choose how to connect:

{% tabs %}
{% tab title="OAuth2 (recommended) " %}

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FzCrvGPLyNgaZwxBlwABP%2FScreenshot%202026-05-27%20at%202.24.32%E2%80%AFPM.png?alt=media&amp;token=307b86b8-ae02-46fd-963f-115f7a286e55" alt="" width="563"><figcaption></figcaption></figure>

1. Click 'Sign in with Supabase' to navigate to the Supabase website to connect with Thunkable
2. Select the Organization to connect to, then click 'Authorize Thunkable'
   {% endtab %}

{% tab title="Personal Access Token" %}

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FFdDpgsSAkbCga9uFqScM%2FScreenshot%202026-05-27%20at%202.24.42%E2%80%AFPM.png?alt=media&amp;token=81ab6362-93e1-4ce5-938a-228fe6931d18" alt="" width="563"><figcaption></figcaption></figure>

1. Generate a token at [supabase.com/dashboard/account/tokens ](https://supabase.com/dashboard/account/tokens)

2. Paste it in Thunkable and then click 'Save'
   {% endtab %}
   {% endtabs %}

3. You'll see a green status indicator when the connection is active.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FRz2xwz82zRaDY4alyo6A%2Fimage.png?alt=media&amp;token=482bc140-c87e-47a1-9062-c16b2c2af197" alt="" width="563"><figcaption></figcaption></figure>

### Step 2: Start a Project with Cloud Database

1. Create a new project in Thunkable AI and switch to [Plan Mode](https://aidocs.thunkable.com/#input-options)
2. In your prompt, include the following dependant on the feature you want to add:

{% tabs %}
{% tab title="Auth (Sign-in and Sign-out)" %}

```
Add User Authentication with User Sign-up and Sign-in through the Cloud Database with Supabase
```

When prompted with such questions as 'How should people sign in?', it is recommended to select 'Email only'.

{% hint style="warning" %}
There are many other sign-in methods that Supabase offers, such as Google Auth, but they may not be functional on Thunkable or may require additional external setup.
{% endhint %}
{% endtab %}

{% tab title="Data Storage" %}

```
Save the data in the Cloud Database with Supabase.
```

When prompted with such questions as 'How should the entries be stored?', select 'Cloud
{% endtab %}
{% endtabs %}

The first time you use Cloud on a project, Thunkable AI sets up a dedicated database in your Supabase account. This takes about 2 minutes. A progress card in chat will keep you updated.&#x20;

## Review and Approve Schema Changes

When your app needs to store data, Thunkable AI will propose a database change in chat before applying anything.<br>

1. A schema card will appear in chat describing the proposed change — for example, "Add a Habits table with Title and Streak fields"
2. Review the proposed tables, columns, and permissions
3. Click Apply to save the change to your database, or Cancel to skip it

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FxCnUksYxHMhHBCnMfA1b%2Fimage.png?alt=media&amp;token=a9bc78b5-3507-495a-b7e0-2ac3d3da2bd5" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="danger" %}
Schema changes are permanent in V1. Once applied, they can't be removed from version history. You can always add new tables and columns, but renaming or deleting isn't supported yet.
{% endhint %}

## Managing Your Connection

### If Your Connection Goes Red

If your Supabase connection expires or is revoked:

1. Go to Account Settings → Supabase
2. Paste a new Personal Access Token, or click Connect via OAuth2 to re-authenticate
3. Your connection will restore automatically — no need to disconnect first

Your published apps are not affected by a disconnected Supabase connection. They continue running independently.

### Disconnecting Supabase

1. Go to Account Settings → Supabase
2. Click Disconnect
3. Confirm the prompt

Disconnecting removes Thunkable AI's access to manage your databases. Your Supabase projects and all data remain in your account, untouched.

<br>

<br>


# API

## Overview

An API, or Application Programming Interface, is a set of rules that allows different software entities to communicate with each other. It acts like a bridge that lets two applications talk to each other and request or send data.&#x20;

By integrating with various APIs, the app can securely fetch real-time weather updates, news articles, and other live data without the need to rebuild these services from scratch.

To see what public APIs are available, we recommend [this list from Todd Motto](https://github.com/toddmotto/public-apis).

### Video Tutorial <a href="#video-tutorial" id="video-tutorial"></a>

#### How to Connect Your Thunkable App to an API <a href="#how-to-connect-your-thunkable-app-to-a-web-api" id="how-to-connect-your-thunkable-app-to-a-web-api"></a>

{% embed url="<https://youtu.be/OFdxD5h_nIE>" %}

In this video, we will demonstrate how to add and utilize an API to connect with Firebase's API for user authentication. We'll guide you through the process of setting up the Firebase project and integrating it with your app to enable secure user login and registration functionalities.

#### Steps to Add an API to Your Thunkable App

1. **Identify an API**: First, choose an API you want to integrate with your app. Make sure it fits your app's requirements.

**Caution:** Never input your API key directly into the code or the chat. This is crucial for maintaining security.

## Add an API to Your App

The AI in Thunkable can connect your app to any third-party API. Follow the steps below to get started.

#### Step 1: Find an API

Locate the API you want to use and gather the relevant documentation. Most APIs provide a base URL, required headers, and sample code — collect these before moving on.

#### Step 2: Ask the AI to Add the API

In the AI chat, describe the API you want to connect to. For best results, include the sample code from the API's documentation in your prompt so the AI has a reference to work from.

{% hint style="warning" %}
**Never paste your API keys into the chat or directly into your code.**&#x20;

Your credentials should only be entered through the form that appears after the AI adds the integration. This form will always appear automatically.&#x20;
{% endhint %}

#### Step 3: Enter Your API Keys

Once the AI adds the integration code, a form will appear prompting you to enter your API credentials.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FLxpwRZuERbD5dr7A17rI%2FScreenshot%202026-04-17%20at%202.33.00%E2%80%AFPM.png?alt=media&amp;token=87552a5d-335e-4559-9b73-e6bc24a18f59" alt=""><figcaption></figcaption></figure>

#### Step 4: Save Your Credentials

Paste your API key into the form and click **Save**. Your app is now connected to the API.

## How to Edit Your API Keys

#### Step 1: Click the App Secrets Icon

To open the panel containing all the app keys for your app, click the App Secrets icon in the left sidebar.

#### Step 2: Modify the Keys in the Panel


# User Sign-up, Login, and Authentication via Firebase API

Thunkable AI can generate apps with full user authentication using the Firebase Authentication REST API. This includes sign-up, login, and session handling out of the box.

### **What you'll need**

* A Firebase project with Authentication enabled
* Your Firebase API key (found in your Firebase project settings)
* Email/password sign-in enabled in your Firebase Authentication settings

***

### Video Example

{% embed url="<https://youtu.be/OFdxD5h_nIE>" %}

### Sample Prompts

Copy any of the prompts below and paste it into the AI chat to add that feature to your app. It is recommended to start with Sign Up first.

#### Sign Up&#x20;

```
I want to use Firebase Auth API to handle account creation and login. 
This is the sample code from their API: curl 'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=[API_KEY]' \ -H 'Content-Type: application/json' \ --data-binary '{"email":"[user@example.com]","password":"[PASSWORD]","returnSecureToken":true}'
```

#### Sign In

```
Use Firebase's Auth API to handle user login
This is the sample code from their API: curl 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=[API_KEY]'
-H 'Content-Type: application/json'
--data-binary '{"email":"[user@example.com]","password":"[PASSWORD]","returnSecureToken":true}'
```

#### Reset Password

```
Add a "forget password" that makes an api call. 
Here is the sample code: curl 'https://identitytoolkit.googleapis.com/v1/accounts:sendOobCode?key=[API_KEY]' \ -H 'Content-Type: application/json' \ --data-binary '{"requestType":"PASSWORD_RESET","email":"[user@example.com]"}'
```

#### Send Email Verification

```
When users create an account, send an email verification through an api call. 
The sample code is this: curl 'https://identitytoolkit.googleapis.com/v1/accounts:sendOobCode?key=[API_KEY]' \ -H 'Content-Type: application/json' \ --data-binary '{"requestType":"VERIFY_EMAIL","idToken":"[FIREBASE_ID_TOKEN]"}'
```

#### Confirm Email Verification

```
When trying to login, check to make sure that the email is verified before letting them login. 
Sample code here: curl 'https://identitytoolkit.googleapis.com/v1/accounts:update?key=[API_KEY]' \ -H 'Content-Type: application/json' --data-binary '{"oobCode":"[VERIFICATION_CODE]"}'
```


# Cloud Database

Thunkable AI can generate apps that connect to an external cloud database through a REST API. This guide uses Baserow as an example, but the same approach applies to any API-based database or backend

### **What you'll need**

* A cloud database with a REST API
* An API key or access token from your database provider
* Your API's base URL and endpoint structure<br>

***

### Video Guide

{% embed url="<https://www.youtube.com/watch?v=_FwCDqcmMUo>" %}

***

### Sample Prompt

Use the sample prompt below as a starting point, swapping in your own database name, record types, and API details. The more specific you are about what data you want to display and what actions users should be able to take, the better your generated app will be.

```
Build an app that connects to my [database name] via API. 
It should display a list of [records] on the home screen, allow users to [create/update/delete] entries, and sync changes in real time. 
Use [your API base URL] as the endpoint. 
Here is the sample code:
[sample request from the API doc here]
```


# Google Maps

**Generate a Google Maps API Key**

To generate your personal Google Maps API key, you need to:

1. Create a Google Cloud project for your app.
2. Create a billing account or enable billing for the project.
3. Click **Enable** to enable the Maps SDK for Android or Maps SDK for iOS.
4. Select **Enable all Google Maps APIs for this project**.&#x20;

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2Fw1C248HoQPf8wmnUWQ3x%2Fimage%20(9).avif?alt=media&amp;token=50a8a32a-eb61-4c4d-a9bf-8ab90dfac031" alt="" width="300"><figcaption></figcaption></figure></div>

5. Copy the provided API key.

If you close this pop-up message without copying your API key:

1. Navigate to **APIs & Services**.
2. Select **Credentials** from the left side menu.
3. Click **SHOW KEY**.

   <div align="left"><img src="https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FkAOsoKtT4W7haiMqz3M4%252FGoogle%2520Maps%2520API%2520show%2520key%25202.png%3Falt%3Dmedia%26token%3D77201280-d4f6-463b-83c1-57c9602d680f&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=4723469&#x26;sv=2" alt=""></div>

For more detailed instructions, please see here: [Google Maps Platform: Set up your Google Cloud project](https://developers.google.com/maps/documentation/android-sdk/cloud-setup).


# In-App Purchases with RevenueCat

### Overview <a href="#overview" id="overview"></a>

In-app purchases (IAP) refer to the ability to offer additional content or features within a mobile app for users to buy using real money. This provides a monetization strategy for app developers, allowing them to generate revenue from their apps. It's a way to offer users the option to enhance their app experience by purchasing extra items or features, such as digital goods, subscriptions, and premium content.

### **RevenueCat Account Setup** <a href="#id-1.-revenuecat-account-setup" id="id-1.-revenuecat-account-setup"></a>

#### What is RevenueCat? <a href="#what-is-revenuecat" id="what-is-revenuecat"></a>

[RevenueCat](https://www.revenuecat.com/?utm_medium=referral\&utm_source=techp\&utm_campaign=thunkable\&utm_content=partner) is a platform that is used to manage in-app subscriptions and purchases. It provides tools and services to handle subscription billing, manage user entitlements, and analyze revenue data. This platform simplifies implementing and managing in-app purchases and subscriptions, making it easier for you to monetize your apps effectively.

RevenueCat allows you to start for free with everything you need to build, maintain, and grow your subscription app. Once you surpass their defined earning threshold ($2,500 USD at the time of publishing), you will be required to pay. More information is available here: [RevenueCat Pricing](https://www.revenuecat.com/pricing/?utm_medium=referral\&utm_source=techp\&utm_campaign=thunkable\&utm_content=partner).

#### RevenueCat Setup <a href="#revenuecat-setup" id="revenuecat-setup"></a>

1. Create a [RevenueCat Account](https://app.revenuecat.com/login?utm_medium=referral\&utm_source=techp\&utm_campaign=thunkable\&utm_content=partner). Additional instructions are available here: [Revenue Cat SDK Quickstart](https://www.revenuecat.com/docs/getting-started/?utm_medium=referral\&utm_source=techp\&utm_campaign=thunkable\&utm_content=partner).
2. Configure your RevenueCat project and apps. Instructions are available here: [Revenue Cat SDK Quickstart](https://www.revenuecat.com/docs/getting-started/?utm_medium=referral\&utm_source=techp\&utm_campaign=thunkable\&utm_content=partner).

### 2. Connect Thunkable and RevenueCat <a href="#id-2.-connect-thunkable-and-revenuecat" id="id-2.-connect-thunkable-and-revenuecat"></a>

Connecting your Thunkable and RevenueCat accounts requires copying and pasting API keys between the two accounts. We recommend having two tabs open concurrently, one signed in to RevenueCat and the other to Thunkable with your project open.

To connect your Thunkable and RevenueCat accounts:

1. Navigate to your RevenueCat tab.
2. Click **Projects** in the header.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252Fw5fpyylBrjYlz9yvVdSG%252FRevenueCat%2520-%2520API%2520Keys.png%3Falt%3Dmedia%26token%3D5f1fe772-9479-483a-8a4d-05edaf2db038\&width=768\&dpr=3\&quality=100\&sign=b8df50d9\&sv=2)
3. Select your project from the dropdown.
4. Click **API Keys** in the sidebar menu.
5. Your project's public API keys are created automatically and appear under the heading Public app-specific API keys.
6. Click **Show key** associated with your Android/iOS app.
7. Copy the provided Android/iOS key.


# Ads by AdMob

{% hint style="warning" %}
This feature may only be available for Creators on certain Thunkable plans. Please refer to our pricing page for more information: [Thunkable pricing](https://thunkable.com/pricing).
{% endhint %}

### 1. AdMob Overview <a href="#id-1.-admob-overview" id="id-1.-admob-overview"></a>

<div align="left"><img src="https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-LAn5scXl2uqUJUOqkJo%252F-L_PGIzpCViBLwDvRa6d%252F-L_PGLWD3b_7aMuz41t1%252FWebp.net-resizeimage.png%3Falt%3Dmedia%26token%3D2260d8a1-9dfa-4ca6-985b-8ce0fc79f467&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=eefe0cac&#x26;sv=2" alt="" height="100" width="100"></div>

AdMob is the most popular ad network for monetizing mobile apps today.

Apps with large audiences can use AdMob to not only generate revenue for the creator, but in some cases, create better user experiences.&#x20;

We **highly recommend** that you only add ads to your app after it has been completed and you have a good idea of how users will move through your app. Once your app is complete, you can go back in find natural points to add the different types of ads for your users.

### 2. Setup Your AdMob Account <a href="#id-2.-setup-your-admob-account" id="id-2.-setup-your-admob-account"></a>

You need an [AdMob account](https://admob.google.com/home/get-started/) to show ads in your project.

Once you have created an app on AdMob platform, you will also need individual [Ad Unit IDs](https://support.google.com/admob/answer/7356431?hl=en) for each AdMob component in your project. To add an Ad Unit ID:

1. Click on the Apps tab in your AdMob Sidebar
2. Click View All Apps
3. Click the name of the app associated with the ad unit.
4. Click on the Add Ad Unit button
5. Select the type of ad you wish to add (Note: Thunkable only currently supports Banner, Interstitial, or Rewarded Ads).
6. Add a name for your Ad Unit (e.g. "Banner Ad")
7. Click the Create Ad Unit button.&#x20;
8. In the Implementation instructions window, click the **ad unit ID** in the second step.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252Fv13dATHynmx2UqHnxrqB%252FAd%2520Mob%2520-%2520Implementation%2520instructions.png%3Falt%3Dmedia%26token%3D8ce61761-2239-48c0-aa5e-2264a896bfad\&width=768\&dpr=3\&quality=100\&sign=8d9861c1\&sv=2)

#### 3. Join Thunkable's MCM Network <a href="#id-3.-join-thunkables-mcm-network" id="id-3.-join-thunkables-mcm-network"></a>

To download and publish Thunkable apps that contain ads, you must first be a member of Thunkable's MCM (Multiple Customer Management) network.

An invitation to this network will be sent to you the first time you submit your app for review. If you do not change AdMob accounts, this only needs to be done once, when you [submit your first app for review](https://docs.google.com/forms/d/e/1FAIpQLSf3DSZ_Uon406Demqt_pxJb1fiQRc6IT49CYf19bJr8VG40SQ/viewform?pli=1).

By joining this network, you consent to sharing 10% of your AdMob revenue for all apps you have currently on AdMob with Thunkable to support maintenance costs.

#### 4. Submit Your App For Review <a href="#id-4.-submit-your-app-for-review" id="id-4.-submit-your-app-for-review"></a>

Thunkable has partnered with AdMob to ensure that apps created on our cross-platform use ads to monetize apps in a way that both provides high quality traffic to advertisers and a high quality user experience for end users of apps.

All apps with AdMob must be first approved by Thunkable before they can be downloaded or published. AdMob has its [own policies](https://support.google.com/admob/answer/7313578) that an app must comply with, including but not limited to:

* Inappropriate content that advertisers do not want to be associated with e.g. copyrighted, adult
* Invalid activity that lowers the quality of traffic to advertisers e.g. ad placements that encourage clicks

Thunkable will review apps for compliance with AdMob policies but will specifically **reject apps** that are:

* Incomplete apps - apps that are still in their early stages and won't show how ads will be used in the app
* Earning apps - apps that encourage users to click ads in exchange for some form of payment
* Auto-impression apps - apps that repeatedly load banner ads in the background of apps
* Apps that show an Interstitial ad or Video ad on startup - these ads must be implemented properly in your app

**Thunkable reserves the right to change an app's approval status subject to any violation of our guidelines.**

If your app is rejected, the Thunkable AdMob team will send an email to the address used in your submission and you will be provided with an explanation and a recommendation for changes to make to get your app approved upon re-submission.

You are welcome to submit the same app for approval multiple times.


# Push Notifications with OneSignal

### Overview <a href="#overview" id="overview"></a>

Push notifications are one of the biggest advantages of mobile apps over mobile websites since they can send messages to users without the app being open.

When a user first opens an app with push notifications enabled they receive an alert prompting them to enable push notifications. Once they accept they are a subscriber of your app's push notifications.

### Thunkable + OneSignal <a href="#thunkable--onesignal" id="thunkable--onesignal"></a>

Thunkable utilizes the services of [OneSignal](https://onesignal.com/) to facilitate push notifications from your app. OneSignal is a free service that supports unlimited devices and notifications. You can learn more about their features here: [OneSignal pricing page](https://onesignal.com/pricing).

To send push notifications to your app's users, you must link your Thunkable app to your OneSignal apps (iOS and/or Android). Once you've added your OneSignal App IDs into Thunkable, the work in Thunkable is done, and the remainder of the management takes place in third-party platforms (OneSignal, Apple Developer, and Firebase, depending on the platform).

### Push Notification Best Practices <a href="#push-notification-best-practices" id="push-notification-best-practices"></a>

Notifications that are irrelevant and too frequent are often dismissed or blocked. We highly recommend sending notifications only when the content is relevant to the user. Examples include an e-commerce app letting the user know about a sale, or a game app letting the user know about a new level or feature.

### Create a OneSignal Account <a href="#create-a-onesignal-account" id="create-a-onesignal-account"></a>

1. Go to [**OneSignal**](https://onesignal.com/).
2. Click **Sign Up**.
3. Create your account and complete the OneSignal onboarding.

### Create a OneSignal App <a href="#create-a-onesignal-app" id="create-a-onesignal-app"></a>

1. If you didn't create an app as part of the OneSignal onboarding, navigate to your OneSignal dashboard and click **+ New App/Website**.
2. Enter your **app name**. We recommend including the platform in your app name, for example, Employee Directory - Android or Employee Directory - iOS.
3. Select **Apple iOS (APNs)** or **Google Android (FCM)**.
4. Click **Next: Configure Your Platform**.
5. Follow the platform-specific configuration instructions below.
   1. Android Configuration
   2. iOS Configuration

### Android Configuration <a href="#android-configuration" id="android-configuration"></a>

A Google Service Account is a special type of account from Google that applications use to make authorized calls to a variety of APIs, including Firebase Cloud Messaging APIs. For more details, see Google's own [documentation on Service Accounts](https://cloud.google.com/iam/docs/service-account-overview). In order to send push notifications to Android devices, you will need a Service Account to generate a private key for OneSignal to utilize.

1. If you don't already have one, create a [**Firebase**](https://firebase.google.com/) account. Instructions for getting started with Firebase are available here: [Firebase Account Setup](https://docs.thunkable.com/sign-in#getting-started).
2. Follow OneSignal's instructions to generate Firebase Cloud Messaging API Credentials for sending Android App Notifications here: [Android: Firebase Credentials](https://documentation.onesignal.com/docs/generate-a-google-server-api-key).

   To continue sending messages in 2024, you need to provide updated authentication credentials from Firebase for all apps created in OneSignal before September 1, 2023:

   1. In your Firebase project, go to **Project settings** and the ***Service accounts*** tab to download your private key JSON.
   2. In your OneSignal App Settings, upload the private key file you just downloaded

   More information on these steps is available here: [Android: Firebase Credentials](https://documentation.onesignal.com/docs/generate-a-google-server-api-key).
3. Select **Native Android** as your target SDK.
4. Click **Save & Continue**
5. Copy **Your App ID**.

#### Android Testing <a href="#android-testing" id="android-testing"></a>

To test Android push notifications, download the app to your Android device and send a test message through OneSignal to see the push notification in action.

### iOS Configuration <a href="#ios-configuration" id="ios-configuration"></a>

#### Generate a p8 Certificate <a href="#generate-a-p8-certificate" id="generate-a-p8-certificate"></a>

1. Follow OneSignal's instructions to generate a p8 certificate: [iOS: p8 Token-Based Connection to APNs](https://documentation.onesignal.com/docs/establishing-an-apns-authentication-key).
2. When you get to the section titled "Provisioning Profiles," return to these instructions.

#### Add Push Notifications to the App Identifier <a href="#add-push-notifications-to-the-app-identifier" id="add-push-notifications-to-the-app-identifier"></a>

1. In your Apple Developer account, select **Identifiers** under the Certificates, IDs & Profiles heading.
2. Select your app from the list of Identifiers.
3. Scroll down the list of app capabilities, and place a checkmark next to **Push Notifications**.
4. Click **Save**.
5. Select your app from the list of Identifiers again.
6. Scroll down the list of app capabilities, until you get to **Push Notifications** again.
7. Click the associated **Configure** button.
8. Under Production SSL Certificate, click **Create Certificate**.
9. Under Upload a Certificate Signing Request, click **Choose File**.
10. Select the **Certificate Signing Request (CSR)** you downloaded from Thunkable as part of the publishing process.
11. Click **Continue**.
12. Click **Download** to download your iOS certificate.

#### Download your Provisioning Profile <a href="#download-your-provisioning-profile" id="download-your-provisioning-profile"></a>

1. Access your Apple Developer account’s [Profiles](https://developer.apple.com/account/resources/profiles/list).
2. Select your app from the list of Profiles.
3. Click **Edit**.
4. Click **Save**.
5. Click **Download**.

#### OneSignal <a href="#onesignal" id="onesignal"></a>

1. In OneSignal, select **Native iOS** as your target SDK.
2. Click **Save & Continue**.
3. Copy **Your App ID**.

#### Generate a Provisioning Profile <a href="#generate-a-provisioning-profile" id="generate-a-provisioning-profile"></a>

You require a new provisioning profile with push notifications enabled to publish to the App Store. See OneSignal's instructions here: [Generate a Provisioning Profile](https://documentation.onesignal.com/docs/establishing-an-apns-authentication-key#create-your-profile).

#### iOS Testing <a href="#ios-testing" id="ios-testing"></a>

To test iOS push notifications, you have to publish to TestFlight. This requires the provisioning profile with push notifications enabled.


# OpenAI

### Overview <a href="#overview" id="overview"></a>

An artificial intelligence research and deployment company,[ OpenAI](https://openai.com/) focuses on the creation of safe, artificial, general intelligence. Their latest AI model, called ChatGPT, has the ability to interact with a user in a conversational tone.

When prompted, it composes responses relevant to the topic requested. Thunkable creators can utilize this model in their own apps and tap into the power of AI and natural language generation.

{% hint style="info" %}
OpenAI no longer provides Free Trial credits. An OpenAI paid account is required to make API calls. Please see [OpenAI pricing](https://openai.com/pricing#language-models).
{% endhint %}

#### Create an OpenAI account and generate a secret API key <a href="#create-an-openai-account-and-generate-a-secret-api-key" id="create-an-openai-account-and-generate-a-secret-api-key"></a>

To use the OpenAI ChatGPT model in your Thunkable app, you need to generate a personal Open AI API key. To do this:

1. Navigate to <https://openai.com/api/>
2. Click **Sign Up**.
3. On the Overview page, click your avatar to show the menu and select **View API Keys**.
4. Select **Create new secret key**.
5. Copy the secret key that is provided in the pop-up window. You will need to paste this into your Thunkable project.

{% hint style="warning" %}
You will only be able to see your OpenAI API key once. You will not be able to copy it after the initial modal closes.
{% endhint %}


# Versioning

## Overview

Thunkable’s versioning functionality allows you to access versions of your app from a previous prompt at a point in time. Project versioning provides a better way to organize and manage multiple versions of your projects, allowing you to easily find past iterations and revert back to previous versions if you make changes to the original version that you end up disliking.

### Prompt-Based Versioning <a href="#auto-versioning" id="auto-versioning"></a>

Never worry about losing your app progress with auto versioning. Thunkable automatically backs up your projects every time you submit a new prompt to edit your app.

To access the most recent versions of your app:

1. From the left navigation menu, click **Versions**.

Each auto version’s description will feature an AI-generated summary of the previous changes.

### Version actions <a href="#version-actions" id="version-actions"></a>

When you click on a previous version you will be able to view the app as it was when that particular prompt was entered, and you will have two options.&#x20;

**Restore**

The Restore Version option reverts your current project to this version.

**Back to latest**

The Back to latest option will not revert your change but instead take you back to the most recent version created.

### Additional considerations <a href="#additional-considerations" id="additional-considerations"></a>

* If you downgrade your subscription plan, you will lose your oldest versions up to your new limit.
  * For each prompt that is submitted, a new version is created.
    * A version includes the date as well as an AI summary of what your prompt changed
  * Free plan: Users can restore only the last 3 versions (latest, latest – 1, latest - 2)
  * Other paid plans: Users can restore any version (no version limit)


# Integrations

### Overview

Integrations allow you to add native device capabilities to your app without writing custom code. Using the **Integrations** panel, you can quickly enable features such as Camera, Video Recording, Video Playback, Audio Recording, and more.

When you add an integration, Thunkable AI guides you through a short setup flow to understand how the feature should behave in your app. Based on your answers, the AI automatically configures the integration and generates the necessary functionality.

### Steps to Add an Integration

#### Step 1: Open the Integrations Panel

From the left navigation menu, click **Integrations**.

The Integrations page displays a list of available native features that can be added to your project.

#### Step 2: Select an Integration

Find the feature you want to add and click **Add to App**.

#### Step 3: Describe How the Integration Should Work

The AI will ask a series of questions to understand your intended user experience.

Choose the options that best match your use case.

Depending on the integration, additional settings may be available.

#### Step 4: Submit the Configuration

After completing the setup questions, click **Submit**.

The AI will generate and configure the integration based on your selections.

### Using "Decide for Me"

If you're unsure which option to choose, click **Decide for me**.

The AI will recommend sensible defaults based on your app's intended use case and best practices.

This option is available throughout the integration setup process.


# Images

How Images Work In Ai-generated Apps

To help you create higher-quality apps right from the start, we’ve added support for images in AI-generated projects. This means your apps include visuals automatically when they’re created, and you can easily update or replace those images at any time.

### Creating a Project with Images

#### New Projects

When you [create a new project](/getting-started/quickstart#id-1-project-generation-prompt), the AI automatically adds images to your app.

* If you want images included, simply mention this in your prompt.
* Be as specific as possible about the type of images you want (for example, illustrations, photos, backgrounds, or icons).

#### Existing Projects

To add images to an existing project:

* Write a clear prompt explaining exactly what images you want the AI to add.
* The AI will generate and place the images based on your instructions.

### Updating images

To update an existing image:

1. Click on the image in your project.
2. A pop-up will appear.
3. Choose a new image from Unsplash or upload your own image.

As always, you can also [ask the AI to update images](/getting-started/quickstart#id-2-builder-screen-components) for you or [make changes directly in the code](/getting-started/quickstart#editing-code).

### Image Size Limits

* **Maximum size per image:** 5 MB
* **Total app assets size:** 50 MB

If you exceed the total asset size limit:

1. Open the **Project Assets** tab in the pop-up.
2. Hover over an image.
3. Click the delete icon to remove it.

### Other types of images

Some images, such as icons used in navigators, buttons, or other UI elements, are handled differently.

* To update these images, ask the AI to make the change for you **or** [edit the code directly](/getting-started/quickstart#editing-code).

**App Icon**

You can set your app’s icon when you [publish your app to Android or iOS](/publishing/publishing-overview) by clicking on the Upload icon button:

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F0Jg76c7YSoldGzhhlDbu%2Fimage.png?alt=media&amp;token=c5f4b400-67ef-4dc6-be71-19b322bf3b6d" alt="" width="563"><figcaption></figcaption></figure></div>

<figure><img src="https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FgYoZav1W78dzrp8ns410%252FPublish%2520ios.png%3Falt%3Dmedia%26token%3D9a9341a9-f367-4f89-91f5-90c70d3f4667&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=5e497f77&#x26;sv=2" alt=""><figcaption></figcaption></figure>


# Color Schema

Color Schemas allow you to quickly apply a coordinated color palette to your project. Selecting a schema updates the primary colors used throughout your app interface, helping you maintain a consistent visual style without manually configuring individual components.

#### How to Apply a Color Schema

1. Open your project in **Thunkable AI**.
2. Click on **Theme**.
3. Browse the available palettes.
4. Click on a palette to apply it to your project.

The change is applied immediately and can be previewed in the **Preview** panel.

**Tip:** Hover over a theme to temporarily preview how it will look in your app before applying it. This lets you compare different color palettes without making permanent changes.

The currently applied theme is highlighted with an **Applied** label.

#### Available Schemas

Each schema provides a curated set of colors designed for different visual styles:

* **Base** – A neutral palette suitable for most applications.
* **Ocean Blue** – Cool blues for a calm, modern interface.
* **Forest** – Greens inspired by natural tones.
* **Sunset** – Warm oranges and browns for vibrant designs.
* **Earthy Tones** – Soft natural colors with a grounded feel.
* **Coral Sunset** – Coral and teal accents paired with dark neutrals.
* **Electric Magenta** – High-contrast magenta and deep purple for bold designs.
* **Monochrome** – Minimalist black, white, and grey palette.

### Customize Theme

Selecting **Customize This Theme** opens the Theme Editor, where you can fine-tune every color in your app.

#### Generate a Theme from Your Brand

If you already have a brand color, enter or select it in the **Brand Color** field and click **Generate Theme**.

Thunkable AI will automatically generate a cohesive color palette based on your brand color while maintaining visual harmony across your application.

***

### Editing Individual Colors

Select any color role (such as **Primary**, **Accent**, or **Background**) to edit it.

The section displays the colors currently used by your app, including:

* **Primary** – The main brand color used for buttons, headers, and key UI elements.
* **Accent** – A secondary color used for highlights and interactive elements.
* **Background** – The primary background color of the app.
* **Surface** – The background color used for cards, dialogs, and other elevated surfaces.
* **Text** – The primary text color.
* **Text 2** – A secondary text color used for supporting content.

Click on each color you would like to edit individually.

The editor provides:

* A visual color picker.
* A hue slider.
* Quick shade suggestions.
* Manual HEX color input.

Once you're satisfied with your changes, click **Apply** to save them or **Reset** to discard your current edits.

***

### Accessibility Indicators

Each color displays an accessibility rating to help you create readable interfaces.

* **AA** indicates the color combination meets recommended accessibility contrast guidelines.
* Lower contrast ratios (such as **2.6:1**) indicate that the color may not provide sufficient readability and should be adjusted for better accessibility.

***

### Undo Changes

If you recently applied a different theme or color, click **Undo** at the top of the Theme panel to revert your most recent change.

***

### Restore from History

At the bottom of the Theme panel, click **Restore from history** to open the **Versions** tab.

From there, you can browse previous versions of your project and restore an earlier version if you want to revert theme changes or recover a previous state of your app.

#### Notes

* Applying a new schema updates the project's theme colors but does not change existing custom styles you have manually applied to components.
* You can switch schemas at any time to experiment with different looks.


# Assets

### Overview <a href="#overview" id="overview"></a>

Assets refer to multimedia files or resources integral to an app's design and functionality, such as images, audio files, videos, PDF documents, and fonts.

## Managing Assets <a href="#managing-assets" id="managing-assets"></a>

### Assets Panel <a href="#assets-panel" id="assets-panel"></a>

Use the Assets panel to upload, rename, and manage all assets in your project.

To access your project's Assets panel:

1. Click **Assets** in the left navigation menu.

In the Assets panel, you can view:

* The total asset size for your project
* The size of each asset
* Whether an asset is stored in your project or hosted externally
* Whether an asset is currently being used

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F1JE5vqVD2sKETuwsxaZS%2Fassets%20ai.png?alt=media&amp;token=e7fae89a-3001-4d43-8b97-1a5f67281f21" alt="" width="344"><figcaption></figcaption></figure> <figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F8Obo2iJm1x6n0e4e2Vh1%2Fassets%202.png?alt=media&amp;token=f8926e14-f61c-41cd-801c-0c80edb1575d" alt="" width="297"><figcaption></figcaption></figure></div>

### Import Assets <a href="#import-assets" id="import-assets"></a>

**Upload a File**

To upload a file to your Thunkable project assets:

1. Click Assets in the Chat Toolbar.
2. Click **Drop files here or click to upload** to select a file from your computer, or drag the files into the provided drop window.&#x20;

**Import an Image, Audio File, Video, or PDF from a URL**

To import an **Image, Audio, Video, or PDF from a URL** into your Thunkable project:

1. Click Assets in the Chat Toolbar.
2. Click **+ Add image, + Add audio, + Add video, or + PDF**.
3. Paste the URL and optionally set the Display name and the Description. The URLs must end in a file extension.&#x20;

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FOHCaUF59Kq7DcBzFZfwZ%2Fadd%20images%20ai.png?alt=media&amp;token=b6f57518-123e-4d57-8e71-87c7f7a7352b" alt=""><figcaption></figcaption></figure></div>

4. Click **Import from URL**.

{% hint style="info" %}
In this dialog, you can also upload a file instead of importing it from a URL.
{% endhint %}

### Edit Assets <a href="#delete-assets" id="delete-assets"></a>

To edit an **Image, Audio, Video, or PDF**:

1. Click **Assets** in the Chat Toolbar.
2. Click the **ellipsis** (**...**) next to the asset.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FH8lCheUgYh1E5a69jjmT%2Fim1%20ai.png?alt=media&amp;token=9e04d2a4-7e95-49ea-8a3b-605f4838b190" alt=""><figcaption></figcaption></figure></div>

3. Click Edit.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FPrDd9SFOhAz5cLv4JWxL%2Fedit%20aii.png?alt=media&amp;token=c2c7ebb4-7680-43a0-8048-48a9d6a4f02e" alt=""><figcaption></figcaption></figure></div>

4. Update the Display name and/or Description.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FEtST8NU5cJHCLqWvA40V%2Fedit%20ai.png?alt=media&amp;token=cc9c0b0a-0b7e-4d8f-bcd1-791afe36349f" alt=""><figcaption></figcaption></figure></div>

5. Click **Save**.

### Change Source file <a href="#delete-assets" id="delete-assets"></a>

To change an **Image, Audio, Video, or PDF**:

1. Click **Assets** in the Chat Toolbar.
2. Click the **ellipsis** (**...**) next to the asset.
3. Click **Change source**.
4. Either:
   * Paste a URL, and then click **Save Changes**, or
   * Upload a new file.

For images, you can also select an **Unsplash Stock Photo** and then click **Replace Image**.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FYozsJZn5XAP7yRnwgt9s%2FUnsplash%20Stock%20Photos.png?alt=media&amp;token=79356ef9-b544-4827-b605-27fa42b204b8" alt=""><figcaption></figcaption></figure>

### Save a File to Your Project <a href="#delete-assets" id="delete-assets"></a>

To save an asset that was imported from a URL into your project:

1. Click **Assets** in the Chat Toolbar.
2. Click the **ellipsis** (**...**) next to the asset.
3. Click **Save to project**.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FTmP5IZpsogV6I7spO0L3%2Fsave%20to%20project.png?alt=media&amp;token=c1d1652c-9f20-49fb-8ac9-f7f9e133a3ae" alt=""><figcaption></figcaption></figure></div>

### Delete Assets <a href="#delete-assets" id="delete-assets"></a>

To delete an asset from your Thunkable project:

1. Click **Assets** in the Chat Toolbar.
2. Click the **ellipsis** (**...**) next to the asset.
3. Click **Delete**.

## Account Storage Limits <a href="#account-storage-limits" id="account-storage-limits"></a>

Each plan has a limited account storage capacity.

| Free  | Accelerator | Builder | Advanced  |
| ----- | ----------- | ------- | --------- |
| 100MB | 250MB       | 1GB     | Unlimited |

You can view your total account storage size in your account settings.

## App Limits <a href="#app-limits" id="app-limits"></a>

Each plan has a limited project storage capacity.

| Free | Accelerator | Builder | Advanced |
| ---- | ----------- | ------- | -------- |
| 50MB | 100MB       | 100MB   | 200MB    |

## Mention Assets in Chat

You can reference existing project assets directly in the chat when prompting the AI.

To mention an asset:

1. In the chat input, type **@**.
2. Select **Images**, **Audio, Video**, or **PDF** from the dropdown.
3. Choose the asset you want to reference.

Once selected, the asset is inserted into your message as a tag rather than plain text, making it easy to identify and ensuring the AI references the correct asset.

{% hint style="info" %}
Only assets that already exist in your project are available from the **@** menu.
{% endhint %}

## How to Store and Access Files in Cloudinary <a href="#how-to-store-and-access-cloudinary-files-in-your-thunkable-app" id="how-to-store-and-access-cloudinary-files-in-your-thunkable-app"></a>

To store and access Cloudinary Files:

1. Create a free Cloudinary account here: [cloudinary.com](https://cloudinary.com/).
2. Click on the **Upload** button to open the [upload Widget](https://cloudinary.com/documentation/upload_widget).
3. Upload your files. There is also an option to upload assets from Google Drive into Cloudinary.
4. Click on the uploaded file.
5. Click **Share.**
6. Click **Embed.**
7. Copy the URL.

## Lists Panel

Use the Lists panel to view, create, edit, and manage lists in your Thunkable project. Lists store structured data in rows and columns that can be used throughout your app.

To access your project's Lists panel:

1. Click Lists in the left navigation menu.

In the Lists panel, you can view:

* The total number of lists in your project.
* The name of each list.
* The number of rows in each list.

#### View a List

To view the contents of a list:

1. Click the list you want to open.
2. View the data organized into rows and columns.

The list editor displays the total number of rows, the number of columns, and the data format.

Note: List data is built into your app, so anyone who installs the app can read it. Avoid storing sensitive information in lists.

#### Create a List

To create a new list:

1. Click + Add list in the Lists panel.
2. Follow the prompts to create your list and add its data.

#### Edit a List

To edit an existing list:

1. Click the ellipsis (...) next to the list.
2. Click Edit.
3. Make the necessary changes.

You can also click a list to open it and manage its rows directly.

#### Add Rows

To add a new row:

1. Open the list.
2. Click + Add row.
3. Enter the values for the new row.

To add multiple rows from an existing file:

1. Click the ellipsis (...) next to the list.
2. Select Add rows from file.
3. Select the file containing the additional data.

#### Download a List as CSV

To export a list:

1. Click the ellipsis (...) next to the list.
2. Select Download CSV.

You can also open the list and click Download CSV in the upper-right corner.

#### Replace a List's File

To replace the data in a list:

1. Click the ellipsis (...) next to the list.
2. Select Replace file.
3. Upload the replacement file.

#### Rename a List

To rename an existing list:

1. Click the ellipsis (...) next to the list.
2. Select Rename.
3. Enter the new name.

#### Delete a List

To delete a list from your project:

1. Click the ellipsis (...) next to the list.
2. Select Delete.

To delete an individual row, open the list and click the trash icon next to the row you want to remove.


# iOS Downloading

### Overview <a href="#overview" id="overview"></a>

Downloading your app to an iOS device requires an Apple Developer account. The process involves actions in your Thunkable project and your Apple Developer account. We recommend having each open in a separate browser tab so you can easily navigate between them.

{% hint style="info" %}
Please note that while the images and instructions from the Apple Developer account are accurate at the time of this doc’s publishing, they may change slightly over time.
{% endhint %}

### Register Your App with Apple <a href="#register-your-app-with-apple" id="register-your-app-with-apple"></a>

To register an App ID:

1. Open your [Apple Developer account page](https://developer.apple.com/account).
2. Under the **Certificates, IDs & Profiles** heading, select **Identifiers**.
3. Click the blue **+** icon to add a new identifier to your account.
4. Choose **App IDs** from the list of options.
5. Click **Continue**.
6. Select **App**.
7. Click **Continue**.
8. On the **Register an App ID** screen, complete or take note of the following fields:
   1. **Description** - This is the name you want to give your app. It appears next to the app icon when downloaded on a user's device. It must be unique to the App Store and cannot use special characters such as @, &, \*, "
   2. **Bundle ID** - This is also unique to your app, but not visible to your app users. Apple recommends reversing your domain name to create your bundle ID, i.e. *com.yourDomainName.yourAppName* to avoid conflicts with other apps.

      Uploading apps to the App Store requires an Explicit Bundle ID. Wildcard bundle IDs are no longer accepted.
   3. **App ID Prefix (Team ID)** - Record your App ID Prefix or Team ID. This automatically created, unique identifier is linked to your Apple Developer Program membership. The same ID can be used for every app you publish.

      ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FlvpJj0Q9b2Qa3HgfbCod%252Fpublish_register_app_id.png%3Falt%3Dmedia%26token%3Dddabf6a8-b711-4501-a3fc-e68196705ff8\&width=768\&dpr=4\&quality=100\&sign=5590e1e3\&sv=2)
9. Click **Continue**.
10. Confirm that the details are correct.
11. Click **Register**.
12. The new App ID you created is included in your list of Identifiers. Click the app's name to review its Description, App ID Prefix (Team ID), or Bundle ID.

## Start the Downloading Process in Thunkable <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

To begin the process:

1. Open your Thunkable project.&#x20;
2. Click the **Download** icon.
3. Select **Download iOS** from the drop-down menu.
4. Click the **Get Started** button.
5. Select **iOS Provisioning Method:** Manual Provisioning or Automated Provisioning
6. Click the **Next** button.

{% hint style="info" %}
You could also ask the AI to download your app by sending a relevant prompt into the chat. For example: "Download my app"
{% endhint %}

{% hint style="info" %}
To find the download button on a mobile device, click the share icon.
{% endhint %}

### Automated Provisioning: <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

To use automated provisioning, you must first configure your App Store Connect API credentials. Configure it by following the steps here: <https://ai.thunkable.com/account/appstore>

**Register app**

1. Input your **App Name**, **Team ID**, and **Bundle ID** from when you completed these steps: [Register Your App with Apple](https://docs.thunkable.com/publishing/publish-to-app-store-ios/user-guide#register-your-app-with-apple).

![](https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FwGCg8h8KRUvOnRyjozLN%2Fimage.png?alt=media\&token=a18a11ee-1fcb-4e85-bdda-ed13ba52368e)

2. Click **Next**.

#### Register Devices <a href="#register-devices" id="register-devices"></a>

You must specify registered devices in your Apple Developer account to create a provisioning profile for app testing and ad hoc distribution. This process is necessary because iOS devices have security mechanisms in place to ensure that only authorized apps are installed and run on them.

{% hint style="warning" %}
Removing a registered device from your account will continue to count against your device limit. At the start of your new membership year, Account Holders and Admins can remove listed devices and restore the available device count.
{% endhint %}

#### Register a Single Device <a href="#register-a-single-device" id="register-a-single-device"></a>

To register a single device to your Apple Developer account:

1. Open your[ Apple Developer account page](https://developer.apple.com/account).
2. Under the **Certificates, IDs & Profiles** heading, select **Devices**.
3. Click the blue **+** icon to add a new device to your account.
4. Ensure the **iOS platform** is selected.
5. Give your device a **name**.
6. Provide the device’s **UDID**. See here for instructions for locating your device's UDID: [Locating Your Device’s UDID](https://docs.thunkable.com/settings/manage-your-projects/download/iosdownload#locating-your-devices-udid).
7. Click **Continue**.

#### Register Multiple Devices <a href="#register-multiple-devices" id="register-multiple-devices"></a>

To register multiple devices to your Apple Developer account:

1. Open your[ Apple Developer account page](https://developer.apple.com/account).
2. Under the **Certificates, IDs & Profiles** heading, select **Devices**.
3. Click the blue **+** icon to add a new device to your account.
4. Under **Register Multiple Devices**, click **Download sample files**.
5. Create your file containing the devices you wish to register. A maximum of 100 devices can be included in your file, and it may take a few minutes to process.
6. Click **Choose File**.
7. From your computer, select the file you created in step five above.
8. Click **Open**.
9. Click **Continue**.

#### Register Test Devices&#xD; <a href="#locating-your-devices-udid" id="locating-your-devices-udid"></a>

Click the  **+ Add Device** button to add a new device to your account or the **Sync from Apple** button: ![](https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FpX442tg5TX9kIfcJ2G07%2Fimage.png?alt=media\&token=7c5556ad-3066-4487-a41e-05d0ac7d3314)

#### Locating Your Device’s UDID <a href="#locating-your-devices-udid" id="locating-your-devices-udid"></a>

Every iPhone, iPod touch and iPad has a unique identifier number associated with it, known as a UDID (Unique Device ID). This is either a 40-character alphanumeric ID on older devices or a 24-character ID (excluding hyphen) on newer devices, consisting of eight digits, a hyphen, and 16 alphanumeric characters.

Please see here for instructions on locating your device’s UDID: [bjango: Finding your iPhone, iPod touch or iPad unique ID (UDID)](https://bjango.com/help/iphoneudid/).

**App Info**

* **Version Number:** The version number is visible to your users when they download a new version of your app. See here for additional information: Set a Version Number.

When the necessary fields are populated, click **Send**.

### **Manual Provisioning:**

1. ​Set Apple ID (Your App Store account's email, it does not need to be the same as your Thunkable account's email)
2. ​Click the **Next** button.

​**Register app**​

1. ​Input your **App Name**, **Team ID**, and **Bundle ID** from when you completed these steps: Register Your App with Apple.
2. Click **Next**.

### Create an iOS Distribution Certificate <a href="#create-an-ios-distribution-certificate" id="create-an-ios-distribution-certificate"></a>

Follow these instructions to create a distribution certificate: [Create an iOS Distribution Certificate](https://docs.thunkable.com/publishing-apps/publish-to-app-store-ios#create-an-ios-distribution-certificate).

### Create an Ad Hoc Provisioning Profile <a href="#create-an-a-d-hoc-provisioning-profile" id="create-an-a-d-hoc-provisioning-profile"></a>

Apple requires a provisioning profile to install an app on a device. You need to create and download an Ad Hoc provisioning profile in your Apple Developer account and then return to Thunkable to upload this file.

1. Open your[ Apple Developer account page](https://developer.apple.com/account).
2. Under the **Certificates, IDs & Profiles** heading, select **Profiles**.
3. Click the blue **+** icon to add a new certificate to your account.
4. Under the **Distribution** heading, select **Ad Hoc**.
5. Click **Continue**.
6. Select the **App ID** for the app you want to publish.
7. Click **Continue**.
8. Select the certificate you wish to include in this provisioning profile.
9. Click **Continue**.
10. Select the device(s) you wish to include in this provisioning profile.
11. Click **Continue**
12. Name your provisioning profile.
13. Click **Generate**.
14. Click **Download** to save the provisioning profile to your computer.
15. Return to Thunkable.
16. Click **Upload Ad Hoc Provisioning Profile**.
17. From your computer, select the .mobileprovision file you just downloaded.
18. Click **Next**.

### Review App Information <a href="#review-app-information" id="review-app-information"></a>

1. Review your app’s information in the modal provided. Detailed instructions are available here: [Publish iOS: App Info](https://docs.thunkable.com/publishing-apps/publish-to-app-store-ios#app-info).
2. Click **Submit**.
3. Congratulations! You will receive an email from Thunkable when your iOS app is available to download. This may take up to an hour.

### Download iOS App <a href="#download-ios-app" id="download-ios-app"></a>

When you receive the email with the download link:

1. Open the email on your iPhone or iPad.
2. Click the **Download App Project** button.
3. Select your preferred browser.
4. Click **Download**.
5. In the pop-up prompt, click **Install**.
6. Open your iOS device's **Settings**.
7. Navigate to **Privacy & Security**.
8. Click **Developer Mode**.
9. Toggle the Developer Mode switch to true.
10. Click **Restart**.
11. Once your device has restarted, click **Turn On** to enable Developer Mode.
12. Enter your device’s **passcode**.
13. Click on your app's icon to test the app.

{% hint style="warning" %}
If there are issues with your app build, you will receive an email outlining what you need to fix.
{% endhint %}

### Troubleshooting <a href="#troubleshooting" id="troubleshooting"></a>

#### App Cannot be Built <a href="#app-cannot-be-built" id="app-cannot-be-built"></a>

If you receive an email saying that your app cannot be built, it may be the result of one of the following:

* Ensure your app icon image:
  * does not have the same name as another project asset
  * is an image file
  * does not contain transparent pixels. Apple does not allow icons with transparent colors.
* Ensure your App (Bundle) ID adheres to the following:
  * It is a series of short strings of text separated by periods (e.g. com.thunkable.creator.app).
  * It is all lowercase.
  * It begins with a letter.
* Ensure your asset names only contain Roman alphabet characters (with no accents) and numbers.
  * Examples of asset names that could cause errors: image(1).jpg, imãge.jpg
  * Examples of asset names that won't cause errors: image1.jpg, image.jpg
* We are having trouble with our build servers. Please try again in 30 minutes.


# Android Downloading

## **Start the Downloading Process in Thunkable**

To download your app to an Android device:

1. Click the **Download** icon.
2. Select **Download Android**.

{% hint style="warning" %}
The number of monthly downloads you are allowed varies per [Thunkable plan](https://thunkable.com/pricing). This number resets when your next billing cycle begins
{% endhint %}

3. Enter your email address in the provided field
4. Click **Send**.

You will be sent an email with a link to download your app.

For some [Thunkable plans](https://thunkable.com/pricing), the number of monthly downloads varies per download type.

We offer two types of downloads for Android:

a. Testing downloads (expire after 72 hours)

b. Distribution downloads (these do not expire).

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2Fc6lHapVNuqddFSKFh6XQ%2Fimage.png?alt=media&amp;token=1ac519c0-ae99-4c56-a2a0-1ee1de0d5e61" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
You could also start the process to download your app by sending a relevant prompt into the chat. For example: "Download my app"
{% endhint %}

{% hint style="info" %}
To find the download button on a mobile device, click the share icon.
{% endhint %}

### Download Android App <a href="#download-android-app" id="download-android-app"></a>

When you receive the email with the download link:

1. Open the email on your Android device.
2. Click the **DOWNLOAD YOUR APK** button.

{% hint style="info" %}
Google Chrome's browser settings may prevent you from downloading the APK file. If you have an issue, open the email in Firefox or Safari and download your APK file.
{% endhint %}

3. Select your preferred browser.
4. Click **Download**.

#### Trust Thunkable <a href="#trust-thunkable" id="trust-thunkable"></a>

To install the app on your Android device, you must indicate that you trust Thunkable. To do that:

1. Open your Android device's **Settings** menu.
2. Navigate to **Lock Screen and Security**.
3. Set the **Unknown Sources** option to true.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FoyXGUcESC7GhDEJPMf7u%2Fimage.png?alt=media&amp;token=359c8532-2063-4ac6-a03d-6f7f57d4b562" alt=""><figcaption></figcaption></figure>

In addition, you may be alerted that Play Protect has blocked an unsafe app. This is because you are downloading the app outside of the Play Store. If that is the case:

1. Select the APK file you downloaded to your device.
2. Click **Install**.
3. Click **More details**.
4. Click **Install anyway**.
5. Click **Open**.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FW60TywxbN4AlInC8ktdD%2Fimage.png?alt=media&amp;token=d04dc390-7e00-4aed-b9ca-48e5cee53ac0" alt=""><figcaption></figcaption></figure>


# Publishing Overview

While app building with Thunkable AI is easy, it's still important that you complete all of the steps below before you can publish your app.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FmTZto4bAxcSHv46bCvg3%2FPublishing%20overall%20picture.png?alt=media&amp;token=c5c11276-6612-4a20-92dc-905bf3c5f8a5" alt=""><figcaption></figcaption></figure>

## Publishing

You've prompted and edited your way to a completed app. Now, you're ready to publish! Since Thunkable allows you to build one app that works both on Android and iOS devices, most Creators who want to distribute their app to larger audiences choose to publish in both the Apple App and Google Play Stores.

{% hint style="info" %}
To find the publish button on a mobile device, click the share icon.
{% endhint %}

## App Publishing Limits

The number of active published apps a Creator may have depends on their plan. Please refer to our pricing page for more information: [Thunkable pricing](https://thunkable.com/pricing).&#x20;

To view your currently active published apps:

1. Click your **account avatar** in the upper right.
2. Navigate to Setting
3. Select **Published Apps**.

The Published Apps page is only available to users with paid plans.

From here, you will see how many published apps you have available and be able to select which published app you wish to keep active.

Depending on which Thunkable [plan](https://thunkable.com/pricing) you have, you will be able to select which apps are active for publishing. Only users on our Builder and Advanced plans will have a limit to their Active Published Apps.

You will receive a reminder each time you publish a new app that you may need to unpublish any active apps beyond the limit of your plan.

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252Fykzg93w4xoE7teCEDN8H%252Fbundle_id_limit.png%3Falt%3Dmedia%26token%3D06004b6c-e0ea-424c-a074-d74429ba7527\&width=768\&dpr=4\&quality=100\&sign=a98dbcae\&sv=2)

Please note that if you try to select more active apps for publishing than your account allows, you will receive an error.

To deactivate an app so that you can activate another one, toggle the switch next to the name of the app. An active app will be toggled to blue, and inactive toggled to grey.

If you downgrade plans and exceed the available limit of active apps, you must immediately comply with the new thresholds, and any active published apps not activated in your account settings will become inaccessible.

If you have recently downgraded, you will see an error on your published app. Please use the Usage Limits guidelines from our pricing page to ensure the correct app is available to your users if your plan allows for a certain number of active published apps. **It can take up to 24 hours to update your account and remove this warning from your published app**. You do **not** necessarily need to rebuild the app, but first check the app on the store.

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FT5cuvvXoDlv57pI7ozHk%252FBrick%2520Screen%2520downgraded.png%3Falt%3Dmedia%26token%3D0ba2b7e5-12e9-4aad-bfa7-22bb8209c8b6\&width=768\&dpr=4\&quality=100\&sign=e05826ae\&sv=2)

## Follow Publishing Progress in Chat

After you trigger publishing, you can follow the process directly in the Thunkable chat.

For example, when everything is ready, you may see:

**Ready to publish to the App Store**

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FzV5Is8OSCoPdTPj9YO7w%2Fimage.png?alt=media&amp;token=c4bc6370-5deb-45f2-a0d1-f6d3b68ef61d" alt="" width="495"><figcaption></figcaption></figure></div>

#### Failed Error

A successful submission does not always mean that the app has been uploaded to the store.

For example, after an App Store upload, you may see a message such as:

**I lost track of this publish**

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FF1v50WLdKAlHkSsG9UkQ%2Fimage.png?alt=media&amp;token=db019f5a-d575-4c44-b50f-f14bfddef413" alt="" width="563"><figcaption></figcaption></figure></div>


# Publishing Checklist

The publishing process requires certain features and assets to complete. Here’s a checklist for both the App Store and Play Store to help you prepare all the creative assets and features needed.

<table><thead><tr><th width="199.33333333333331"></th><th width="274">Publish to App Store (iOS)</th><th>Publish to Play Store (Android)</th></tr></thead><tbody><tr><td>App Name</td><td>An app name can be 30 characters long.</td><td>An app name can be 30 characters long.</td></tr><tr><td>Subtitle (App Store) or<br>Short Description (Play Store)</td><td>Your app’s subtitle is intended to summarize your app in a concise phrase. A subtitle can be up to 30 characters long and appears below your app’s name throughout the App Store.</td><td>The Google Play short description is a sentence that appears in the first impression of your Google Play product page below the screenshot. It can have up to 80 characters.</td></tr><tr><td>Description (App Store) or<br>Long Description (Play Store)</td><td>Provide an engaging description that highlights the features and functionality of your app. The ideal description is a concise, informative paragraph followed by a short list of the main features.</td><td>Provide an engaging description that highlights the features and functionality of your app. The ideal description is a concise, informative paragraph followed by a short list of the main features.</td></tr><tr><td>Privacy Policy URL</td><td>Link to your privacy policy on your website.</td><td>Link to your privacy policy on your website is required for certain apps that require sensitive information e.g. access to phone camera.</td></tr><tr><td>Account Deletion Option</td><td>n/a</td><td>If you allow users to create an account through your app, you must now allow users to request that their account also be deleted - <a href="https://community.thunkable.com/t/new-publishing-requirement-google-play-app-account-deletion/2671776">details here</a> in our community</td></tr><tr><td>App Icon</td><td><p>The app icon appears when a user downloads your app from the App Store. </p><ul><li>Recommended size: 192 x 192 px </li><li>This icon must not have any transparent pixels</li></ul></td><td><p>The app icon appears when a user downloads your app from the Play Store. </p><ul><li>512 x 512 pixels </li><li>Up to 1MB in size</li></ul></td></tr><tr><td>Feature Graphic</td><td>n/a</td><td><p>Feature graphics are images for highlighting Android apps on Google Play. They are not mandatory but are highly recommended since they are required for featured placement on Google Play.</p><ul><li>1024 x 500 pixels </li><li>Up to 1MB in size</li></ul></td></tr><tr><td><p>Screenshots (App Store) or </p><p>Phone Screenshot (Play Store)</p></td><td><p>Use images captured from your app’s UI to communicate your app’s user experience visually.</p><ul><li><a href="https://help.apple.com/app-store-connect/#/devd274dd925">Apple's Screenshot Specification Document</a></li><li><a href="https://docs.thunkable.com/generate-screenshots">Generating screenshots with Thunkable</a></li></ul></td><td><p>Use images captured from your app’s UI to communicate your app’s user experience visually.</p><ul><li><a href="https://support.google.com/googleplay/android-developer/answer/9866151?hl=en#zippy=%2Cscreenshots">Play Console's Screenshot Specification Document</a></li><li><a href="https://docs.thunkable.com/generate-screenshots">Generating screenshots with Thunkable</a></li></ul></td></tr><tr><td><p>*Optional*</p><p>Promotional Text (App Store) or</p><p>Promotional Content (Play Store)</p></td><td>Your app’s promotional text appears at the top of the description and is up to 170 characters long. You can update the promotional text anytime without submitting a new version of your app. Consider using this to share the latest news about your app, such as limited-time sales or upcoming features.</td><td>Promotional content are self-serve merchandising units on Google Play that feature fresh and timely content such as special offers, limited-time events, new content, and major updates.</td></tr></tbody></table>


# Generate Screenshots

By adding app screenshots that showcase your app's features and functionality on its store listing page, you can help your app attract new users on the Apple App Store and Google Play Store. They are a requirement of the publishing process.

To generate app screenshots, the instructions vary depending on whether you are able to create a responsive web app or not.

### Using a responsive web app <a href="#using-a-responsive-web-app" id="using-a-responsive-web-app"></a>

To generate screenshots using a responsive web app:

1. Publish your app as a responsive web app. See instructions here: [Responsive Web App](https://docs.thunkable.com/publishing-apps/publish-as-a-web-app-pro#responsive-web-app)
2. Copy the Web App URL link.
3. Open the link in Google Chrome.

   <div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FmNAH4RdIxxh9iouodHvr%2Fimage.png?alt=media&amp;token=090a8536-ea7b-4719-b455-b6f70ad266ea" alt="" width="563"><figcaption></figcaption></figure></div>
4. Click the **vertical ellipsis** in the upper right of your Chrome browser to access Chrome Settings.
5. Click **More Tools**.
6. Click **Developer Tools** to view the app in developer mod&#x65;**.**

   <div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FAxeEk129RLPlvZManMCk%2Fimage.png?alt=media&amp;token=814e3be8-aa0a-4499-a4b1-c95d862a9286" alt="" width="563"><figcaption></figcaption></figure></div>
7. In the top left-hand corner of the developer tools, click the icon that looks like a laptop and a phone.

   <div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FBG9YTLC2vNucxHpgQv6k%2Fimage.png?alt=media&amp;token=91831e1c-b096-4fd0-97c2-c272fb619ddb" alt="" width="563"><figcaption></figcaption></figure></div>
8. Use the drop-down menu at the top of the screen to select different devices and screen orientations.

   <div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FCw2FSrDZ1XlfbS4GxjUV%2Fimage.png?alt=media&amp;token=001bc495-6c5b-4006-989f-2f56cff24d79" alt="" width="563"><figcaption></figcaption></figure></div>

   Refresh your screen each time you select a new device to ensure the selection is applied to your responsive web app.
9. If the device you need isn't listed, click **Edit...** at the bottom of the selection list and add additional devices as necessary.
10. Alternatively, if you know the device dimensions, select **Responsive** from the device menu and enter the dimensions manually.
11. To generate the screenshot, click the **vertical ellipsis** to the left of the developer's tools console.
12. Click **Capture screenshot**.

    <div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FWg8UaxI90N3tRDPpbXRM%2Fimage.png?alt=media&amp;token=849c036c-d89f-4491-aaa0-24f63a6ee856" alt="" width="563"><figcaption></figcaption></figure></div>
13. Repeat for required devices.

We recommend that you create a folder on your computer to save and organize all of the assets you will require for publishing your app.

### Using a mobile web app <a href="#using-a-mobile-web-app" id="using-a-mobile-web-app"></a>

1. Publish your app as a [mobile web app](/publishing/web-publishing#mobile-web-app).
2. Capture a screenshot of your mobile web app. You don't need to worry about the grey border.
3. Use a design tool such as [AppMockUp](https://app-mockup.com/) to create all the required screenshots.

### **Required screenshot sizes for App Store** <a href="#required-screenshot-sizes-for-app-store" id="required-screenshot-sizes-for-app-store"></a>

[Here](https://developer.apple.com/help/app-store-connect/reference/screenshot-specifications) is a list of screenshot sizes you need to publish to the App Store.

To get all of the screenshot sizes you need, create screenshots using the following device settings. Each device name will be followed by its corresponding screen size in the screenshot doc linked above.

iPhone X (5.8 inch screenshots)

iPhone 6/7/8 Plus (5.5 inch screenshots)

iPad Pro (12.9 inch screenshots - suitable for iPad Pro 3rd gen and iPad Pro 2nd gen screenshots described in doc)

5.8 inch screenshots are used as an alternative to 6.5 inch screenshots. There are two ways to upload these iPhone X screenshots to your App Store listing:

**Upload 5.8 inch screenshots in Media Manager**

When you look at your screenshot upload window, you will see the text ‘View All Sizes in Media Manager’. Click here. In the iOS tab, you will see a segment that says ‘6.5-inch display’. At the bottom of this segment you will see the text ‘5.8-inch display’. Next to this, you will see a checkbox with the text ‘Use 6.5-inch Display’. Uncheck this box and expand the ‘5.8-inch Display’ segment. Click on ‘Choose File’, and upload your 5.8-inch screenshots.

**Resize 5.8 inch screenshots to 6.5 inch screenshots**

Use an image editor of your choice to resize your iPhone X screenshots from 1125 x 2436 pixels (5.8-inch Display) to 1242 x 2688 pixels (6.5-inch Display). Upload your new 6.5-inch screenshots to the App Store.


# iOS Publishing

While app building with Thunkable AI is easy, it's still important that you complete all of the steps required from Apple before you can publish your app.

## Create an Apple Developer Account <a href="#create-an-apple-developer-account" id="create-an-apple-developer-account"></a>

You need an Apple Developer Account to publish an app to the App Store. To get a Developer Account, you must enroll in the [Apple Developer Program](https://developer.apple.com/programs/). Enrollment is approximately $99 USD (or in local currency where available) per membership year.

## Each time you create a new app <a href="#each-time-you-create-a-new-app" id="each-time-you-create-a-new-app"></a>

### App Icon

Set the App Icon in the [project settings](/getting-started/project-settings) or by clicking the plus icon (+) at the left of your project name.

### Register your App ID&#x20;

To register an App ID:

1. Access your [Identifiers](https://developer.apple.com/account/resources/identifiers/list)
   1. Open your [Apple Developer account page](https://developer.apple.com/account).
   2. Under the **Certificates, IDs & Profiles** heading, select **Identifiers**.
2. Click the blue **+** icon to add a new identifier to your account.\
   \
   ![](https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FcRbdZNantviepiUVb547%2Fimage.png?alt=media\&token=cf40340e-ef8a-40f7-a0bd-4e04a52a491f)<br>
3. Choose **App IDs** from the list of options.
4. Click **Continue**.
5. Select **App**.
6. Click **Continue**.
7. On the **Register an App ID** screen, complete the following fields:
   1. **Description** - This is the name you want to give your app. It appears next to the app icon when downloaded on a user's device. It must be unique to the App Store and cannot use special characters such as @, &, \*, "
   2. **Bundle ID** - This is also unique to your app, but not visible to your app users. Apple recommends reversing your domain name to create your bundle ID, i.e. *com.yourDomainName.yourAppName* to avoid conflicts with other apps.

      Uploading apps to the App Store requires an Explicit Bundle ID. Wildcard bundle IDs are no longer accepted. **Note down your Bundle ID for later steps.**
   3. **\[Only for Manual Provisioning] App ID Prefix (Team ID)** - Record your App ID Prefix or Team ID. This automatically created, unique identifier is linked to your Apple Developer Program membership. The same ID can be used for every app you publish.<br>

      <figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FxDtzZMgDWA4JsKhoXIHi%2Fimage.png?alt=media&amp;token=39c83b0c-ec95-4acf-8933-b3369b465017" alt=""><figcaption></figcaption></figure>
8. Click **Continue**.
9. Confirm that the details are correct.
10. Click **Register**.
11. The new App ID you created is included in your list of Identifiers. Click the app's name to review its Description, App ID Prefix (Team ID), or Bundle ID.

### Create an App Listing on App Store Connect <a href="#create-an-app-listing-on-app-store-connect" id="create-an-app-listing-on-app-store-connect"></a>

Your app listing on App Store Connect is where you will manage your submission to the App Store.

1. Go to the [App Store Connect website](https://appstoreconnect.apple.com/login) and log in.
2. Click **Apps**.

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252Fq7gHw3kaiCBPZ55jLy7D%252Fapp_store_connect_my_apps.png%3Falt%3Dmedia%26token%3Ded6d3cfa-9d56-4bd3-8b04-6faf25ac8144\&width=768\&dpr=4\&quality=100\&sign=3ddcaa02\&sv=2)

1. Click the blue **+** button next to the heading **Apps**.
2. Select **New App** from the provided menu.
3. Complete the New App modal.
   1. **Platforms** - iOS
   2. **Name** - The name you gave your app when you registered it. This is how it will appear on the App Store. It can't be longer than 30 characters.
   3. **Primary Language** - If localized app information isn’t available in an App Store country or region, the information from your primary language will be used instead. [Learn more](https://developer.apple.com/help/app-store-connect/manage-app-information/localize-app-store-information).
   4. **Bundle ID** - Select the Bundle ID you registered previously.
   5. **SKU** - A unique ID for your app that is not visible on the App Store. This is an identifier you create to track your apps on the App Store. You should stick to a pattern with your apps' SKU numbers to better organize them and keep track of app versions. Characters a-z, A-Z, 0-9, underscores, periods and dashes are all allowed.
   6. **User Access** - You can limit which users see the app in App Store Connect. If you select Full Access, all users will have access to the app. Users with the Admin, Finance, and Reports roles cannot have their app access limited.

      ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FtQIRVLsyvcIg7VTjYKSr%252FApp%2520Store%2520Connect%2520-%2520New%2520App%2520modal.png%3Falt%3Dmedia%26token%3D5cbda024-a994-44be-bc6c-9191448b2030\&width=768\&dpr=4\&quality=100\&sign=47170d2b\&sv=1)
4. Click **Create**.

## iOS Publishing Process in Thunkable <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

Thunkable enables you to send your build directly to the App Store without the need for any specialized software or hardware.&#x20;

There are two methods to publish your Thunkable app, **Automated Provisioning** and **Manual Provisioning**. Each method has their own requirements and steps and is located in their respective section. **Automated Provisioning** is **highly recommended** for its simplicity.

{% hint style="info" %}
A [new Store Publishing process](/publishing/store-listing) is available that can check your app's readiness, write your store listing with AI, capture screenshots, and publish to the store for you.
{% endhint %}

## Automated Provisioning (Recommended) <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

To use automated provisioning, you must first configure your App Store Connect API credentials. Configure it by following the steps here: <https://ai.thunkable.com/account/appstore>

### Configure App Store Connect API

{% hint style="warning" %}
If you already configured your App Store Connect API, you should skip these steps and proceed to **Publishing with Automated Publishing**.
{% endhint %}

1. Access your [App Store Connect API settings](https://ai.thunkable.com/account/appstore).
   1. Click on the dropdown icon next to your profile image.\ <img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FCP20LsOk4T2Ps8HPkhK6%2Fimage.png?alt=media&amp;token=748f2d46-c6d2-4e5e-90d6-86b0524405b5" alt="" data-size="original">
   2. Select App Store Connect API.
2. Select **Continue to Setup.**
3. In a new tab, access your [Apple API Integration](https://appstoreconnect.apple.com/access/integrations/api).
4. &#x20;Click the blue **+** icon next to **Active.**
5. Fill out the fields in thee **Generate API Key** form.\
   \ <img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FSCoP2FhzV5mwploDKATr%2Fimage.png?alt=media&amp;token=676d7265-a24f-4ead-ad8a-c1b03b6c1505" alt="" data-size="original">
   1. Give your key a name (e.g., "Thunkable Provisioning").
   2. Select Admin access level (required for managing certificates and provisioning profiles).
   3. Click **Generate** to create your new API Key.
6. Download the private key (.p8 file) and save it. This file can only be downloaded once.<br>

   <figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FgssdoreCl0STp20ZVAyi%2Fimage.png?alt=media&amp;token=85b6c58d-2a1c-4ac9-b12d-6944e678f0fd" alt=""><figcaption></figcaption></figure>
7. Note down the following:
   1. **Key ID** - Found in the same row as the API key just created & downloaded.
   2. **Issuer ID** - Found at the top of the [API Integrations](https://appstoreconnect.apple.com/access/integrations/api) page.
8. Back in Thunkable, click **Continue to Enter Credentials.**\ <br>

   <figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FtxT0xAtqjUlyzIrYKWxC%2Fimage.png?alt=media&amp;token=1ba1b971-c21d-4667-857a-b852afcc8308" alt=""><figcaption></figcaption></figure>
9. Add your **Key ID**, **Issuer ID**, and upload the **private key (.p8 file)** downloaded earlier.
10. Click **Save Credentials.**

You have now successfully configured your App Store Connect API. You are now able to use **Automated Publishing**.

### **Publishing with Automated Publishing**

1. Access the publishing wizard.
   1. Click **Publish** to open the dropdown list.
   2. Click **Publish IOS.**\
      ![](https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FAepZmU0ykULk2rkAGZw5%2Fimage.png?alt=media\&token=57e311e5-abc9-43f1-8b68-36c7ec4734ea)
2. Click **Get Started**.
3. Select **Automated Publishing**, then click **Next**.\
   \
   ![](https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2F4UU4Olsk87BoNreFq6Yw%2Fimage.png?alt=media\&token=31f19fa9-8200-42dd-ba1d-e9c2aaf1c4b4)<br>
4. Input your **App Name** and **Bundle ID** from when you registered your [App Name](#create-an-app-listing-on-app-store-connect) and [App ID](#register-your-app-id).
5. Click **Next**.&#x20;
6. **(Optional)** Increment the version number. Thunkable automatically increments the version number. However, you may choose any version number you want as long as it is larger than the prior version number.
7. Click **Send**.

Congrats! You have just published your app! Your app now will be built and sent to your [App's page on Apple](https://appstoreconnect.apple.com/apps) automatically. The process will take about 45 minutes and you will receive an email upon completion.

{% hint style="info" %}
You could also ask the AI to publish your app by sending a relevant prompt into the chat. For example: "Publish my app"
{% endhint %}

## Manual Provisioning <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

1. Set Apple ID (Your App Store account's email, it does not need to be the same as your Thunkable account's email)
2. Click the **Next** button.

**Register app**

1. Input your **App Name**, **Team ID**, and **Bundle ID** from when you completed these steps: [Register Your App with Apple](https://docs.thunkable.com/publishing/publish-to-app-store-ios/user-guide#register-your-app-with-apple).

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FbSDZfHnky0Xv9606bYe4%252Fios_publish_register.png%3Falt%3Dmedia%26token%3D06c4e248-aba7-403a-98a0-2d9cae062fd3\&width=768\&dpr=4\&quality=100\&sign=c7b21152\&sv=2)
2. Click **Next**.

These values will remain the same every time you publish or update this app, so record them somewhere safe.

#### Generate an app-specific password <a href="#generate-an-app-specific-password" id="generate-an-app-specific-password"></a>

You only need one app-specific password for Thunkable to send any build to App Store Connect on your behalf.

You do not need separate app-specific passwords for separate Thunkable projects.

1. Navigate to the [Apple ID account website](https://appleid.apple.com/#!\&page=signin).
2. Enter the **email address** and **password** associated with your Apple ID.
3. If prompted, enter your **two-factor** **authentication code**.
4. On the **Sign-In and Security** page, select **App-specific passwords**.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FRNHcvp5WtPu30qJjS0xm%252Fapple_id_app_specific_password.png%3Falt%3Dmedia%26token%3D852fa0b6-daf8-4625-b3d4-48ea9222a9e4\&width=768\&dpr=4\&quality=100\&sign=856c467d\&sv=2)
5. Click **Generate an app-specific password** if this is your first time creating an app-specific password or the **plus icon** if you've created an app-specific password previously.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FtWMKTHtgVANHjmwc0Rdi%252Fios_create_app_specific_password.png%3Falt%3Dmedia%26token%3D48f735fa-bd7e-4c7a-97b7-1ffc19f45864\&width=768\&dpr=4\&quality=100\&sign=eaa62528\&sv=2)
6. Give your app-specific password a meaningful name so you can recognize it later.

   Remember:

   * You can use the same app-specific password for all of your Thunkable projects.
   * Creating a new one every time you publish a new project is unnecessary and not recommended.
   * Creating a new one when you want to update an existing project is unnecessary and not recommended.
7. Your app-specific password is provided. You cannot retrieve this password once you close this modal, so make sure you save it somewhere safe.
8. Click **Done**.

#### Create an iOS Distribution Certificate <a href="#create-an-ios-distribution-certificate" id="create-an-ios-distribution-certificate"></a>

A CSR is an encoded file containing information about your app, which Apple uses to create a certificate to encrypt traffic to your app. The following instructions walk you through how to:

* Download a certificate signing request (CSR) from Thunkable
* Use the CSR to generate a certificate from Apple
* Download the certificate from Apple
* Upload the certificate in Thunkable

To generate an Apple certificate and upload it to Thunkable:

1. Click **Click to download CSR** to download a certificate signing request (CSR) file.
2. Open your [Apple Developer account page](https://developer.apple.com/account).
3. Under the **Certificates, IDs & Profiles** heading, select **Certificates**.
4. Click the blue **+** icon to add a new certificate to your account.
5. Choose **iOS Distribution (App Store Connect and Ad Hoc)** from the list.

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252Fc8J4X2U4iZSruFIm2UBh%252FCertificates%252C%2520Identifiers%2520%2526%2520Profiles%2520-%2520Apple%2520Developer.jpeg%3Falt%3Dmedia%26token%3Dee74b483-20f6-4ef8-9df2-804a3721a12d\&width=768\&dpr=4\&quality=100\&sign=47d87bb4\&sv=2)

1. Click **Continue**.
2. Click **Choose file**.
3. From your computer, select the **Certificate Signing Request (CSR)** you download from Thunkable.
4. Click **Continue**.
5. Click **Download** to save a copy of the certificate to your computer.
6. Return to Thunkable.
7. Click **Upload Certificate**.
8. From your computer, select the **`.cer`** file you just downloaded.
9. Click **Next**.

#### Create a Provisioning Profile <a href="#create-a-provisioning-profile" id="create-a-provisioning-profile"></a>

Apple requires a provisioning profile to install an app on a device. You need to create a `.mobileprovision` file in your Apple account and then return to Thunkable to upload this file.

1. Open your [Apple Developer account page](https://developer.apple.com/account).
2. Under the **Certificates, IDs & Profiles** heading, select **Profiles**.
3. Click the blue **+** icon to add a new certificate to your account.
4. Under the **Distribution** heading, select **App Store Connect**.
5. Click **Continue**.
6. Select the **App ID** for the app you want to publish.
7. Click **Continue**.
8. Select the certificate you wish to include in this provisioning profile.
9. Click **Continue**.
10. Name your provisioning profile.
11. Click **Generate**.
12. Click **Download** to save the provisioning profile to your computer.

Your provisioning profile name should only contain letters (A-Z, a-z), numbers (0-9), or spaces.

**App Credentials**

Upload the Distribution Certificate created in [Create an iOS Distribution Certificate](https://docs.thunkable.com/publishing/publish-to-app-store-ios/user-guide#create-an-ios-distribution-certificate)

1. Click **Upload Certificate**.
2. From your computer, select the **`.cer`** file you just downloaded.
3. Click **Next**.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252F4e8cmShVKfFfDq5PoaE6%252Fios_publish_credentials_certificate.png%3Falt%3Dmedia%26token%3De42062d3-2a27-4bab-9248-d4fab9022d06\&width=768\&dpr=4\&quality=100\&sign=adbb9865\&sv=2)

Upload the Provisioning Profile created in Create a Provisioning Profile

1. Click **Upload Profile**.
2. From your computer, select the **`.mobileprovision`** file you just downloaded.
3. Click **Next**.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252F2hlcm4XZRYOnFumwVLEI%252Fios_publish_upload_profile.png%3Falt%3Dmedia%26token%3D1438fc20-7c84-4fa7-be59-4db0db44bddd\&width=768\&dpr=4\&quality=100\&sign=bd0c86a7\&sv=2)

Enter your App Specific Password as created in Generate an app-specific password

1. **Paste your app-specific password** into the provided field in the Thunkable publishing modal.
2. Click **Next**.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FGgp6d5j4SdhUlkG5J9bc%252Fios_publish_copy_app_specific_password.png%3Falt%3Dmedia%26token%3D35884c6d-17ee-4d80-9d36-35aed07d78c4\&width=768\&dpr=4\&quality=100\&sign=f98c003f\&sv=2)

**App Store Connect**

1. Make sure that you have completed the previous step to create an App Listing on App Store Connect
2. Click **Next** to confirm you've created a new app with App Store Connect.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252F1F3IxvCisjh8EBx3Tpp8%252FiOS%2520Publishing%2520Wizard%2520-%2520App%2520Store%2520Connect.png%3Falt%3Dmedia%26token%3D2ccb94cd-4ff8-4e1c-9bc2-bdb52480a79b\&width=768\&dpr=4\&quality=100\&sign=50865a52\&sv=1)

**App Info**

* **Version Number:** The version number is visible to your users when they download a new version of your app. See here for additional information: Set a Version Number.

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FgYoZav1W78dzrp8ns410%252FPublish%2520ios.png%3Falt%3Dmedia%26token%3D9a9341a9-f367-4f89-91f5-90c70d3f4667\&width=768\&dpr=4\&quality=100\&sign=5e497f77\&sv=2)

When the necessary fields are populated, click **Submit**.

You should shortly receive an email from Thunkable informing you that your build is being sent to the App Store. There are still a number of steps you need to complete on App Store Connect before your app can be published, but that's everything completed from the Thunkable side of things - congratulations!

Because of Apple's thorough review process, app submissions are sometimes not approved on the first attempt. See here to assist you in troubleshooting the issues Apple flags with your submission: #troubleshooting.

## To update your app <a href="#to-update-your-app" id="to-update-your-app"></a>

Repeat the following steps each time you create a new update for your app:

1. Start the Publishing Process in Thunkable, except for App Store Connect
2. (Optionally) Set a new Version Number
   1. Thunkable automatically handles this process but you may select your own number.
   2. The version number selected must be at least 1 higher than the previous version's number.

## After each successful build <a href="#after-each-successful-build" id="after-each-successful-build"></a>

Once your build has completed, you will receive several emails from Thunkable or Apple. The email from Thunkable will tell you if your build has been successfully sent to App Store Connect or if there is an issue. If there is an issue, follow the instructions in the email or Contact Support with your Reference ID for assistance.

## FAQ

#### **The uploaded build for \<App Name> has one or more issues.**

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FwyKTjciltENFI0m8eNYT%252Fpublish_ios_entitlements_email.png%3Falt%3Dmedia%26token%3Db5d8e688-9508-4299-86cf-6074f2df81ed\&width=768\&dpr=4\&quality=100\&sign=3fcee84a\&sv=2)

This is merely a notice from Apple, no further action is necessary on your part. They send this because they detect a snippet of code for Push Notifications that is present, but always deployed, in every Thunkable app.


# Troubleshooting

#### Common iOS Publishing Issues <a href="#common-ios-publishing-issues" id="common-ios-publishing-issues"></a>

**Account Issues**

Apple ID or password were entered incorrectly. Since we don't store either one, there's no easy way for us to check so enter it slowly.

At regular intervals, Apple makes changes to their T\&C. In order to create or update your apps, you must accept them. You must accept Apple's new Apple ID and privacy terms or your build will fail. If you have not published or updated an app recently, login into your Apple Developer Account first and check for new terms and conditions. You can find these by accessing your [Agreement History Card](https://developer.apple.com/account#AgreementHistoryCard).

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FTdQdxIk7aWtIvOZbIuF8%2Fimage.png?alt=media&amp;token=388b951b-4321-40d1-9b03-ec71aea33164" alt=""><figcaption></figcaption></figure>

**App-Specific Password**

You will need your app-specific password to send each new build to your App Store listing in the future, so make sure to record it securely. If a developer uses a third-party platform like Thunkable to send an app build to App Store Connect, the developer must create an app-specific password.

Any time you change or reset your primary Apple ID password, all of your app-specific passwords are revoked automatically to protect the security of your account. You need to generate new app-specific passwords for any apps that you want to continue using.

**iOS Distribution Certificate**

One certificate from Apple is all you need for all the apps you publish from your account in a year. However, the certificate must be uploaded every time you update your app, so we recommend you rename it and save it somewhere you'll know to look for it next time.

When a certificate expires, it will not affect published apps, but you must create a new one and connect it to a new provisioning profile the next time you update a published app or publish a new app.

A certificate is specific to the email account that was used to generate it. Therefore, if you help another Creator publish their app, you must log in and publish from that Creator's account using their certificate.

Apple limits the number of certificates you are allowed per account, so you may need to revoke a certificate before creating a new one.

Since two-factor authentication is the default for Apple accounts, the instructions provided are for publishing with two-factor authentication enabled. If you need to enable it for your account, please see Apple's instructions here: [Turn on two-factor authentication for your Apple ID](https://support.apple.com/en-us/HT204915).

If you have an existing Apple Developer Program account with 2 iOS certificates, you'll have to revoke one. Apple only allows developers to have 2 iOS certificates at a time and Thunkable creates one when it publishes to your account.

**Provisioning Profile**

After you revoke your certificate, it is possible that one or more of your provisioning profiles will become inactive. To publish successfully, you'll also need to delete any inactive provisioning profiles

#### Removing your app from the App Store <a href="#removing-your-app-from-the-app-store" id="removing-your-app-from-the-app-store"></a>

If you want to remove your apps from being listed in the App Store, open your app listing on [App Store Connect](https://appstoreconnect.apple.com/apps) and follow these instructions:

1. On the “App Store” tab, click on “Pricing and Availability”
2. Click the “Remove from Sale” radio button
3. Then click the “Save” button to unpublish your app

You can see these buttons in the screenshot below:

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FaQhrUTC121BidYBkO2aE%2Fimage.png?alt=media&amp;token=c1640bb7-cc5f-4c88-8031-054bdffed71c" alt=""><figcaption></figcaption></figure>

Please note that if your Apple Developer account expires, your apps will no longer be available for download in the App Store.

Removing your app from the App Store will not delete it from devices which have previously downloaded the app.


# Review Process

{% hint style="warning" %}
Apple holds a high standard for apps that are approved for distribution in the App Store so please [review Apple's policies and guidelines](https://developer.apple.com/app-store/review/guidelines/) to make sure your app is in compliance before you sign up for the Apple Developer Program.
{% endhint %}

### iOS App - Prepare for Submission <a href="#ios-app-prepare-for-submission" id="ios-app-prepare-for-submission"></a>

**iOS Previews and Screenshots**

Apple requires accurate screenshots of your app before publishing. By adding app screenshots that showcase your app's features and functionality on its store listing page, you can help your app attract new users on the App Store.

1. Click **\[version] Prepare for Submission** under the **iOS App** heading in the sidebar.
2. Under the heading **iOS Previews and Screenshots**, there is a tab for each required screenshot size.
3. Generate the required screenshots. For instructions, see here: [Generate Screenshots](/publishing/publishing-overview/generate-screenshots).
4. Drag your screenshots into the corresponding tabs.

**Product Page Details**

Apple requires a lot of information before submitting your app for review.

1. Click **\[version] Prepare for Submission** under the iOS App heading in the sidebar.
2. Complete the following fields:
   1. **Promotional text** - Your app’s promotional text appears at the top of the description and is up to 170 characters long. You can update promotional text at any time without having to submit a new version of your app. Consider using this to share the latest news about your app, such as limited-time sales or upcoming features.
   2. **Description** - Provide an engaging description that highlights the features and functionality of your app.
   3. **Keywords** - Include one or more keywords that describe your app. Keywords make App Store search results more accurate. Separate keywords with a English comma.
   4. **Support URL** - A URL with support information for your app. This URL will be visible on the App Store.
   5. **Version** - The version number of the app you are adding. Numbering should follow software versioning conventions.
   6. **Copyright** - The name of the person or entity that owns the exclusive rights to your app, preceded by the year the rights were obtained (for example, "2008 Acme Inc."). Do not provide a URL.
   7. **Contact Information** - The person in your organization who should be contacted if the App Review team has any questions or needs additional information.
   8. **Sign-In Information** - This is a user name and password we can use to sign in to your app, so we can review all of its features. If users sign in using social media, provide information for an account we can use. Credentials must be valid and active for duration of review.
3. Click **Save** in the upper right.

For additional guidance, see here: [Apple: Creating your product page](https://developer.apple.com/app-store/product-page/).

#### App Information <a href="#app-information" id="app-information"></a>

1. Click **App Information** under the General heading in the sidebar.
2. Complete the following fields:
   1. **Subtitle** - Subtitle Your app’s subtitle is intended to summarize your app in a concise phrase. (More details available here: [Apple: Creating your product page](https://developer.apple.com/app-store/product-page/).)
   2. **Categories** - Categories on the App Store help users discover new apps to meet their needs.
   3. **Content Rights** - Click **Set Up Content Rights Information** and answer the questions provided.
   4. **Age Rating** - Click **Set Up Age Rating Across All Platforms** and answer the questions provided.
3. Click **Save** in the upper right.

#### Pricing and Availability <a href="#pricing-and-availability" id="pricing-and-availability"></a>

1. Click **Pricing and Availability** under the General heading in the sidebar.
2. Use this guide from Apple to complete your Pricing and Availability: [Manage app pricing](https://developer.apple.com/help/app-store-connect/manage-app-pricing/set-a-price).
3. Click **Save** in the upper right.

#### App Privacy <a href="#app-privacy" id="app-privacy"></a>

1. Click **App Privacy** under the General heading in the sidebar.
2. Click **Edit** next to Privacy Policy.
3. Input your **Privacy Policy URL**.
4. Click **Save**.
5. Click **Get Started** to provide some information about your app's data collection practices. Depending on your answer to these questions, you may be asked to answer more quations and provide additional details.
   1. Please note that if your app collects data, you will need to select "Yes, we collect data from this app".

      <div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FvuJXqXygTf9EjBxva9xY%2Fimage.png?alt=media&amp;token=4e7403b8-f2ad-4b09-9c43-d797ee3780c0" alt="" width="437"><figcaption></figcaption></figure></div>

      For most third-party data, this will be collecting location data or device ID. If your app is collecting user data and saving it (i.e Name, email address, etc.) you will also need to disclose this information.

      ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FPgHPQPJ9RXbJ3vMO2AyO%252Fios_data_collection.gif%3Falt%3Dmedia%26token%3D8705390c-51fc-4ba5-8afb-97b7b9ada73d\&width=768\&dpr=3\&quality=100\&sign=11ee748d\&sv=2)
6. When you've completed the the necessary fields, click **Save** in the upper right.

#### Submit for Review <a href="#submit-for-review" id="submit-for-review"></a>

When you have completed all of the sections above:

1. Click **\[version] Prepare for Submission** under the iOS App heading in the sidebar.
2. Click **Add for Review** in the upper right.
3. Apple will let you know if there are any incomplete fields. Address these errors and click Add for Review again.
4. Confirm your submission is accurate and click **Submit to App Review**.
5. You will receive emails updating you on the progress of your submission.

#### Design assets <a href="#design-assets" id="design-assets"></a>

The final section requires screenshots for both iPhone and iPad and a high resolution icon.

The high resolution icon will be featured in the App Store listing and must be 1024 x 1024 px with no transparency. To generate this icon, we recommend a tool [like this](https://makeappicon.com/).

You can see the screenshots you need in Apple's [screenshot specifications document](https://help.apple.com/app-store-connect/#/devd274dd925).

{% hint style="info" %}
You can create your own iOS screenshots in your browser. Learn more here: [Generate Screenshots](/publishing/publishing-overview/generate-screenshots)
{% endhint %}

#### Export compliance <a href="#export-compliance" id="export-compliance"></a>

You may need to answer a question about export compliance. Select **Yes** when asked if your app uses encryption. See more: [Overview of Export Compliance](https://developer.apple.com/help/app-store-connect/manage-app-information/overview-of-export-compliance/).

#### Advertising identifier <a href="#a-dvertising-identifier" id="a-dvertising-identifier"></a>

After submitting your app for review, you may be asked, "Does this app use the Advertising Identifier (IDFA)?"

The app will still be able to be published, but you will want to check the **following three boxes**:

* Attribute this app installation to a previously served advertisement
* Attribute an action taken within this app to a previously served advertisement
* I, YOUR\_NAME, confirm that this app, and any third party…

Note, you should **not** check the box labelled **Serve advertisements within the app**.


# Android Publishing

While app building with Thunkable AI is easy, it's still important that you complete all of the steps required from Google before you can publish your app.

Create a Google Play Developer Account&#x20;<a href="#before-you-publish-your-first-app" id="before-you-publish-your-first-app"></a>
----------------------------------------------------------------------------------------------

Success on Google Play starts with quality. The best apps and games have higher ratings, more installs, and more engagement. We recommend visiting the [Play Store Developer Policy Center](https://play.google.com/about/developer-content-policy/#!?modal_active=none) before you submit your app to the Play Store.

Publishing to the Google Play Store requires a Google Play Developer Account (approximately $25 USD one-time fee). Don't have an account? [Sign up here](https://play.google.com/apps/publish/signup/)

## Each time you create a new app <a href="#each-time-you-create-a-new-app" id="each-time-you-create-a-new-app"></a>

### App Icon

Set the App Icon in the [project settings](/getting-started/project-settings) or by clicking the plus icon (+) at the left of your project name.

### **Create a new app on the Google Play Console**

To create an App:

1. Sign-in to your [**Google Play Console**](https://play.google.com/console/) account.
2. Click **Create app** in the upper right.
3. Complete the requested **app details** fields. Note: The App Name is how your app will appear on Google Play.
4. Complete the required **declarations**.
5. Click **Create app**.

## Android Publishing Process in Thunkable <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

There are two methods to publish your Thunkable app, **Automated method** and the **Manual method**. Each method has its own requirements and steps and is located in its respective section. **The automated method** is **highly recommended** for its simplicity.

Autometed method enables you to send your app directly to the Google Play Store. In the Manual method, you receive an email from Thunkable containing your app's AAB file, which you download and upload to the Google Play Store (Note: an AAB file cannot be installed on an Android device).

{% hint style="info" %}
A [new Store Publishing process](/publishing/store-listing) is available that can check your app's readiness, write your store listing with AI, capture screenshots, and publish to the store for you.
{% endhint %}

## Automated method (Recommended)

### Configure App Store Connect API <a href="#configure-app-store-connect-api" id="configure-app-store-connect-api"></a>

To access your [Google Play API settings](https://ai.thunkable.com/account/playstore).

1. Click on the dropdown icon next to your profile image.&#x20;
2. Select google Play API.
3. Set up the Google Play API following the steps here: <https://ai.thunkable.com/account/playstore>

{% hint style="info" %}
If you already configured your Google Play API, you should skip these steps and proceed to **Publishing with the Automated method**
{% endhint %}

### **Publishing with Automated method** <a href="#publishing-with-automated-publishing" id="publishing-with-automated-publishing"></a>

To upload your Android App Bundle (AAB) file directly to the Google Play:

1. In your Thunkable project, click the Publish button in the top-right corner of your screen.
2. Select **Publish Android** from the drop-down menu.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FcAmypR6sBJ4OhOasTEtH%2FScreenshot%202026-01-22%20at%2011.23.37%E2%80%AFAM.png?alt=media&amp;token=7c2d839e-ff17-4c86-95fc-3902722faad7" alt=""><figcaption></figcaption></figure>

4. A publishing modal is provided to guide you through the publication process:
5. Enter the **email address** you want the app download link sent to.
6. Set your Application ID, Version Name, and Version Code.
7. Click on the checkbox "Publish to Google Play after build":

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FSgs58qjLojPb1jtD8GgQ%2FScreenshot%202026-05-14%20215918qq.png?alt=media&amp;token=2d58d6db-4e41-4621-8c2d-5f9c01ed30a0" alt=""><figcaption></figcaption></figure>

8. Click **Send**.
9. In approximately 30 minutes, your AAB file will be sent to the Google Play platform.

{% hint style="info" %}
You could also ask the AI to publish your app by sending a relevant prompt into the chat. For example: "Publish my app"
{% endhint %}

## Manual method:&#x20;

To download your Android App Bundle (AAB) file:

1. Within your Thunkable project, click the **Publish** icon in the top right corner of your display.
2. Select **Publish Android** from the drop-down menu.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FcAmypR6sBJ4OhOasTEtH%2FScreenshot%202026-01-22%20at%2011.23.37%E2%80%AFAM.png?alt=media&amp;token=7c2d839e-ff17-4c86-95fc-3902722faad7" alt=""><figcaption></figcaption></figure>

3. A publishing modal is provided to guide you through the publication process.
4. Enter the **email address** you want the app download link sent to.
5. Set your Application ID, Version Name, and Version Code.
6. Click **Send**.
7. In approximately 30 minutes, you will receive your AAB file to the email address you provided.
8. When you receive the email, download the AAB file to your computer. Note: If you use Google Chrome, your browser settings may prevent you from downloading your AAB file. Simply open the email in Firefox or Safari to download your AAB file.

## Manage your app signing <a href="#manage-your-app-signing" id="manage-your-app-signing"></a>

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-LAn5scXl2uqUJUOqkJo%252F-MbKl54vHyH1-Kw3fqBM%252F-MbKvhB85b_I-diO0Ku-%252FPrepare-1.png%3Falt%3Dmedia%26token%3Da6647069-a2fc-4a7e-a04d-893d660075fb\&width=768\&dpr=4\&quality=100\&sign=51dff9d9\&sv=2)

Google will offer to protect your app signing key. You can click **Continue** to allow this to proceed. You will only be asked this the first time you publish a release.

If you don't want Google to manage your App Signing, you can do so yourself. This is not necessary.

Continue following the instructions in this document from Create and Publish a Release.

## **App Dashboard**

While you're getting set up, the Google Play Console Dashboard shows you what you need to do to get your app up and running. This includes recommendations on how to manage, test, and promote your app. Once you've completed a task, return to the Google Play Console Dashboard to explore what else you need can do.

We'll focus on the following steps:

* Set up your app
* Publish your app on Google Play

### **Set up your app**

In this section, you'll share with Google the content of your app, and manage how it is organized and presented on Google Play.

1. Click **View tasks** in the Set up your app section to see the tasks you must complete.
2. Click on a task.
3. Complete the required fields.
4. Click **Save**.
5. Click **Dashboard** above the task name in the upper left.
6. Repeat with the remaining tasks in the list.

Apps that request access to sensitive permissions or data (as defined in the [user data policies](https://play.google.com/about/privacy-security-deception/user-data/)) are required by the Google Play Store to include a privacy policy. All apps made on Thunkable request access to sensitive permissions or data, which means you will need to provide a privacy policy.

**Main store listing**

1. Click **Main store listing** under the Grow heading in the sidebar.
2. Complete the required fields and upload the required assets. See here for additional guidance: [Add preview assets to showcase your app](https://support.google.com/googleplay/android-developer/answer/9866151).
3. Click **Save**.

### **Create and publish a release**

1. Return to the Google Play Console **Dashboard**.
2. Click **View tasks** in the Create and publish a release section to see the tasks you must complete.
3. Click the **Select countries** task.
4. Identify the countries you want your app to be available in.
5. Click **Create a new release**.
6. Upload the AAB file into the **App bundles** section. Instructions for downloading your AAB are available here: Download your Android App Bundle (AAB) file
7. Add **Release notes** for this update.
8. Click **Next**.

You may see some Accessibility, Performance, Stability, Security, and trust warnings on the Google Play Store, Pre-launch report. These notifications from Google about your app are simply some warnings, not errors--there is nothing wrong with your app and it should still appear on the Play Store.

## To update your app <a href="#to-update-your-app" id="to-update-your-app"></a>

Repeat the following steps each time you create a new update for your app:

1. In your Google Play Console, click on the **Releases** tab.
2. Click the **Create New Release** Button
3. Upload the AAB file into the **App bundles** section using the automated or manual method.
4. Add a **Release name** so you can identify this release. It isn't shown to users on Google Play.
5. Add **Release notes**. Let users know what's in your release.
6. Click **Next**.

If you are updating an existing app on the Google Play Store, your Thunkable project will need to have:

* The same package name as the published app
* An incremented version number (version number is higher than the version number of your published app). This can be updated in your project's code.

You will not need to change any app signing settings when updating a published app.


# Review Process

### Submit your app for review <a href="#submit-your-app-for-review" id="submit-your-app-for-review"></a>

#### Create a new app on the Google Play Console <a href="#create-a-new-app-on-the-google-play-console" id="create-a-new-app-on-the-google-play-console"></a>

1. Sign-in to your [**Google Play Console**](https://play.google.com/console/) account.
2. Click **Create app** in the upper right.
3. Complete the requested **app details** fields. Note: The App Name is how your app will appear on Google Play.
4. Complete the required **declarations**.
5. Click **Create app**.

#### App Dashboard <a href="#app-dashboard" id="app-dashboard"></a>

While you're getting set up, the Google Play Console Dashboard shows you what you need to do to get your app up and running. This includes recommendations on how to manage, test, and promote your app. Once you've completed a task, return to the Google Play Console Dashboard to explore what else you need can do.

We'll focus on the the following steps:

* Set up your app
* Publish Your app on Google Play

#### Set up your app <a href="#set-up-your-app" id="set-up-your-app"></a>

In this section, you'll share with Google the content of your app, and manage how it is organized and presented on Google Play.

1. Click **View tasks** in the Set up your app section to see the tasks you must complete.
2. Click on a task.
3. Complete the required fields.
4. Click **Save**.
5. Click **Dashboard** above the task name in the upper left.
6. Repeat with the remaining tasks in the list.

{% hint style="info" %}
Apps that request access to sensitive permissions or data (as defined in the [user data policies](https://play.google.com/about/privacy-security-deception/user-data/)) are required by the Google Play Store to include a privacy policy.&#x20;
{% endhint %}

#### Main store listing <a href="#main-store-listing" id="main-store-listing"></a>

1. Click **Main store listing** under the Grow heading in the sidebar.
2. Complete the required fields and upload the required assets. See here for additional guidance: [Add preview assets to showcase your app](https://support.google.com/googleplay/android-developer/answer/9866151).
3. Click **Save**.

#### Create and publish a release <a href="#create-and-publish-a-release" id="create-and-publish-a-release"></a>

1. Return to the Google Play Console **Dashboard**.
2. Click **View tasks** in the Create and publish a release section to see the tasks you must complete.
3. Click the **Select countries** task.
4. Identify the countries you want your app to be available in.
5. Click **Create a new release**.
6. Upload the AAB file into the **App bundles** section. Instructions for downloading your AAB are available here: [Download your Android App Bundle (AAB) file](/publishing/android-publishing#download-your-android-app-bundle-aab-file).
7. Add a **Release name** so you can identify this release. It isn't shown to users on Google Play.
8. Add **Release notes**. Let users know what's in your release.
9. Click **Next**.

{% hint style="warning" %}
If you have a newly created personal Google developer account, you must run a closed test for your app with a minimum of 20 testers who have been opted-in for at least the last 14 days continuously. When you meet these criteria, you can apply for production access on the Dashboard. You can learn more [here](https://support.google.com/googleplay/android-developer/answer/14151465).
{% endhint %}

You can share your app for free in the Thunkable community and find people to test it.

Click **Start Rollout to Production** to publish your app!

Once your app has been reviewed, it will go live on the Google Play Store.


# Web Publishing

## Publish Web App

Click the Publish button and select **Publish Web App.**

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2Fphp8tol6v1EjMZBvWt2K%2Fimage.png?alt=media&amp;token=a0692354-a17d-46f3-b78d-373c71f29919" alt="" width="438"><figcaption></figcaption></figure></div>

In the next modal you can:

* open the app in a new tab
* copy the app link
* select whether to publish as a [**Mobile web app**](/publishing/web-publishing#mobile-web-app) or a [**Responsive web app**](#responsive-web-app)
* share your app through popular channels like Facebook, Twitter and Reddit&#x20;
* **unpublish** your app by clicking on `Disable published link` text

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FNcJ23kN4u7A9d6DAI0vt%2Fimage.png?alt=media&amp;token=4b424ede-a5ca-4c2c-b727-fa4a6965ff0d" alt=""><figcaption></figcaption></figure>

🎉 Congratulations - your Thunkable project is now live on the internet as a published web app.

## Mobile Web App

![](https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FGaMWITxTOzr96Y7YpgDE%2Fmobile_web_app%20\(1\).png?alt=media\&token=302973d4-c309-4805-b216-8119f299e17f)

Mobile web apps are best experienced by opening the link directly on your phone. To make your mobile app feel more like a native app you can add it to the home screen directly from your mobile web browser.

If you preview a mobile web app on a desktop or laptop computer you will see a phone frame around the app. This is to give you a rough idea of its final proportions, but ultimately this will vary from device to device depending on factors such as screen size, aspect ratio, and pixel density.

To get an app that can respond to devices of any size, consider publishing as a [Responsive Web App](broken://pages/-M1kQWEX613cPmhEhxrq#responsive-web-app).

## Responsive Web App

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FUlrJDXK0KvyQr5ihykYX%2Fimage.png?alt=media&amp;token=944195f0-892e-44e8-a28b-49307591e746" alt=""><figcaption></figcaption></figure>

Publishing your app as a responsive web app means that it will scale according to the size of the device that it is being opened on.&#x20;

If your app in designed only to be run on phones, consider publishing as a [Mobile Web App](broken://pages/-M1kQWEX613cPmhEhxrq#mobile-web-app).

## Updating your App

Each time you press publish, it’s similar to creating a new release of your app in one of the stores. This means you can make changes and updates to your site without worrying about users seeing a half-finished new feature that you’re still working on.

When you’re ready to release a new version, choose “Publish as a Web App” and then click the blue “Publish current version” to update your app. The URL will remain the same, but the project that it links to will be updated.

<figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FpmKZE6X7k2i3IAGpafhk%2Fimage.png?alt=media&amp;token=73ad55d4-a6b5-4777-8ce8-f685fb8ef001" alt=""><figcaption></figcaption></figure>

## Embed your app in a webpage

If you host a webpage, you can embed your Thunkable web app in an iframe using the syntax

`<iframe src="https://thunkable.site/w/K0XDxMqwl" title="Chop Down the Tree Thunkable App" height = 1000 width = 500></iframe>`

You can read more about iframes [here](https://www.w3schools.com/tags/tag_iframe.ASP).

## Publish to a custom domain

{% hint style="info" %}
Publishing to a custom domain is available for Creators on certain Thunkable plans. Please refer to our pricing page for more information: [Thunkable pricing](https://thunkable.com/pricing).
{% endhint %}

### Configure your domain

You need to configure your domain before you can publish your app to that domain. To do so, add the Thunkable IP address (34.136.177.42) to the A record of your domain which you can usually find in the DNS section of your domain provider.

Here are the instructions from some popular domain name providers:&#x20;

* [Namecheap](https://www.namecheap.com/support/knowledgebase/article.aspx/319/2237/how-can-i-set-up-an-a-address-record-for-my-domain/)
* [AWS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html#AFormat)
* [Digital Ocean](https://docs.digitalocean.com/products/networking/dns/how-to/manage-records/)
* [Google Domains](https://support.google.com/a/answer/2579934?sjid=10421762873183766212-EU\&src=supportwidget0\&hl=en\&authuser=0)
* [GoDaddy](https://www.godaddy.com/help/add-an-a-record-19238)

DNS synchronization often takes less than an hour but may take up to 72 hours. If your domain is not connecting within 48 hours, we recommend the following troubleshooting steps:

* Confirm the IP address added to your A record is the correct IP (34.136.177.42).
* Ensure you are using `http://` and not `https://`.

### Publish to a custom domain

**Note:** The windows you see may look slightly different from the ones shown below. The windows and prompts vary based on whether or not you’ve published your app as a web app previously.

To publish your web app to a custom domain:

1. Click the **Publish** button.<br>
2. Select **Publish Web App**.<br>
3. Add your custom domain in the provided field and click **Add Domain**. Note: this must be the domain and not the URL.<br>
4. Click **Check Status**. <br>

   <figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FC66AI1B0k0aNOTjbS0A9%2Fcustom%20domain%20%3E%20check%20status.png?alt=media&amp;token=617e2260-758c-419a-b68d-8f394221baf7" alt=""><figcaption></figcaption></figure>
5. A green **Connected** tag will appear in the field when there is a successful connection. <br>
6. Ensure the box next to **Publish web app to this domain** is checked.<br>
7. Select a web app format (Mobile web app or Responsive web app).<br>
8. Click **Get link and publish** or **Publish current version**.\ <br>

   <figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FUYL2vHfww0EqWy25U2Vd%2Fcustom%20domain%20%3E%20connected.png?alt=media&amp;token=d5dd475b-2ddf-4672-a2f6-9715869fb42a" alt=""><figcaption></figcaption></figure>
9. Click **Done**.


# Store listing

The **Store Listing** page helps you prepare your app for publishing to the **App Store** and **Google Play**. It combines automated validation, AI-assisted content generation, and store-specific requirements into a single workflow so you can identify and resolve publishing issues before submitting your app.

Instead of discovering missing requirements after starting a publish, you can use the Store Listing checklist to see what is complete, what still needs attention, and where each remaining task should be completed.

You can switch between the **App Store** and **Google Play** tabs at any time to configure the requirements for each platform independently.

## Open the Store listing

To open your Store Listing:

1. Open your project.
2. Click **Publish**.
3. Select **Store Listing**.
4. Select either **App Store** or **Google Play**.

{% hint style="info" %}
You could also ask the AI to publish your app by sending a relevant prompt into the chat. For example: "Publish my app"
{% endhint %}

At the top of the Store Listing, Thunkable displays the number of requirements that still need to be completed.

The left-hand navigation organizes the information you need to provide into sections such as:

* **Checklist**
* **App icon & artwork**
* **Screenshots**
* **Store text**
* **Privacy policy**
* **Data safety** for Google Play
* **Preview**

Requirements with a **green checkmark** are complete, and requirements shown in **red** need to be resolved before publishing.&#x20;

Where possible, Thunkable provides an action next to an incomplete requirement and selecting an incomplete item or its action takes you to the relevant place to resolve it.

Some requirements can be handled directly by Thunkable, while others must be completed in **App Store Connect** or **Google Play Console**.

##

### App Store (iOS)

Select the **App Store** tab to prepare your iOS Store Listing.

#### Automated by Thunkable

Thunkable AI can check and help complete the following requirements whenever possible:

* Account Plan allows publishing.
* Active App.
* Bundle ID.
* App version.
* App Store Connect API credentials.
* iOS permission descriptions.
* Bundle ID in Apple Developer.
* App version on the App Store.
* App Secrets.
* AdMob requirements (if applicable).
* App icon.
* Privacy Policy URL.
* Store screenshots.
* Store title.
* Store description.
* App Store keywords.
* App Store category.
* Support URL.
* App Review contact information.
* Reviewer sign-in requirements.

#### Manual in App Store Connect

The following steps must be completed manually in **App Store Connect**:

* App exists in App Store Connect.
* App Privacy questionnaire.
* Age Rating.
* Pricing & Availability.
* Content Rights information.

### Google Play (Android)

Select the **Google Play** tab to prepare your Android Store Listing.

Google Play has some requirements that differ from the App Store, so completing your iOS listing does not necessarily mean your Google Play listing is ready.

#### Automated by Thunkable

Thunkable AI can check and help complete the following requirements whenever possible:

* Account Plan allows publishing.
* Active App.
* Package name.
* App version.
* Google Play service account.
* Automated Google Play publishing.
* App Secrets.
* AdMob requirements (if applicable).
* App icon.
* Privacy Policy URL.
* Feature graphic (1024 × 500).
* Store screenshots.
* Store title.
* Store description.
* Google Play short description.
* Support email.

#### Manual in Google Play Console

The following steps must be completed manually in **Google Play Console**:

* Data Safety form.
* Content Rating questionnaire (IARC).
* Play Store category.

{% hint style="info" %}
Selecting an incomplete item will guide you to the relevant section where it can be completed.
{% endhint %}

{% hint style="info" %}
AI-generated content consumes AI tokens.
{% endhint %}

## Store Listing Tab

### Checklist

#### Bundle ID

Your app's **Bundle ID** uniquely identifies your app.

Before your first upload, double-check that the Bundle ID is correct. Once the app has been uploaded to the stores, changing its identity is not part of the normal update flow.

#### App Review information

Apple may need additional information to review your app.

Provide the requested **App Review contact information** so Apple's review team can contact you if necessary.

If your app requires an account or sign-in to access important functionality, also provide the reviewer with the required sign-in information.

### App icon & artwork

**Generate with AI** (400 AI tokens per run) or **upload your own** app icon.&#x20;

Google Play requires a **1024 × 500 feature graphic** for the store listing. You can **generate it with AI** (400 AI tokens per run) or **upload your own** image.&#x20;

### Screenshots&#x20;

Screenshots allow users to preview your app before downloading it.

Thunkable can help capture the required screenshots. Open **Screenshots** to review or prepare the screenshots that will be included with your Store Listing.

### Store text

The **Store text** section contains the text customers see when they discover your app in the Stores.

Complete the required information, including:

* Store title
* Store description
* App Store keywords
* App Store category
* Support URL

You can use **AI to help create store listing content** (800 AI tokens per run to generate all text or 100 AI tokens per run for each text) or **add your own** text.&#x20;

### Privacy policy

A Privacy Policy URL is required as part of the publishing configuration.

You can either use a privacy policy hosted for you through the available Thunkable publishing workflow or provide the URL of a privacy policy that you host yourself.

If you use your own policy, enter its public URL and make sure the page is accessible without requiring users to sign in.

If you use the hosted privacy policy option, you can review and edit the policy content before using its generated URL in your Store Listing.

### Data Safety

Google Play requires developers to complete the **Data Safety** form.

Open the **Data safety** section of the Store Listing to review the information relevant to your app. The final declarations required by Google must accurately reflect how your app collects, shares, and handles user data.&#x20;

You can **use AI to** draft it (100 AI tokens per run) from what your app actually does, then complete the form once in the Play Console.

Because these declarations concern your app's actual data practices, review them carefully before submitting them in Google Play Console.

### Preview Your Store Listing

Use **Preview** to review your Store Listing before publishing.

Check the:

* App icon
* Screenshots
* Store title&#x20;
* Subtitle
* Description

### Publish App

Click **Publish App** to submit your app for publishing using the current Store Listing configuration.

Before publishing, Thunkable validates your app against the selected platform's publishing requirements. If any required items are missing, you'll be prompted to complete them before continuing.

Once all requirements are met, Thunkable builds your app and uploads it to the selected app store using your configured publishing settings.

{% hint style="info" %}
You can follow the publishing progress directly in the chat. Thunkable will provide real-time status updates, notify you when each publishing step is completed, and guide you through any remaining manual actions required before your app is successfully published.
{% endhint %}

## Follow Publishing Progress in Chat

After you trigger publishing, you can follow the process directly in the Thunkable chat.

The publishing assistant checks the selected store and displays the current status, including how many requirements are passing.

For example, when everything is ready, you may see:

**Ready to publish to the App Store**

along with all checks passing and a **Publish to the App Store** action.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FKpeqcWnDfDg0onrMY4MS%2Fimage.png?alt=media&amp;token=62c413d8-ea12-4874-b8d3-9409b63ee01b" alt="" width="563"><figcaption></figcaption></figure></div>

If requirements remain, the chat instead displays an **Almost ready** status and tells you how many items still need to be completed.

For example:

**Almost ready for Google Play**\
**2 items to finish before you can publish to Google Play**

The missing requirements are displayed directly in the chat with actions such as **Configure credentials**, allowing you to resolve them without having to determine the problem yourself.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FHNWQpJYkItzdE0P3nbmC%2Fimage.png?alt=media&amp;token=44a8b197-6d48-4d95-a307-f1b4a02388fd" alt="" width="563"><figcaption></figcaption></figure></div>

### When Thunkable Cannot Complete the Submission Automatically

A successful build and upload does not always mean that the app has been submitted for review.

Apple or Google may require information that cannot be completed automatically.

For example, after an App Store upload, you may see a message such as:

**Apple wouldn't accept the automatic submission yet, a few items still need attention.**

Thunkable then explains what remains to be completed in App Store Connect.

Your binary may already be successfully uploaded even though submission for review has not yet occurred.

In this situation:

1. Read the message in the publishing chat to identify the missing requirement.
2. Select **Open the Store**.
3. Complete the requested information in the Store.
4. Submit the app for review.

You do **not** necessarily need to rebuild the app when the remaining issue concerns store metadata or review information rather than the uploaded binary.

<div align="left"><figure><img src="https://1781702014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCI51jzBbSRAMaZWD1kx4%2Fuploads%2FXZzTQvWRqshNn5ZsUhUr%2Fimage.png?alt=media&amp;token=a3b235f8-ada4-4a7a-ae79-2558bc5dcceb" alt="" width="383"><figcaption></figcaption></figure></div>

### Checking Publishing Status Again

After completing a missing requirement, return to Thunkable and select **Check again**, **Recheck**, or the relevant publishing action.

Thunkable checks the current store configuration again and updates the number of passing requirements.

### Publishing vs. Store Review

Uploading your app and making it publicly available are separate steps.

When Thunkable successfully uploads your build, the store may still need to process the binary and review the app. Apple and Google control their own processing and review timelines.

Therefore, statuses such as **build uploaded** or **store listing synced** do not necessarily mean that the app is already live in the store.

Continue following the instructions shown in the publishing chat and in **App Store Connect** or **Google Play Console** until the store confirms that your app has been submitted, approved, and released.

### Troubleshooting

If **Publish app** is unavailable or the checklist shows incomplete requirements, open each red item and follow the provided action.

If you have completed something in App Store Connect or Google Play Console but Thunkable still shows it as incomplete, use **Recheck** or **Check again** to refresh the validation.

If automated submission fails after the binary has already been uploaded, read the publishing chat carefully before starting another build. In many cases, only additional store information needs to be completed manually.

If your checklist is complete but the app is not yet publicly available, check its status directly in App Store Connect or Google Play Console. Store processing, review, and release can continue after Thunkable has finished uploading the app.


# Release Notes

#### August 17, 2026

* Added PDF Viewer [integration](https://docs.thunkable.com/ai/features/integrations).
* Enabled [PDF upload on the project assets](https://docs.thunkable.com/ai/app-design/assets#import-assets).

#### August 11, 2026

* Enabled [Signing Keystore](https://docs.thunkable.com/ai/getting-started/project-settings#signing-keystore) on Android settings.
* Added Keep Awake [integration](https://docs.thunkable.com/ai/features/integrations).

#### August 4, 2026

* Added [Cloud DB selection to the app creation flow](https://docs.thunkable.com/ai#input-options).
* Fixed an issue where Apple rejected some apps due to insufficient purpose strings.
* Enabled Project prompt to download/publish and [Store listing](https://docs.thunkable.com/ai/publishing/store-listing)
* Introduced [AI model selection](https://docs.thunkable.com/ai/getting-started/quickstart#choose-ai-model)

#### July 27, 2026

* Enabled [image input](https://docs.thunkable.com/ai#input-options) in prompts:
* Introduced Light/Dark/System Platform mode:
* Enabled the [versions feature](https://docs.thunkable.com/ai/features/versioning) on mobile
* Added more [color theme](https://docs.thunkable.com/ai/app-design/color-schema) adjustment options
* Resolved an issue causing apps to get rejected on the App Store for including NFC
* Fixed an issue where images uploaded to the assets don’t load on the web app

#### July 20, 2026

* Enabled [voice input](https://docs.thunkable.com/ai/getting-started/quickstart#voice-input).&#x20;
* Introduced different device types in [preview mode](https://docs.thunkable.com/ai/getting-started/toolbar-management#preview).
* Added [share project button](https://docs.thunkable.com/ai/getting-started/toolbar-management#generate-a-share-link).
* Enabled adding [Cloud Database](https://docs.thunkable.com/ai/features/cloud-database) after the project is created.
* Restructured [project storage limits per plan](https://docs.thunkable.com/ai/app-design/assets#app-limits)

#### July 13, 2026

* Fixed an issue where AI was returning "Your request is invalid".

#### July 6, 2026

* Fixed an iOS publishing issue.
* Resolved an issue causing apps with a map to crash on Android.

#### June 29, 2026

* Enabled setting the screen’s status color.
* Added [Project settings](https://docs.thunkable.com/ai/getting-started/project-settings).
* Activated [mentioning Screens in Chat](https://docs.thunkable.com/ai/getting-started/quickstart#mention-screens-in-chat).

#### June 22, 2026

* Enabled tagging [Assets](/app-design/assets) on the chat
* Added Native Functionality Panel with suggested [Integrations](/features/integrations).

#### June 15, 2026

* Enabled [Assets](/app-design/assets) for AI projects.
* Added an [upload icon button](/getting-started/toolbar-management#app-icon) on the project screen.
* Fixed an issue with colors appearing on Android.
* Resolved an issue where versions didn’t appear on some projects.

#### June 8, 2026

* Enabled AdMob for AI projects.
* Added Push Notification integration via OneSignal for AI projects.
* Activated the in-app purchases feature for AI projects.

#### June 1, 2026

* Enabled NFC for AI projects.
* Fixed an issue with sound playing for a limited number of times.

#### May 27, 2026

* Fixed an issue with Download Android
* Added [Cloud Database and Authentication via Supabase](/features/cloud-database)

#### May 26, 2026

* Added Video component support for embedding and viewing video content inside apps.
* Enabled biometrics for AI projects.
* Implemented upload custom fonts feature for AI projects

#### May 11, 2026

* AI-generated apps can include WebView.
* Implemented [Google Play API for Automated publishing process](/publishing/android-publishing#automated-method).

#### May 6, 2026

* Enabled Bluetooth integration for AI projects
* Activated sound and speech features for AI projects
* AI-generated apps can include Drawer Navigator
* Fixed an issue with images in downloaded AI apps
* Implemented undo keyboard shortcut for properties panel.

#### April 27, 2026

* Enabled Map integration for AI projects.
* Activated Download Android for mobile users.
* Added example projects that you can remix and use

#### April 13, 2026

* Enabled AI-generated apps to include share file features.
* Implemented API keys support for AI-generated apps.

#### April 6, 2026

* Resolved an issue where a new project was sometimes opened in Preview instead of Edit mode

#### March 30, 2026

* Launched a new [Publish iOS method with App Store Connect API](https://aidocs.thunkable.com/publishing/ios-publishing)

#### March 25, 2026

* Enabled AI-generated apps to access the device’s sensors
* AI-generated apps can include share features
* Added Drag and Drop capability of components on AI projects

#### March 17, 2026

* Improvements to Version Number field in iOS publishing
* Improvements to Unsplash API error classification
* Fix for color schemas applied to active icons
* Expansion of useCamera feature to support desktop photo capture
* Added the option to click on the screen’s components to edit them without using AI
* Launched a new Release Notes Announcements panel
* Added Follow-Up Questions before App Generation and Prompt Suggestions
* AI Docs connected to the platform

#### March 12, 2026

* Updated [token costs for Build & Discuss mode prompts](/#ai-tokens)

#### March 10, 2026

* Fixed bug where code generation continued after clicking Stop
* Improved Discuss Mode feedback readability
* Addition of an Apply button when Discuss Mode suggests an action
* Enabled AI-generated code to access the device location

#### March 4, 2026

* Fixed bug where users received "Unknown Error" response after the first prompt for their app.
* Fixed bug where only a portion of screens appears in drop-down menu.

#### March 3, 2026

* [Color Schema](/app-design/color-schema) settings added.
* Enabled AI-generated code to access the device camera.

#### February 25, 2026

* Thunkable AI full release
* Fixed bug where permissions blocked some app publications to the Google Play Store.

#### February 23, 2026

* Improvement to mobile web layout
* Added an option to set the Version code on AI projects when [publishing the app on Android](https://aidocs.thunkable.com/publishing/android-publishing#download-your-android-app-bundle-aab-file).

#### December 16, 2025

* Thunkable AI released for beta testing.


