Skip to main content
Version: 2.4

Configuration Reference

This page is the single reference for all configuration files used in tSM packaging and deployment. It covers:

  • package.yaml — package definition (per package)
  • tsm-project.yaml — project-level workspace settings
  • ~/.tsm/ — user-level CLI configuration and credentials

These files follow the same layered model found in many enterprise development platforms: project-level settings live in the repository and are shared via Git, while user-level settings (credentials, personal preferences) live in the home directory and are never committed.

See also:


Workspace layout

A complete workspace has this structure:

tsm-project.yaml                    # project-level settings (committed to Git)

packages/
core-common/
package.yaml # package definition
shared/ # content area
Register/ # entity-type subfolder (auto-generated)
Script/
Form/

ordering-sdwan/
package.yaml
sdwan-product/
EntityCatalogCategory/
EntityCatalogSpecification/
Characteristic/
Form/
sdwan-fulfillment/
Process/
Script/

~/.tsm/ # user-level settings (NOT committed)
config.json # CLI user preferences
credentials.json # stored environment credentials

Key rules:

  • tsm-project.yaml is committed to Git — it defines the project for all team members.
  • packages/*/package.yaml files are committed to Git — they define each package.
  • ~/.tsm/ is user-local. It is never committed. Each developer has their own credentials and defaults.
  • Entity-type subfolders inside package areas are created automatically by tSM Studio during sync.

package.yaml

The package definition file. One per Configuration Package. Located at:

packages/<packageId>/package.yaml

Full example

packageId: ordering-sdwan
name: Ordering / SD-WAN
version: 1.4.0
description: SD-WAN-specific ordering configuration.
ownerTeam: SDWAN

dependencies:
- packageId: core-common
versionRange: ">=1.0.0 <2.0.0"
kind: required

- packageId: ordering-core
versionRange: ">=1.2.0 <2.0.0"
kind: required

areas:
- id: sdwan-product
path: sdwan-product
description: SD-WAN commercial and product-model configuration.
configTypes:
- code: cap.ordering.sdwan.product
includeSubtree: true

- id: sdwan-fulfillment
path: sdwan-fulfillment
description: SD-WAN-specific process and orchestration configuration.
configTypes:
- code: cap.ordering.sdwan.fulfillment
includeSubtree: true
entityRules:
- entityType: Script
include:
- idOrCode: SDWAN.EligibilityCheck

policy:
managed: true
allowDelete: false
enforceDependencies: true

Package (top-level fields)

FieldTypeRequiredDescription
packageIdStringYesStable unique identifier. Should match the directory name.
nameStringYesHuman-readable name shown in Studio and CLI output.
versionStringYesPackage version. Semantic versioning recommended (1.4.0).
descriptionStringHuman-readable purpose of the package.
ownerTeamStringTeam responsible for this package.
dependenciesList<Dependency>Other packages this package requires.
areasList<Area>YesContent areas inside the package.
policyPolicyInstall and upgrade behavior.

Dependency

FieldTypeRequiredDescription
packageIdStringYesPackage ID of the required dependency.
versionRangeStringYesAllowed versions (e.g. >=1.2.0 <2.0.0).
kindEnumYesrequired — must be installed. optional — advisory.

Version range syntax

Version ranges follow standard semver range notation:

RangeMeaning
>=1.0.0 <2.0.0Any 1.x version.
>=1.2.0 <1.3.0Any 1.2.x patch.
>=0.0.1 <1.0.0Any pre-1.0 version.
>=2.0.0Version 2.0.0 or later (no upper bound).

Area

FieldTypeRequiredDescription
idStringYesStable area identifier. Used in CLI and API references.
pathStringYesRelative directory path inside the package (default: same as id).
nameStringOptional display name.
descriptionStringWhat this area contains.
configTypesList<AreaConfigType>YesConfigTypes that define the area scope.
entityRulesList<EntityRule>Optional per-entity-type refinements.

An area should represent a business or configuration area (e.g. sdwan-product, ticketing-flow, shared), not a technical entity type. Entity-type subfolders are created automatically by Studio during sync.

AreaConfigType

FieldTypeRequiredDescription
codeStringYesConfigType code used as the selection root.
includeSubtreeBoolYestrue — include all descendant ConfigTypes. false — exact match.

Example

configTypes:
- code: cap.ordering.sdwan.product
includeSubtree: true

This matches cap.ordering.sdwan.product and any descendant such as cap.ordering.sdwan.product.access.

EntityRule

Optional refinements per entity type within an area. Only needed for edge cases.

FieldTypeRequiredDescription
entityTypeStringYesEntity type this rule applies to (e.g. Form, Process).
includeList<Selector>Items to include regardless of ConfigType matching.
excludeList<Selector>Items to exclude even if ConfigType matches.
filtersList<Filter>Additional filters on top of ConfigType selection.

If no entityRules are specified, the area includes all entity types matching the ConfigType scope. Only add entity rules when you need to override the default behavior (e.g. explicit includes, excludes, or filters for a specific entity type).

Each include / exclude entry is a Selector object with one field:

FieldTypeRequiredDescription
idOrCodeStringYesEntity identifier. If a UUID, treated as ID; otherwise treated as business code.

Prefer codes over UUIDs.

entityRules:
- entityType: Script
include:
- idOrCode: SDWAN.EligibilityCheck

Filter

Narrows selection further within one entity type.

FieldTypeRequiredDescription
fieldStringYesEntity field to filter on (for example name, status, register.code).
opStringYesFilter operator aligned with Public API semantics, e.g. eq, noteq, gt, gte, lt, lte, contains, notcontains, startswith, endswith, in, notin, empty, notempty, btw.
valueStringYesOperator value. For list/range operators, use comma-separated values (for example ACTIVE,PENDING or 100,500).

Filters map to the same API filtering model used by /search and /page: field__operator=value.

filters:
- field: name
op: contains
value: sdwan

- field: status
op: in
value: ACTIVE,PENDING

Policy

Controls install and upgrade behavior.

FieldTypeRequiredDefaultDescription
managedBooltrueInstalled items are tracked as managed by this package.
allowDeleteBoolfalseIf true, items missing from the package are deleted on install/upgrade.
enforceDependenciesBooltrueRequired dependencies must be satisfied before installation.

Effective selection logic

For each area, the selection works as follows:

  1. Start with all items whose configType matches one of the area's ConfigTypes.
  2. When includeSubtree: true, include descendant ConfigTypes.
  3. If entityRules are present, apply per-entity-type overrides (include, exclude, filters).
  4. Store results into the area directory, grouped by entity type in auto-generated subfolders.

tsm-project.yaml

The project definition file. One per workspace. Located at the workspace root:

tsm-project.yaml

This file defines project-wide settings that apply to all team members. It is committed to Git.

Full example

name: acme-bss
description: ACME BSS solution — ordering, CRM, ticketing, and SD-WAN overlay.

sourceDirectory: packages

packages:
- path: packages/System
- path: packages/InfraCommon
- path: packages/BSSBase
- path: packages/OSSBase
- path: packages/TicketingBase
- path: packages/SDWAN

environments:
dev:
url: https://dev.tsm.example.com
description: Shared development environment.
test:
url: https://test.tsm.example.com
description: Integration testing.
prod:
url: https://tsm.example.com
description: Production.

plugins:
- id: tsm-studio-spel
enabled: true
- id: tsm-studio-tql
enabled: true

Project (top-level fields)

FieldTypeRequiredDescription
nameStringYesProject identifier. Used in CLI output and Studio UI.
descriptionStringHuman-readable project description.
sourceDirectoryStringRoot directory containing packages (default: packages).
packagesList<PackageReference>Explicit list of packages in this project.
environmentsMap<String, Environment>Named environments available to all team members.
pluginsList<PluginConfig>Studio plugin configuration.

PackageReference

FieldTypeRequiredDescription
pathStringYesRelative path to the package directory.

If packages is omitted, Studio auto-discovers packages by scanning sourceDirectory for directories containing package.yaml.

Environment

FieldTypeRequiredDescription
urlStringYesBase URL of the tSM instance.
descriptionStringHuman-readable environment description.

Environments defined here are available to all team members. They appear in tsm auth list and can be used with --target-env.

Individual credentials for these environments are stored in the user-level ~/.tsm/credentials.json — never in the project file.

PluginConfig

FieldTypeRequiredDescription
idStringYesPlugin identifier.
enabledBoolWhether the plugin is active (default: true).

~/.tsm/ (user home directory)

The user-level configuration directory. Located at:

~/.tsm/
config.json # CLI user preferences
credentials.json # stored environment credentials

These files are never committed to Git. Each developer has their own copy.

On first use, the CLI creates ~/.tsm/ with restricted permissions (700).


~/.tsm/config.json

Stores CLI user preferences and per-project defaults. Managed via tsm config set / tsm config get.

Full example

{
"output": "table",
"timeout": 300,
"color": true,
"pager": true,
"default-env": "dev",
"projects": {
"acme-bss": {
"default-env": "test",
"output": "json"
}
}
}

Top-level keys are global defaults. The projects map contains per-project overrides keyed by the project name from tsm-project.yaml. When resolving a setting, the CLI checks projects.<current-project> first; if the key is absent it falls back to the top-level value.

Settings reference

KeyTypeDefaultDescription
outputStringtableDefault output format: table, json, or yaml.
timeoutInteger300HTTP request timeout in seconds.
colorBooltrueEnable colored terminal output.
pagerBooltruePipe long output through the system pager.
default-envStringTarget environment alias (e.g. dev, test, prod).
projectsObject{}Per-project overrides keyed by tsm-project.yaml name. Each entry can contain any of the keys above.

All settings can be overridden per-command using flags or environment variables:

SettingFlagEnvironment variable
output--output
timeout--timeout
color--no-colorNO_COLOR
default-env--target-envTSM_ENV

~/.tsm/credentials.json

Stores authentication credentials for tSM environments. Managed via tsm auth login / tsm auth logout.

The file is created with restricted permissions (600).

Full example

{
"environments": {
"dev": {
"url": "https://dev.tsm.example.com",
"auth": "basic",
"user": "admin",
"password": "encrypted:v1:...",
"addedAt": "2026-01-15T10:30:00Z"
},
"prod": {
"url": "https://tsm.example.com",
"auth": "bearer",
"token": "encrypted:v1:...",
"addedAt": "2026-02-01T14:00:00Z"
}
},
"default": "dev",
"projects": {
"acme-bss": {
"default": "prod"
}
}
}

Top-level environments and default are global. The projects map allows per-project overrides (keyed by tsm-project.yaml name). Per-project entries can also contain their own environments map when projects connect to different tSM instances.

Structure

FieldTypeDescription
environmentsObjectMap of alias → credential entry (global).
environments.<alias>.urlStringBase URL of the tSM instance.
environments.<alias>.authStringAuthentication type: basic or bearer.
environments.<alias>.userStringUsername (for basic auth).
environments.<alias>.passwordStringEncrypted password (for basic auth).
environments.<alias>.tokenStringEncrypted bearer token (for bearer auth).
environments.<alias>.addedAtStringISO-8601 timestamp when the credential was stored.
defaultStringGlobal default environment alias.
projectsObjectPer-project overrides keyed by tsm-project.yaml name.
projects.<name>.defaultStringDefault environment alias for this project.
projects.<name>.environmentsObjectProject-specific credentials (same structure as top-level environments).

Security

  • Passwords and tokens are encrypted at rest using a machine-local key.
  • The file is created with permission mode 600 (owner read/write only).
  • The tsm auth logout command removes the entry and securely overwrites the credential.
  • Credentials are never displayed in tsm auth list output — only the alias, URL, and auth type.

Configuration precedence

When the CLI resolves a setting, values are checked in this order (highest priority first):

PrioritySourceExample
1Command-line flags--target-env prod
2Environment variablesTSM_ENV=prod
3Per-project user configconfig.json → projects.acme-bss.default-env
4Global user configconfig.json → "default-env": "dev"
5Built-in defaultsoutput: table, timeout: 300

This means:

  • A flag always wins.
  • An environment variable overrides user config.
  • Per-project user config overrides global user config.
  • Global user config provides fallback values.

Environment resolution example

Given:

  • tsm-project.yaml defines environments dev and prod with their URLs.
  • config.json has "default-env": "dev" globally and projects.acme-bss.default-env: "prod".
  • credentials.json has credentials for aliases dev and prod.
  • Developer runs (without --target-env): tsm package validate AllConfig

Resolution:

  1. No --target-env flag, no TSM_ENV variable.
  2. Current project is acme-bss (from tsm-project.yaml).
  3. config.jsonprojects.acme-bss.default-env = prod → priority 3.
  4. URL from tsm-project.yaml environments prodhttps://tsm.example.com.
  5. Credentials from credentials.json for alias prod → used for authentication.

If the developer works in a different project with no per-project override, the global default-env: dev is used instead.


Project vs user configuration

Aspecttsm-project.yaml~/.tsm/config.json + credentials.json
ScopePer workspace (shared via Git).Per user (local to machine), with per-project overrides.
Committed to GitYes.Never.
Contains credentialsNo.Yes (encrypted).
Contains env URLsYes (shared reference).Yes (per-credential).
Contains packagesYes (explicit list or autodiscovery).No.
Contains defaultsNo.Yes (global + per-project).
Managed byTeam lead / project setup.Individual developer / tsm config set.

Why two levels?

Project file answers: what packages exist, what environments are available? — the same for everyone.

User files answer: what are my credentials, which environment do I default to, what are my preferred CLI settings? — different per developer, optionally different per project.

This separation keeps credentials and personal preferences out of Git while still sharing environment definitions and project structure.


Minimal configurations

Minimal package.yaml

packageId: AllConfig
name: All Configuration
version: 0.0.1

areas:
- id: all
path: all
configTypes:
- code: Common
includeSubtree: true

Minimal tsm-project.yaml

name: my-project

With only name, Studio auto-discovers packages by scanning the default packages/ directory.

Minimal ~/.tsm/config.json

{}

All defaults apply. The developer can still pass --target-env and --url as flags.


File locations summary

FilePathGitPurpose
Package definitionpackages/<id>/package.yamlYesDefines one Configuration Package.
Project settingstsm-project.yamlYesWorkspace-wide project settings.
CLI preferences~/.tsm/config.jsonNoUser preferences + per-project defaults.
Stored credentials~/.tsm/credentials.jsonNoEncrypted environment credentials.

See also