Skip to content

Teams app package

The Teams app is a manifest pointing at your deployment. Build it once per deployment (and again when the URL, client ID or version changes).

  1. Build the package from the repository root:

    Terminal window
    APP_URL=https://app.example.com ENTRA_CLIENT_ID=<client id> npm run teams:package

    The script also reads apps/api/.env if it exists. It writes teams/build/<name>-teams-<version>.zip and a copy of manifest.json next to it, and prints the app ID, domain and SSO resource.

  2. Upload the zip in the Teams admin center → Teams apps → Manage apps → Upload new app, or for testing in Teams itself under Apps → Manage your apps → Upload an app.

  3. Make it available with an app setup policy (pin it for users or groups) or let people add it from Apps. Each customer organization does this in its own Teams admin center, so give their owners the zip (the app has no download link for it). See Organization settings.

Variable Default Notes
APP_URL (required) Public https:// URL of the app. Teams doesn’t load http.
ENTRA_CLIENT_ID (required) The app registration’s client ID.
ENTRA_APP_ID_URI api://<APP_URL host>/<client id> SSO resource. Must equal the registration’s Application ID URI.
MARKETING_URL APP_URL with a leading app. replaced by www. Developer website; the privacy and terms links are <MARKETING_URL>/privacy and <MARKETING_URL>/terms.
TEAMS_APP_ID derived from the domain The Teams app ID. The default is stable for a given domain, so rebuilt packages update the same app.
TEAMS_APP_VERSION 1.0.0 Increase it each time you upload a changed package.
  • Name and description from the brand in @pdfeditor/shared; generated color and outline icons.
  • Personal tabs: Editor (/?inTeams=1), Signing (/signing?inTeams=1) and the standard About tab.
  • A configurable tab for channels, group chats and meetings (/teams/config): whoever adds it chooses whether it opens the PDF editor or Signing.
  • Permissions: identity. Valid domains: the APP_URL host.
  • Single sign-on (webApplicationInfo): your client ID and the SSO resource above.