# Specific

Infrastructure-as-code designed for coding agents. Define your infrastructure in `specific.hcl` alongside your application code. This will define how to build, deploy and run the full system in production, but also how to run it in development. Specific is fully generic and works with any programming language and framework without any SDKs. We use environments variables to pass information to the code.

This documentation is nested and references to other docs are in Markdown link format. Run `specific docs [PATH]` to read a docs page.

## Workflow

1. Create or edit `specific.hcl` in the project root
2. ALWAYS run `specific check` to validate configuration and fix any issues
3. Run yourself or instruct the user to run `specific exec [SERVICE] --- [COMMAND]` for one-off commands that need to be run in development, like database migrations or seeding. The command will be run with databases and other services started and env vars injected.

A full development environment can be started with `specific dev`. To deploy any changes, the user can run `specific deploy`.

## Topics

- [Services](/services): define how to build, deploy and run the code in this project as services, both in development and production.
- [Secrets and configuration](/secrets-config): define secrets and configuration variables that the user may or should provide. These can be injected into services through environment variables.
- [Postgres](/postgres): define managed PostgreSQL databases that services depend on.
<!-- beta:reshape -->
- [Reshape](/postgres/reshape): zero-downtime database schema migrations.
<!-- /beta:reshape -->
- [Sync](/sync): define real-time, partial synchronisation out of PostgreSQL into frontends or other services. Should be used to implement real-time and collaborative apps.
- [Storage](/storage): define S3-compatible object/blob storage for services to store files in.
- [Redis](/redis): define non-durable Redis-compatible databases for caching and more.
- [Volumes](/volumes): define persistent storage volumes for services to store files in.
<!-- beta:temporal -->
- [Temporal](/temporal): managed durable workflow engine for background tasks, AI agents, cron jobs and more.
<!-- /beta:temporal -->
<!-- beta:mail -->
- [Mail](/mail): managed email sending via SMTP for transactional emails.
<!-- /beta:mail -->

## Common integrations

The following is a list of common frameworks and libraries with guidance on how to use them with Specific:

- [Python](/integrations/python): Flask, FastAPI, Django, and other Python frameworks
- [Next.js](/integrations/nextjs): full-stack React framework
- [Drizzle ORM](/integrations/drizzle): TypeScript ORM with type safety
- [Prisma](/integrations/prisma): TypeScript ORM with auto-generated client
- [Temporal](/integrations/temporal): durable workflow engine for background tasks, AI agents, cron jobs, batch jobs and more

## Adding Specific to existing projects / migrating to Specific

When adding Specific to an existing codebase, explore the codebase in detail to figure out what infrastructure components is needed. In particular:

- Find ALL secrets and config variables, make sure they are read from environment variables and define them in `specific.hcl`. If a `.env` file exists, guide the user to move that into local Specific configuration instead.

### Common migrations

If the codebase uses any of the following technologies, read the migration guides linked:

- [Supabase](/migrations/supabase)
