What is a Project?
A Suga project is defined by asuga.yaml
file that describes your application’s infrastructure requirements using cloud-agnostic resource types. When combined with a Platform, this specification gets transformed into deployable cloud infrastructure.
Project Structure
Basic Configuration
Every project starts with basic metadata and target platforms:Basic project configuration
- name: Project identifier (used in Terraform stack and resource naming)
- description: Human-readable project description
- targets: List of platforms this project can use for deployments
Resource Types
Projects currently offer four main resource types:- Services - Application containers that handle business logic
- Buckets - Cloud storage for files, images, and other assets
- Entrypoints - HTTP routing and CDN configuration to expose your application
- Databases - Persistent data storage with access controls (currently PostgreSQL only)
Services
Services are your application containers that handle business logic:Service definitions
- Environment variables for configuration
- Container definitions (Dockerfile or pre-built images)
- Development scripts for local testing with the
suga dev
CLI command
Buckets
Buckets provide cloud storage for files, images, and other assets:Bucket definitions
content_path
which, if provided, is used to seed the bucket with files during deployments. This is useful when you want to deploy static website assets, then route to them via an entrypoint.
Entrypoints
Entrypoints expose your application to the internet, typically through CDNs and/or load balancers:Entrypoint definitions
Databases
Databases provide persistent SQL data storage (currently PostgreSQL only):Database definitions
Project Benefits
Deployment-Agnostic Architecture
Projects describe what your application needs, not how it’s implemented:- Portable designs that work across different cloud providers
- Platform independence - switch from one AWS service to another, or to another cloud like GCP without changing your project
- Future-proof architecture that adapts as platforms evolve
Developer Experience
Projects enable smooth local development and deployment workflows:- Local emulation - Test with emulated cloud services on your machine using
suga dev
- Hot reloading - Services restart automatically when code changes
- Environment parity - Same resource relationships locally and in production
Platform Team Control
Projects maintain separation between application architecture and infrastructure implementation:- Governance enforcement - Platform teams control how resources get deployed
- Security policies - Access patterns and configurations managed at the platform level
- Operational consistency - Standardized deployment and monitoring across teams
Project Lifecycle
1. Design Phase
Define your application architecture using the visual editorsuga edit
or by editing suga.yaml
directly:
- Drag and drop resources onto the canvas
- Connect services to storage and databases
- Configure access permissions and routing
- Set environment variables and deployment options
2. Development Phase
Test your project locally with emulated cloud services:- Services run using your
dev.script
commands - Storage operations use local filesystem
- Database connections point to local instances
- HTTP requests route through local entrypoints
3. Build Phase
Generate cloud-specific infrastructure from your project:- Suga combines your project with the target platform specifications
- Terraform stacks are generated for your target platform using pre-built modules
- Resource dependencies and networking get configured automatically