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.

{
"projectName": "my-app"
}

Add .tma/ to your .gitignore — it contains local state only.


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
outputDirdist/Build output directory
autoDeploytrueAuto-deploy on push to main

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.

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


When you connect a repository, TMA.sh inspects your package.json to detect the framework in use and pre-fill build settings.

FrameworkDetection SignalDefault BuildDefault Output
Vitevite in dependencies or devDependenciesnpm run builddist/
Astroastro in dependencies or devDependenciesnpm run builddist/
Plain HTMLNo framework detected(static copy)./

Detection runs on project creation and after each successful build. You can override the detected defaults in the dashboard at any time.

SSR frameworks are not supported. TMA.sh is a static SPA hosting platform — server-side rendering is outside its scope.

The following frameworks will be rejected during detection:

  • SvelteKit (@sveltejs/kit)
  • Next.js (next)
  • Nuxt (nuxt)

If your project uses one of these frameworks, configure it to produce a static export (e.g., output: 'static' in Astro) and set the build settings manually.


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, canary
  • 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: gateway, proxy, edge, node, cluster
  • API protocols: graphql, grpc, ws, websocket
  • Observability: metrics, logs, traces, monitor

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).