Skip to main content

Publish and share Apps

Publish your project to make the latest version available in your App.


Publish a version

Publishing a project version pushes the latest changes to your App. The first time you build an App, you must publish it to make it available.

The Publish button on your project will be enabled anytime there are unpublished changes.

Preview and publish

Clicking the Publish button will open the Publish dialogue. This will kick off a run of your App to generate a live preview of the changes. While the preview is loading, the primary button will say Running.

When the run is complete, the button will update to say Publish version.

You can use the Publish preview to see what your App will look like after you publish, and to view a diff with your previous published version. You can also view and revert to past versions of a project using the Version control dialog.

Clicking the Publish version button on the will publish the latest version of your project and make it available in your App.


If you see an error in the Publish preview that you're not seeing in your Notebook view, you may need to Restart and run all from your Notebook view.

Apps and Publish previews always run every cell in your Notebook top-to-bottom with a new kernel. So if you have any now-deleted variables lingering in your personal kernel, it may lead to errors in the new kernel.

Publish without previewing

We recommend waiting for your Publish preview to finish running and verifying that there are no errors before publishing. However, if you are confident that the latest version contains only minor changes that you don't need to preview, you can click the down arrow next to the Running... button and click Publish now.

The Publish now option forces the app to publish without waiting for the run to complete in the publish dialog. Note that this will not kill the run that has been kicked off; it will simply allow you to publish and exit the publish dialogue before the run completes.


By using Publish now you reliquish your opportunity to review any possible errors in your project before they are published to your live App.

Share your App

Publishing your project does not grant anyone access to it. To share your App with someone you must grant them project permissions from the Share dialogue.

You can grant access to only the published App by granting App Only project permissions. Granting Can View, Can Edit, or Full Access project permissions will also grant access to the published App.

Presentation mode

  • Presentation mode is available on Professional, Team, and Enterprise pricing plans.

Presentation mode allows you to share your published app in full screen.

Apps with tabs will render a title slide, with each tab as a separate slide. Apps without tabs will render as a single page.

To enter presentation mode, use the cmd + . shortcut, or the button in the top right corner of the app.

Use the left and right arrow keys to navigate between slides, or the buttons at the bottom of the slide.

To exit presentation mode, use the esc key.

You can generate and distribute a link to your App to help others quickly find and view a specific view of your App.


Links to Apps do not grant access, so you'll need to first Share your App.

There are three options for App links:

  1. Published app links route users to the default published App.
  2. Current inputs links route users to your published App with the input parameter values that you are currently viewing.
  3. Collaborative session links route users to a shared, multiplayer session of the published App where any changes any user makes to the App will update in realtime for all collaborative session viewers.

This option generates a link to your published app with all input parameters set to their default values and copies it to your clipboard. Any changes you may have made to any input values on the published App will not be passed to the Published app link.

This option both (1) refreshes your published App session to be a collaborative, multiplayer session and (2) generates and copies to your clipboard a unique link to the new collaborative session.

You can distribute this link to let others join the collaborative session. Anyone with the link will see the exact same view of the App, including real-time changes made by any user viewing the collaborative app session.

For example, if you and your colleauge are both viewing a collaborative session and you update an input parameter on the App, your colleague will immediately see the App run and update to reflect the input you changed.

This option generates and copies to your clipboard a link to the App with the current values of all input parameters specified as URL parameters.

You can distribute this link to show others the App with specific inputs applied.

When someone clicks through a Current inputs link, they will start a new App session. Once the app has loaded, the input parameter values specified in the link URL parameters will be removed from the URL. This allows the user to explore the App from the baseline set of input parameter values.

Manually specify input parameter values as URL parameters

If preferred, you can manually construct an App URL with specific input parameter values by specifying input parameter values as URL parameters. However, you must ensure that each URL parameter matches the required syntax for each input type, as described below. If an invalid URL parameter is passed that parameter will be ignored.

Input parameters are referenced in the URL via their corresponding python variable name, prefixed with an underscore, e.g.\{workspace_id\}/hex/\{project_id\}/latest?_\{variable_name\}=\{variable_value\}. You can pass multiple input parameter values as URL parameters by appending parameters to a published app URL after a ?, and separating each parameter with a &.

When specifying an input parameter value inside of an embed src string, you'll need to UTF-8 encode the parameter value. This includes using the UTF-8 character for double quotes, %22, instead of double quotes.

Input parameterExample URL parameterNotes
Checkbox/latest?_input_checkbox=falsetrue/false are the only accepted values
Run button/latest?_input_button=truetrue/false are the only accepted values
Dropdown/latest?_input_dropdown=42Strings must be wrapped in quotes.
Multi-select/latest?_input_multiselect=["b",99]Values must be passed as a JSON-encoded array. Strings must be wrapped in quotes.
Slider/latest?_input_slider=4If a value outside of the Slider's defined range is provided the default value is used instead.
Text/latest?_input_text="It is a truth universally acknowledged..."Strings must be wrapped in quotes.
Date - no time/latest?_input_date_only="2021-07-13"Dates must be passed with a "YYYY-MM-DD" format
Datetime - with timezone/latest?_input_datetime_tz="2021-07-13 13:45:22 America/Chicago"Datestimes with a timezone must be passed with a "YYYY-MM-DD HH:MM:SS {timezone name}" format
Datetime - without timezone/latest?_input_datetime="2021-07-13 13:45:22"Datetimes without timezone information default to UTC, must be passed with a "YYYY-MM-DD HH:MM:SS {timezone name}" format
Relative date - with timezone/latest?_relative_date_tz="7 days ago America/Chicago"Relative dates with a timezone must be passed with a format of: {number} [day(s), month(s), year(s)] [ago, from now] {timezone name} and wrapped in quotes.
Relative date - without timezone/latest?_input_datetime="2021-07-13 13:45:22"Relative dates without a timezone must be passed with a format of: {number} [day(s), month(s), year(s)] [ago, from now] and wrapped in quotes.