# Third Party App Publishing Checklist

This page contains a "checklist" to go over before you publish an app to customers. As with any guide if you have reason to deviate, it is recommended you follow your intuition and deviate.

## App Checklist

[Transition from Applets to Apps](https://documentation.dnanexus.com/developer/apps/transitioning-from-applets-to-apps)

### `dxapp.json` and Source Code

* [ ] Conform to [Third Party App Style Guide](https://documentation.dnanexus.com/developer/apps/third-party-and-community-apps/third-party-app-style-guide) and [Community App Guidelines](https://documentation.dnanexus.com/developer/apps/third-party-and-community-apps/community-app-guidelines)
* [ ] In `details` field specify: `whatsNew`, and `citations`.
* [ ] In `details` field, specify an `upstreamProjects` key whose value is an array of hashes, each of which describes the [licenses](https://documentation.dnanexus.com/developer/apps/third-party-app-style-guide#licenses) associated with software or packages included in this app. This is required to ensure compliance with open-source licenses. For each entry, specify software's `name`, `repoUrl`, `version`, `license`, `licenseUrl`, and optionally `author`.
* [ ] Verify `regionalOptions` contains regions for ALL supported app regions.
* [ ] Set applicable timeout and restart policy in [`runSpec`](https://documentation.dnanexus.com/developer/app-metadata#runspec-entry-point-and-dependencies).
* [ ] `version` field, set proper [semantic versioning](https://semver.org/).
* [ ] Contemplate setting `"openSource": true`. Default is `False`, set at your discretion.
* [ ] Add unit tests for your app.

### Documentation

* [ ] Write Readme.md and (optional) Readme.developer.md
* [ ] Build as app on DNAnexus Platform, bill to `org-your_handler` (**DO NOT PUBLISH YET**). Remember the unpublished app ID, "app-xxxx".
* [ ] Read documentation to double check. (Unpublished app URL is available to developers as `https://platform.dnanexus.com/app/app-xxxx`)

### Before Publishing the App

* [ ] Build as an app on DNAnexus Platform billed to `org-your_handler` (**DO NOT PUBLISH YET**). Remember unpublished apps can be viewed by developers on the platform under `https://platform.dnanexus.com/app/app-xxxx`.
* [ ] Test it on expected data.
* [ ] Verify [entity-ids](https://documentation.dnanexus.com/developer/api/entity-ids) are specified for all supported cloud regions in the app.
* [ ] Add Developers via the [`dx add developers`](https://documentation.dnanexus.com/user/helpstrings-of-sdk-command-line-utilities#add-developers) CLI command
* [ ] Add `org-dnanexus_tools_admin` as a Developer so DNAnexus can help add `authorizedUsers PUBLIC` when needed.
* [ ] Add authorized users via the [`dx add users`](https://documentation.dnanexus.com/user/helpstrings-of-sdk-command-line-utilities#add-users) CLI command
* [ ] Contact [DNAnexus Support](mailto:support@dnanexus.com) so the DNAnexus tools admin team is notified and can work with you to make the app PUBLIC.
* [ ] Publish via the [`dx publish`](https://documentation.dnanexus.com/user/helpstrings-of-sdk-command-line-utilities#publish) CLI command
* [ ] Verify the versions that appear on the platform are the intended versions

Congratulations! You've published an app. Feel free to publicize your app and let your users know your tool is available in the cloud.
