Skip to content
This repository was archived by the owner on Mar 17, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions docs/.vale/styles/config/vocabularies/Suga/accept.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ allowlisting
cdktf
Presigned
presigned
Fargate
subnet
subnets
GPUs
CPUs
serverless
Serverless
autoscaling
geo

# Defaults from mintlify
Mintlify
Expand Down
48 changes: 48 additions & 0 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,54 @@
]
}
]
},
{
"tab": "Plugins",
"icon": "plug",
"groups": [
{
"group": "Plugin Reference",
"pages": ["plugins"]
},
{
"group": "Providers",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They're not really providers, we might want a new name for this grouping/plugin collection. However, this documentation should be clearly noted as the suga plugin library, since it's just the one we provide out of the box, teams are able to make their own privately or share them publicly and those will have/need their own docs.

@tjholm @raksiv this make me think these docs might want to be generated by the platform or something so we can co-locate it with the plugin browser. Let's chat.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could allow a README.md in the plugins and render it in the app. Could call it "Official Plugins" or "Suga Plugins"

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've got it auto generating atm from the manifests which I've updated, thinking about this more over the weekend and the docs are required in the future for plugin configuration reference, but they aren't really required on the docs website as they muddy the water.

"pages": [
{
"group": "AWS",
"icon": "aws",
"pages": [
"plugins/aws",
"plugins/aws/s3",
"plugins/aws/fargate",
"plugins/aws/lambda",
"plugins/aws/cloudfront",
"plugins/aws/loadbalancer",
"plugins/aws/vpc",
"plugins/aws/iamrole"
]
},
{
"group": "GCP",
"icon": "google",
"pages": [
"plugins/gcp",
"plugins/gcp/storage",
"plugins/gcp/cloudrun",
"plugins/gcp/serviceaccount",
"plugins/gcp/cdn"
]
},
{
"group": "Neon",
"icon": "database",
"pages": [
"plugins/neon",
"plugins/neon/database"
]
}
]
}
]
}
],
"global": {
Expand Down
Binary file added docs/images/edit-platform.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions docs/plugins.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: Introduction
description: Official plugins for creating infrastructure platforms
---

Each plugin provides a specific infrastructure capability - like storage, compute, or networking. Compose these plugins to build complete platforms across multiple cloud providers.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Im still super confused about how to actually input these values.


## Official Plugins

<CardGroup cols={3}>
<Card title="AWS" icon="aws" href="/plugins/aws" />
<Card title="GCP" icon="google" href="/plugins/gcp" />
<Card title="Neon" icon="database" href="/plugins/neon" />
</CardGroup>

## Compose Plugins to Build your Platform

1. **Open the Suga editor** to build your platform:

```bash
suga edit
```
Comment on lines +18 to +22
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to use the cli to edit a platform, only to edit a local project. For users who want to create/update a platform they can navigate to https://app.addsuga.com and click the platforms nav item.


2. **Add plugins** into your platform and configure parameters using this reference
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Before this step, we probably want to document creating a platform or finding one to edit.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think a section at the beginning explaining what Platforms, Plugins and Blueprints are would be helpful to setup some context for the reader.


![Platform Edit](/images/edit-platform.png)

<Tip>
Reference outputs from other plugins using `${type.name.output}` syntax, e.g. `${infra.vpc.vpc_id}` or `${databases.main.connection_string}`
</Tip>
Comment on lines +28 to +30
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This tip feels out of context, I think the steps should include creating a new blueprint by dragging a copy of a plugin into the platform, then configuring the blueprint with manually set properties, then finally configuring properties that reference platform variables or variables from other blueprints.


3. **Deploy your platform**:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think "Publish" or "Release" might be more accurate than Deploy in this context.

- Click "Commit revision" in the editor to update your platform
- Update the target in your `suga.yaml` to build terraform using your platform with the plugins that you have composed:

```yaml
targets:
- suga/aws@2
```
Comment on lines +34 to +39
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be a new step, with more explaination in the previous step (a revision is created, note the revision number, then update the suga.yaml with the new revision reference)




53 changes: 53 additions & 0 deletions docs/plugins/aws.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
title: Overview
description: AWS plugins for compute, storage, networking, and identity management.
---

## Available Plugins

### Storage

<CardGroup cols={2}>
<Card title="S3" icon="database" href="/plugins/aws/s3">
Object storage for storing and retrieving data from anywhere
</Card>
</CardGroup>

### Services

<CardGroup cols={2}>
<Card title="Fargate" icon="cube" href="/plugins/aws/fargate">
Run long-running containerized services with automatic scaling
</Card>
<Card title="Lambda" icon="bolt" href="/plugins/aws/lambda">
Run event-driven functions that execute on demand
</Card>
</CardGroup>

### Entrypoints

<CardGroup cols={2}>
<Card title="CloudFront" icon="globe" href="/plugins/aws/cloudfront">
Content Delivery Network for fast, global content delivery
</Card>
</CardGroup>

### Infrastructure

<CardGroup cols={2}>
<Card title="Load Balancer" icon="scale-balanced" href="/plugins/aws/loadbalancer">
Distribute incoming traffic across multiple targets
</Card>
<Card title="VPC" icon="network-wired" href="/plugins/aws/vpc">
Virtual Private Cloud with isolated network and subnets
</Card>
</CardGroup>

### Identity

<CardGroup cols={2}>
<Card title="IAM Role" icon="key" href="/plugins/aws/iamrole">
Identity and Access Management role for secure access to AWS services
</Card>
</CardGroup>

62 changes: 62 additions & 0 deletions docs/plugins/aws/cloudfront.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
title: CloudFront
description: Content Delivery Network for fast, global content delivery
---

## Configuration

<ParamField path="custom_domain" type="string">
Custom domain name for CloudFront distribution

**Example:** `cdn.example.com`
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would really love these examples to be expanded showing where and how I can input them. Who can adjust them, how it would work for multiple environments or multiple apps on their own domains etc. As is I am really confused how to make use of this

</ParamField>

<ParamField path="custom_domain_is_root" type="bool" default="false">
Indicates if the custom domain is the root domain for the purposes of hosted zone lookup and record creation
</ParamField>

<ParamField path="default_cache_policy_id" type="string">
Default cache policy for CloudFront distribution

**Example:** `658327ea-f89d-4fab-a63d-7e88639e58f6`
</ParamField>

<ParamField path="default_origin_request_policy_id" type="string" default="b689b0a8-53d0-40ab-baf2-68738e2966ac">
Default origin request policy

**Example:** `b689b0a8-53d0-40ab-baf2-68738e2966ac`
</ParamField>

<ParamField path="geo_restriction_locations" type="list(string)">
List of ISO 3166-1 alpha-2 country codes for geo restriction

**Example:** `["US", "CA", "GB"]`
</ParamField>

<ParamField path="geo_restriction_type" type="string" default="none">
Type of geo restriction (none, whitelist, blacklist)

**Example:** `none`
</ParamField>

<ParamField path="rate_limit_enabled" type="bool" default="true">
Enable rate limiting rules for DDoS protection

**Example:** `True`
</ParamField>

<ParamField path="rate_limit_requests_per_5min" type="number" default="2000">
Maximum requests per 5-minute period per IP

**Example:** `2000`
</ParamField>

<ParamField path="waf_enabled" type="bool" default="false">
Enable AWS WAF for CloudFront distribution
</ParamField>

<ParamField path="waf_managed_rules" type="list(object)">
List of AWS Managed Rule Groups to enable

**Example:** `[{"name": "AWSManagedRulesCommonRuleSet", "priority": 10, "override_action": "none"}, {"name": "AWSManagedRulesKnownBadInputsRuleSet", "priority": 20, "override_action": "none"}]`
</ParamField>
60 changes: 60 additions & 0 deletions docs/plugins/aws/fargate.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
title: Fargate
description: Run long-running containerized services with automatic scaling
---

## Configuration

<ParamField path="alb_arn" type="string" required>
ARN of the Application Load Balancer

**Example:** `arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-alb/50dc6c495c0c9188`
</ParamField>

<ParamField path="alb_security_group" type="string">
Security group ID of the Application Load Balancer

**Example:** `sg-0123456789abcdef0`
</ParamField>

<ParamField path="container_port" type="number" required>
Port number the container exposes

**Example:** `8080`
</ParamField>

<ParamField path="cpu" type="number" default="256">
CPU units for the Fargate task (256, 512, 1024, etc.)

**Example:** `256`
</ParamField>

<ParamField path="environment" type="map(string)">
Environment variables for the container

**Example:** `{"NODE_ENV": "production", "LOG_LEVEL": "info"}`
</ParamField>

<ParamField path="memory" type="number" default="512">
Memory in MB for the Fargate task

**Example:** `512`
</ParamField>

<ParamField path="security_groups" type="list(string)">
List of security group IDs for the Fargate service

**Example:** `["sg-0123456789abcdef0"]`
</ParamField>

<ParamField path="subnets" type="list(string)">
List of subnet IDs for the Fargate service

**Example:** `["subnet-12345678", "subnet-87654321"]`
</ParamField>

<ParamField path="vpc_id" type="string">
VPC ID where the Fargate service will run

**Example:** `vpc-12345678`
</ParamField>
18 changes: 18 additions & 0 deletions docs/plugins/aws/iamrole.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: IAM Role
description: Identity and Access Management role for secure access to AWS services
---

## Configuration

<ParamField path="trusted_actions" type="list(string)">
List of trusted actions for the assume role policy

**Example:** `["sts:AssumeRole"]`
</ParamField>

<ParamField path="trusted_services" type="list(string)">
List of AWS services that can assume this role

**Example:** `["lambda.amazonaws.com", "ecs-tasks.amazonaws.com"]`
</ParamField>
54 changes: 54 additions & 0 deletions docs/plugins/aws/lambda.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: Lambda
description: Run event-driven functions that execute on demand
---

## Configuration

<ParamField path="architecture" type="string" default="x86_64">
Instruction set architecture for the Lambda function (x86_64 or arm64)

**Example:** `x86_64`
</ParamField>

<ParamField path="environment" type="map(string)">
Environment variables for the Lambda function

**Example:** `{"NODE_ENV": "production", "LOG_LEVEL": "info"}`
</ParamField>

<ParamField path="ephemeral_storage" type="number" default="1024">
Size of ephemeral storage in MB (512-10240)

**Example:** `1024`
</ParamField>

<ParamField path="function_url_auth_type" type="string" default="AWS_IAM">
Authorization type for function URL (AWS_IAM or NONE)

**Example:** `AWS_IAM`
</ParamField>

<ParamField path="memory" type="number" default="1024">
Amount of memory in MB (128-10240)

**Example:** `1024`
</ParamField>

<ParamField path="security_group_ids" type="list(string)">
List of security group IDs for VPC configuration

**Example:** `["sg-0123456789abcdef0"]`
</ParamField>

<ParamField path="subnet_ids" type="list(string)">
List of subnet IDs for VPC configuration

**Example:** `["subnet-12345678", "subnet-87654321"]`
</ParamField>

<ParamField path="timeout" type="number" default="300">
Maximum execution time in seconds (1-900)

**Example:** `300`
</ParamField>
Loading