> For the complete documentation index, see [llms.txt](https://docs.jetadmin.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.jetadmin.io/classic-app-builder/preview-and-publish.md).

# Test, publish, and maintain

Applies to **Classic App Builder**. Screens and recordings in this section show the Classic interface.

Verify a Classic app's bindings, actions, and user access before releasing a change.

## Test an existing app

1. Confirm the app, environment, resource connections, and intended user role.
2. Check the changed component with populated, empty, and missing values.
3. Test a second selected record to detect stale bindings.
4. Run permitted actions on synthetic data and inspect the source result.
5. Test a restricted user and confirm denied operations leave data unchanged.
6. Preview the app, then follow its publishing controls and verify the published result.

Use [Troubleshoot a Classic app](/classic-app-builder/preview-and-publish/troubleshoot-a-classic-app.md) if a check fails. For shared release practices, use [Publish & Deploy](/jet-bridge-deployment/overview.md); for permissions, use [Access & Governance](/access-and-sharing/app-and-data-permissions.md).

## Classic mode and publishing reference

The following screenshots describe the Classic Builder, User, and Preview modes. These controls differ from the AI builder's Version History panel.

## Builder/User/Preview modes

There are three operational modes in Jet Admin: the **Builder mode**, the **User mode**, and the **Preview mode.**

## **Builder Mode**

**Builder mode** is where people who are building an app can add data sources, drag-and-drop UI components, customize them, bind them to your data, manage environments, and perform all the necessary work to get your app ready.

{% hint style="info" %}
Use an account with the builder access required for the app you maintain.
{% endhint %}

![](https://3448227606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LQ08RFAKZvFADEiXKFy%2Fuploads%2F3zif5Nv0bYABpt3qsVE6%2Fmcgnvyn.JPG?alt=media\&token=dbc78be9-52ef-41a6-ae33-754bf463fafe)

## **User Mode**

**User mode**, on the other hand, allows end-users to perform their daily operations in the app. For that, all the changes that have been made in the app have to be published, generating a new page with a new `.../app/...` URL. In this mode, users don't have access to any customization features but can interact with the data according to their permissions.

![](https://3448227606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LQ08RFAKZvFADEiXKFy%2Fuploads%2FeHN8euPpSaUJEESSPU4G%2Ffmxyju.JPG?alt=media\&token=0c4218de-279e-492e-8416-e6e37f86b75e)

## **Preview Mode**

**Preview mode** is designed for the builders to quickly preview the app in a user-mode without having to publish an app.

Within the preview mode, a user can:

* **Review** the changes before publishing
* **Discard** changes (will revert back to the last published version)
* **Publish** an app
* **Impersonate** a specific user

![](https://3448227606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LQ08RFAKZvFADEiXKFy%2Fuploads%2FywrUSyy07NeeUJRrp5R8%2Ftdjsyu.png?alt=media\&token=c9c7d978-6418-4e6f-8515-3cd35f0c71aa)

### Reviewing changes

By clicking on the **"N changes"** label, drill down into the changes history. Here you can view the logs **(2)** and granularly discard changes for broader categories **(1)** or for individual collections, resources, settings, etc. **(3)**

![](https://3448227606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LQ08RFAKZvFADEiXKFy%2Fuploads%2FfuDmSHBMJMIdEzKcUVJk%2Fxncffy.png?alt=media\&token=7bdfad85-c591-4cd2-92ab-1363e787efb1)

### Impersonating users

When building an app, it's usually difficult to get the right idea of how page permissions, dynamic filters, or conditional visibility that's been configured will transform into the end-user experience.

The impersonation feature allows you to quickly **preview** an app **through the eyes** of a particular user. In the example case below, we've denied access for Michael to the `Customers` page and set the user to see only records where `Customer ID = 1` the `Orders` table.

![](https://3448227606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LQ08RFAKZvFADEiXKFy%2Fuploads%2FUW2uhaEU9fbCYzcFa0ob%2Fftjgyu.gif?alt=media\&token=7199a5e3-5a72-4a49-96d8-a991de08d079)

To start previewing as a particular user, just click on the "Previewing as" button, and choose a user to impersonate

![](https://3448227606-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LQ08RFAKZvFADEiXKFy%2Fuploads%2F9Mb1rqyl1SQTjwzWwerv%2Fdnctfv.png?alt=media\&token=9ad2b034-0a2d-49f7-95a6-fe3e83ffe4b6)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.jetadmin.io/classic-app-builder/preview-and-publish.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
