Projects
A Hot workspace can contain multiple projects, each with its own source paths and dependencies.
Project Configuration
Project settings use dotted notation:
// Source paths
hot.project.my-app.src.paths ["./hot/src"]
// Test configuration
hot.project.my-app.test.paths ["./hot/test"]
hot.project.my-app.test.capture true
// Dependencies
hot.project.my-app.deps {
"hot.dev/anthropic": { "local": "./hot/pkg/anthropic" }
}
Configuration Fields
src.paths
Defines where your Hot source files are located:
hot.project.my-app.src.paths ["./hot/src", "./lib"]
- List of directories containing
.hotfiles - All paths are relative to the
hot.hotfile location
test.paths
Directories containing test files:
hot.project.my-app.test.paths ["./hot/test"]
test.capture
Whether to capture stdout during tests (default: true):
hot.project.my-app.test.capture true
deps
Package dependencies (see Dependencies for full details):
hot.project.my-app.deps {
"hot.dev/anthropic": { "local": "./hot/pkg/anthropic" }
}
Multiple Projects
You can define multiple projects in one workspace:
// Development project with local packages
hot.project.dev.src.paths ["./hot/src"]
hot.project.dev.test.paths ["./hot/test"]
hot.project.dev.deps {
"hot.dev/stripe": { "local": "./hot/pkg/stripe" }
}
// Production project with pinned versions
hot.project.prod.src.paths ["./hot/src"]
hot.project.prod.test.paths ["./hot/test"]
hot.project.prod.deps {
"hot.dev/stripe": {
"git": "git@github.com:hot-dev/pkg.git",
"path": "hot/pkg/stripe",
"tag": "v1.0.0"
}
}
// Set default project
hot.set.project "dev"
Switch between projects:
hot run -p prod
hot test -p dev
Default Project
Set the default project with:
hot.set.project "my-project-name"
This project is used when no -p/--project flag is specified.
Project Naming
Project names:
- Must be valid Hot identifiers
- Can contain letters, numbers, and hyphens
- Cannot start with a number
- Are case-sensitive
Good names:
my-appproduction-apidevmyProject
Directory Structure
Hot lives alongside your existing code. hot init adds hot.hot to the project root, Hot source files go in hot/, and local data (cache, database, logs) goes in .hot/:
my-project/
├── src/ # Your existing code (any language)
├── package.json # Your existing config files
├── hot.hot # Hot configuration (project root)
├── hot/
│ ├── src/ # Hot source files
│ │ └── my-app/
│ │ └── main.hot
│ ├── test/ # Hot test files
│ │ └── my-app/
│ │ └── test_main.hot
│ └── pkg/ # Local packages
│ ├── anthropic/
│ └── openai/
└── .hot/ # Local data (gitignored)
├── cache/
└── db/