Homeโ€บ๐ŸŽฎ Foundationsโ€บModule 11 min read ยท 2/15

Setting Up Your BFG

Tutorial

The App Toolkit

One CLI to scaffold, develop, and deploy apps:

node --version  # Need 24+
npx dt-app@latest create --environment-url https://YOUR-ENV.apps.dynatrace.com

Templates

Template                What You Get
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
default                 Full example with DQL, charts, tables
empty                   Blank app โ€” just routing, no content

Project Structure

my-app/
โ”œโ”€โ”€ ui/
โ”‚   โ”œโ”€โ”€ app/
โ”‚   โ”‚   โ”œโ”€โ”€ App.tsx           โ† Root component + routing
โ”‚   โ”‚   โ””โ”€โ”€ pages/            โ† Your pages
โ”‚   โ””โ”€โ”€ main.tsx              โ† Entry point (AppRoot + BrowserRouter)
โ”œโ”€โ”€ api/                      โ† App Functions (TypeScript files)
โ”œโ”€โ”€ app.config.json           โ† App metadata + permissions + CSP
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ tsconfig.json

app.config.json

From the real DOOM app (deployed and running):

{
  "environmentUrl": "https://YOUR-ENV.apps.dynatrace.com/",
  "app": {
    "name": "My App",
    "version": "0.0.1",
    "description": "A custom Dynatrace app",
    "id": "my.custom.app",
    "scopes": [
      { "name": "storage:metrics:read", "comment": "Host metrics" },
      { "name": "storage:entities:read", "comment": "Host/service entities" },
      { "name": "storage:logs:read", "comment": "Log analytics" },
      { "name": "storage:events:read", "comment": "Problems and events" }
    ]
  }
}

โš ๏ธ Scopes define what data the app can access. Missing scopes = silent empty results (no error). Always declare every data type the app queries.

Development Workflow

npx dt-app dev    # Local dev server with hot reload
npx dt-app build  # Build for deployment
npx dt-app deploy # Deploy to your Dynatrace environment

๐Ÿ›  Try it: Run npx dt-app@latest create --environment-url https://YOUR-ENV.apps.dynatrace.com โ†’ name it "my-first-app" โ†’ cd my-first-app && npx dt-app dev. Your app opens in the browser, live-reloading as you edit code.