Skip to content

Project Configuration

TMA.sh stores local project settings in .tma/project.json at the root of your repository. This file is created by tma init or tma link.

tma init writes:

{
"projectName": "my-app"
}

tma link writes:

{
"projectId": "11111111-2222-4333-8444-555555555555",
"orgId": "66666666-7777-4888-8999-000000000000",
"projectName": "my-app"
}

Keep .tma/project.json in version control, but ignore local runtime artifacts:

.tma/*
!.tma/project.json

These settings are configurable from the TMA.sh dashboard or via the platform API.

SettingDefaultDescription
nameProject display name
slugURL slug (used in URLs and API)
subdomainDerived from slug (lowercase, special chars replaced with hyphens)
repoUrlGitHub repository URL
branchmainBranch to deploy from
installCommandnpm installDependency install command
buildCommandnpm run buildBuild command
outputDirdistBuild output directory
autoDeploytrueAuto-deploy on push to main
previewPrNumbernullSelected pull request number used as the staging preview target

The slug is used as a project identifier in URLs and the API, while the subdomain is a normalized version of the slug (lowercase, special characters replaced with hyphens). Both exist as separate database columns.

Only one staging preview target can be selected at a time. Set previewPrNumber to null to disable preview deployments.

Your project is served at https://{subdomain}.tma.sh for static assets and https://{subdomain}--api.tma.sh for API routes.


TMA.sh deploys static SPA output. Your configured outputDir must contain an index.html file after the build command completes.


There are over 60 reserved subdomains that cannot be used as project slugs. These span several categories including:

  • Core platform: api, app, dashboard, admin, www
  • Environments: staging, preview, dev, test, demo, sandbox, internal
  • Auth/accounts: auth, login, signup, account, sso
  • Static/CDN: cdn, assets, static, media
  • Docs/support: docs, help, support, status, blog
  • Mail/DNS: mail, smtp, mx, ns1, ns2
  • Network/infra: proxy, vpn, wpad, git, svn, ssh, sftp
  • API protocols: graphql, ws, wss, rpc, grpc, webhook, webhooks
  • Observability: metrics, monitoring, logs, analytics, telemetry, health, healthcheck, ping

If you attempt to create a project with a reserved slug, the API will return an error. Choose a different name or prefix your slug (e.g., my-app instead of app).