Light Dark

Hot Configuration

Configure your Hot project using the hot.hot configuration file.

Creating a Configuration File

The easiest way to create a hot.hot file is with hot init:

hot init

This creates a minimal hot.hot file with sensible defaults for local development.

To see all available configuration options, use:

hot conf generate all

You can also generate component-specific templates for self-hosting:

hot conf generate api        # API server config
hot conf generate app        # App server config
hot conf generate worker     # Worker config
hot conf generate scheduler  # Scheduler config

Overview

The hot.hot file is the central configuration for your Hot project. It defines:

  • Projects - Named project configurations with source paths and dependencies
  • Dependencies - External packages your project uses
  • Settings - Global defaults like the active project, profile, and remote
  • Services - Database, Redis, logging, and other infrastructure settings

Basic Structure

A minimal hot.hot file (created by hot init) looks like:

// hot.hot - Project Configuration File
::hot::conf ns

::env ::hot::env

// Profile and Project Settings
hot.set.profile "local-dev"
hot.set.project "my-app"
hot.set.remote "hot-dev"

// Local Development Profile
hot.profile.local-dev.user.email "dev@example.com"
hot.profile.local-dev.org.slug "dev"
hot.profile.local-dev.env.name "development"

// Remote API (hot.dev)
hot.remote.hot-dev.url ::env/get("HOT_API_URL", "https://api.hot.dev")
hot.remote.hot-dev.key ::env/get("HOT_API_KEY", "")

// Project Configuration
hot.project.my-app.src.paths ["./hot/src"]
hot.project.my-app.test.paths ["./hot/test"]
hot.project.my-app.deps {}

That's all you need for local development. Database, logging, and other services use sensible defaults.

For production or advanced configuration, add settings as needed:

// Database Configuration (defaults to local SQLite)
hot.db.uri ::env/get("HOT_DB_URI", "sqlite:./.hot/db/hot.sqlite.db")

// Logging Configuration
hot.log.level ::env/get("HOT_LOG_LEVEL", "info")
hot.log.target ::env/get("HOT_LOG_TARGET", "stdout")

// Dependencies
hot.project.my-app.deps {
  "hot.dev/anthropic": "0.9.0",
  "hot.dev/openai": "0.9.0"
}

Run hot conf generate all to see all available options.

Minimum Version Requirement

Use hot.min-version to specify the minimum Hot version required for your project:

hot.min-version "1.0.0"

When set, Hot will check this requirement at startup and display a clear error if the requirement is not met:

Version requirement not met: Hot version 1.0.0 is required, but you are running 0.11.0
This project requires Hot 1.0.0 or later.

This is useful for:

  • Team coordination - Ensure all team members are on a compatible version
  • CI/CD - Fail fast with a clear message before builds
  • Feature requirements - When your code uses features from a specific Hot version

Logging Configuration

SettingDescriptionDefault
hot.log.levelLog level: trace, debug, info, warn, error, offinfo
hot.log.targetOutput target: stdout, file, nonestdout
hot.log.dirDirectory for log files (when target is file).hot/log
hot.log.rotationFile rotation: hourly, daily, nonedaily
hot.log.retentionNumber of log files to keep (0 = keep all)7

When log.target is set to file, logs are written to the configured directory with automatic rotation and cleanup based on the retention setting.

Configuration Format

Hot configuration uses a dotted notation where each setting is a separate assignment:

// Setting a simple value
hot.log.level "info"

// Setting from environment with default
hot.api.port Int(::env/get("HOT_API_PORT", "4681"))

// Setting a list
hot.project.my-app.src.paths ["./hot/src", "./lib"]

// Setting a map (for dependencies)
hot.project.my-app.deps {
  "hot.dev/anthropic": "0.9.0"
}

Sections

  • Dependencies - How to declare and manage package dependencies
  • Projects - Configuring multiple projects in one workspace