Deployments and TestingDeploy to Production

Project Snapshot

A project snapshot is a portable export of your Descope project configuration. Use snapshots to back up settings, promote changes across environments (for example, development to staging to production), or track configuration in source control. The quick reference below maps each path to its purpose; later sections go deeper on the more complex areas.

Snapshot Structure

When you export a project, Descope writes the configuration to a folder of JSON files and subdirectories. Each top-level file or folder maps to a configuration area in your project. The layout below shows what a typical export contains.

applications.json
assets.json
img-abd04...b03.svg
magiclink.json
otp.json
sso.json
connectors.json
my-http-connector.json
flows.json
outboundapps.json
project.json
resources.json
roles.json
snapshot.json
dark.json
light.json
styles.json
widgets.json

Quick Reference

PathDescription
applications.jsonFederated application (OIDC/SAML) configurations.
assets/Images, email templates, and other referenced media. assets.json maps each file to the snapshot paths that use it. Learn More.
auth/One JSON file per enabled authentication method (for example, magiclink.json, otp.json, sso.json).
connectors/Connector index and per-connector configuration. Credentials are excluded from snapshot.
flows/Flow index and per-flow folders with metadata.json, contents.json, and one JSON file per screen. Learn More.
outboundapps.jsonOutbound application configurations for third-party API access.
project.jsonProject-level settings such as user invitation templates, token lifetimes, and trusted domains.
resources.jsonOAuth resource servers, such as backend APIs or MCP servers.
roles.jsonRBAC roles and permissions.
snapshot.jsonSnapshot format version.
styles/Style index and theme override files for flows and widgets. Learn More.
widgets/Widget definitions and widget flow configurations. widgets.json lists each widget; each ID has its own folder. Learn More.

Assets

The assets/ directory holds binary and text files referenced elsewhere in the snapshot, like flow screen images, OAuth provider logos, email templates, and similar content. assets.json is the manifest: it maps each asset file to the snapshot paths and fields that reference it.

assets.json
body-8e4b5e850...99f3e606096.html
emailbody-1b3db...ab524cce2c94c.txt
img-0a9f637654a...637ea7bdf5af.svg
img-d9ece49df03...71301b83a5f6.svg

Asset files use content-based names with a type prefix. The hash in each filename is derived from the file contents, so identical assets share the same name across exports.

PrefixDescription
img-Images used in flows, widgets, styles, or OAuth provider configuration (for example, .svg or .png).
body-HTML content, such as email or messaging templates for auth methods like magic link or OTP.
emailbody-Plain-text email body content.

Other snapshot files reference assets with an asset: prefix followed by the filename—for example, "logo": "asset:img-xxxxx.svg" in an OAuth provider configuration.

When exporting with the Descope CLI, pass --no-assets to skip extracting asset files into the snapshot directory.

Flows

The flows/ directory holds every flow in the project. flows.json is the index: it lists each flow by flow ID, and each ID has a matching subdirectory under flows/.

flows/flows.json
{
  "flows": [
    "sign-in",
    "sign-up-or-in",
    "inbound-apps-user-consent"
  ]
}

Each flow folder contains the flow logic, metadata, and one JSON file per screen.

flows.json
contents.json
metadata.json
screen-consent-screen-unverified-app.json
screen-consent-screen-verified-app.json
screen-verify-otp.json
screen-welcome-screen.json
FileDescription
metadata.jsonFlow display name, description, enabled state, and the list of screen IDs in the flow.
contents.jsonFlow logic—the task graph, conditions, actions, and routing between steps.
screen-<screen-id>.jsonUI definition for a single screen, including components, layout, and interactions. One file per screen listed in metadata.json.

To work with a single flow outside a full project snapshot—for example, to import one flow into another project—use descope flow export or descope flow convert to convert between snapshot format (a flow folder) and a single JSON file.

Styles

The styles/ directory holds every style in the project, including custom styles. styles.json is the index: it lists each style by style ID, and each ID has a matching JSON file under styles/.

styles/styles.json
{
  "componentsVersion": "3.14.10",
  "styles": [
    "custom-style-1-dark",
    "custom-style-1-light",
    "dark",
    "light",
    "sso-suite-default-dark",
    "sso-suite-default-light"
  ]
}

Each style JSON file defines only the changes from Descope’s default light or dark styles. This means your style files specify overrides rather than full copies, making it easy to manage customizations on top of the built-in Descope appearance.

styles/custom-style-1-dark.json
{
  "components": {
    "container": {
      "id": {
        "ROOT": {
          "--descope-container-background-color": "var(--descope-colors-primary-main)"
        }
      }
    }
  },
  "globals": {
    "colors": {
      "secondary": {
        "contrast": "#FFFFFF",
        "dark": "#355313",
        "highlight": "#9DDA58",
        "light": "#7BC32B",
        "main": "#588B1FFF"
      }
    }
  },
  "name": "Custom-Style-1",
  "type": "flows"
}

Widgets

The widgets/ directory holds every widget in the project. widgets.json is the index: it lists each widget by widget ID, and each ID has a matching subdirectory under widgets/.

widgets/widgets.json
{
  "widgets": [
    "access-key-management",
    "role-management",
    "user-management",
    "user-profile"
  ]
}

Each widget folder contains the flow logic, metadata, and one JSON file per screen.

metadata.json
screen-create-user.json
screen-remove-passkey.json
screen-root.json

The widgets/ directory also contains a flows/ subdirectory with all of the widget flows in your project. There is a flows.json file which lists all of the flows by their unique ID. For each flow ID, there is a corresponding folder under widgets/flows/ that contains a separate JSON file for every screen in that flow, as well as a contents.json file (with the flow logic and task graph) and a metadata.json file (with the flow's display name and configuration).

Project Metadata

Two JSON files at the root of the snapshot describe the project itself and the export:

FileDescription
project.jsonProject-level settings—trusted domains, email templates, session lifetimes, invite configuration, and similar options configured in the console.
snapshot.jsonThe snapshot format version and included configuration areas.
Was this helpful?

On this page