Project Configuration
Local Configuration
Section titled “Local 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.
Dashboard Settings
Section titled “Dashboard Settings”These settings are configurable from the TMA.sh dashboard or via the platform API.
| Setting | Default | Description |
|---|---|---|
name | — | Project display name |
slug | — | URL slug (used in URLs and API) |
subdomain | — | Derived from slug (lowercase, special chars replaced with hyphens) |
repoUrl | — | GitHub repository URL |
branch | main | Branch to deploy from |
installCommand | npm install | Dependency install command |
buildCommand | npm run build | Build command |
outputDir | dist/ | Build output directory |
autoDeploy | true | Auto-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.
Framework Detection
Section titled “Framework Detection”When you connect a repository, TMA.sh inspects your package.json to detect the framework in use and pre-fill build settings.
| Framework | Detection Signal | Default Build | Default Output |
|---|---|---|---|
| Vite | vite in dependencies or devDependencies | npm run build | dist/ |
| Astro | astro in dependencies or devDependencies | npm run build | dist/ |
| Plain HTML | No 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.
Not Supported
Section titled “Not Supported”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.
Subdomain Restrictions
Section titled “Subdomain Restrictions”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).