# Build and zip

**URL:** <https://community.dynatrace.com/t/build-and-zip/54963>\
**Category:** Developer Q&A Forum\
**Tags:** dynatrace-app-toolkit, custom-app, workflows\
**Created:** [February 11, 2026, 1:45pm UTC](https://community.dynatrace.com/t/build-and-zip/54963 "2026-02-11T13:45:38Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![MW\_ErikPost](https://avatars.discourse-cdn.com/v4/letter/m/67e7ee/32.png) [@MW\_ErikPost](https://community.dynatrace.com/u/MW_ErikPost)\
**Post date:** [February 11, 2026, 1:45pm UTC](https://community.dynatrace.com/t/build-and-zip/54963/1 "2026-02-11T13:45:38Z")

</div>

Hello everyone,

According to the Dynatrace Docs([AppEngine | Dynatrace Developer](https://developer.dynatrace.com/plan/platform-services/app-engine/)) the preferred way to create an app bundle (zip) that can be uploaded in an environment is to use the dt-app toolkit.

But when I use npx dt-app build it will create a /dist folder with files but not a zip folder.  
If I zip the /dist folder it will not allow me to upload the custom app complaining about missing files.

If I use npx dt-app deploy it will deploy to my environment as expected but this also does not create a distributable zip file.

What is the preferred way to create a distributable zip file?

Kind regards,

Erik

---

<div class="post-metadata">

**Author:** ![dani\_coll](https://dub1.discourse-cdn.com/dynatrace/user_avatar/community.dynatrace.com/dani_coll/32/33669_2.png) [@dani\_coll](https://community.dynatrace.com/u/dani_coll)\
**Post date:** [February 11, 2026, 2:40pm UTC](https://community.dynatrace.com/t/build-and-zip/54963/2 "2026-02-11T14:40:01Z")

</div>

Hi MW\_ErikPost,

You need to execute&nbsp; **npx dt-app deploy --dry-run** which will create a folder called **out** , with the artifact zipped.

The **dist** folder that comes from the **dt-app build** command by itself is not enough for deploying the app since you are missing key metadata files like the **app.config.json.**

The documentation states how the **dt-app deploy** command works under the hood, which is the one zipping the needed files to be able to upload them through the API. However, as a user you don’t keep that zip file unless you use the **--dry-run** parameter.

---

<div class="post-metadata">

**Author:** ![MW\_ErikPost](https://avatars.discourse-cdn.com/v4/letter/m/67e7ee/32.png) [@MW\_ErikPost](https://community.dynatrace.com/u/MW_ErikPost)\
**Post date:** [February 11, 2026, 3:00pm UTC](https://community.dynatrace.com/t/build-and-zip/54963/3 "2026-02-11T15:00:01Z")

</div>

Thanks Dani,

That indeed seems to work. I do not see it stated anywhere in the documentation, might be worth to add this to here:&nbsp;[App toolkit | Dynatrace Developer](https://developer.dynatrace.com/quickstart/app-toolkit/#deploy)&nbsp;and to the command help as well.
