From 1ea0cc36c49425771ba1b0aefbd2217a799a5e3c Mon Sep 17 00:00:00 2001 From: edmondshtogu Date: Fri, 17 Jul 2026 17:54:19 +0200 Subject: [PATCH 1/5] docs: add floci integration documentation Issue: https://github.com/floci-io/floci/issues/1242 Integration: https://github.com/CommunityToolkit/Aspire/pull/1448 --- .../config/sidebar/integrations.topics.ts | 1 + src/frontend/src/assets/icons/floci.svg | 41 ++ .../src/components/IntegrationGrid.astro | 2 + .../docs/integrations/compute/floci.mdx | 439 ++++++++++++++++++ .../src/data/aspire-integrations.json | 20 +- src/frontend/src/data/integration-docs.json | 4 + 6 files changed, 506 insertions(+), 1 deletion(-) create mode 100644 src/frontend/src/assets/icons/floci.svg create mode 100644 src/frontend/src/content/docs/integrations/compute/floci.mdx diff --git a/src/frontend/config/sidebar/integrations.topics.ts b/src/frontend/config/sidebar/integrations.topics.ts index 9003ee9e4..ddf243963 100644 --- a/src/frontend/config/sidebar/integrations.topics.ts +++ b/src/frontend/config/sidebar/integrations.topics.ts @@ -868,6 +868,7 @@ export const integrationTopics: StarlightSidebarTopicsUserConfig = { }, items: [ { label: 'Docker', slug: 'integrations/compute/docker' }, + { label: 'Floci', slug: 'integrations/compute/floci' }, { label: 'Kubernetes', slug: 'integrations/compute/kubernetes' }, ], }, diff --git a/src/frontend/src/assets/icons/floci.svg b/src/frontend/src/assets/icons/floci.svg new file mode 100644 index 000000000..6d26ba35b --- /dev/null +++ b/src/frontend/src/assets/icons/floci.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/frontend/src/components/IntegrationGrid.astro b/src/frontend/src/components/IntegrationGrid.astro index aaa94bd64..55d8536fc 100644 --- a/src/frontend/src/components/IntegrationGrid.astro +++ b/src/frontend/src/components/IntegrationGrid.astro @@ -42,6 +42,7 @@ import denoLightIcon from '@assets/icons/deno-light-icon.png'; import devTunnelsIcon from '@assets/icons/dev-tunnels-icon.svg'; import dockerIcon from '@assets/icons/docker.svg'; import elasticIcon from '@assets/icons/elastic-icon.png'; +import flociIcon from '@assets/icons/floci.svg'; import flagDIcon from '@assets/icons/flagd-icon.svg'; import flagDLightIcon from '@assets/icons/flagd-light-icon.svg'; import garnetIcon from '@assets/icons/garnet-icon.png'; @@ -181,6 +182,7 @@ const icons = [ { meta: devTunnelsIcon, alt: 'Dev Tunnels', search: 'devtunnels' }, { meta: dockerIcon, alt: 'Docker', search: 'docker' }, { meta: elasticIcon, alt: 'Elasticsearch', search: 'elasticsearch' }, + { meta: flociIcon, alt: 'Floci', search: 'floci aws' }, { meta: flagDIcon, alt: 'flagd', search: 'flagd', light: flagDLightIcon }, { meta: garnetIcon, alt: 'Garnet', search: 'garnet' }, { meta: goIcon, alt: 'Go', search: 'golang gofeature', light: goLightIcon }, diff --git a/src/frontend/src/content/docs/integrations/compute/floci.mdx b/src/frontend/src/content/docs/integrations/compute/floci.mdx new file mode 100644 index 000000000..447a578ce --- /dev/null +++ b/src/frontend/src/content/docs/integrations/compute/floci.mdx @@ -0,0 +1,439 @@ +--- +title: Floci integration +seoTitle: Aspire Floci integration for AWS emulation +description: Learn how to use the Aspire Floci hosting integration to emulate AWS services locally in your development environment. +--- + +import { Image } from 'astro:assets'; +import { Aside, Tabs, TabItem } from '@astrojs/starlight/components'; +import flociIcon from '@assets/icons/floci.svg'; + +Floci logo + +The Aspire Floci hosting integration enables you to model Floci as a container resource in your Aspire application. Floci is a high-performance AWS emulator that runs as a container and supports 65+ AWS services. This integration simplifies local AWS service development and testing without requiring actual cloud resources. It supports: + +- Running Floci as a containerized AWS emulator in your Aspire application +- Automatic environment variable injection for dependent services to connect to AWS services +- Customizable port, region, and AWS account ID configuration +- Data persistence with volume mounting +- Advanced features like TLS encryption and custom configuration files +- Health checks for container readiness + +## Installation + +To start building an Aspire app that uses Floci, install the [📦 CommunityToolkit.Aspire.Hosting.Floci](https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Floci) NuGet package: + + + + +```bash title="Terminal" +aspire add floci +``` + +Or, choose a manual installation approach: + +```csharp title="AppHost.cs" +#:package CommunityToolkit.Aspire.Hosting.Floci@* +``` + +```xml title="AppHost.csproj" + +``` + + + + +```bash title="Terminal" +aspire add floci +``` + +This updates your `aspire.config.json` with the Floci hosting integration package: + +```json title="aspire.config.json" ins={3} +{ + "packages": { + "CommunityToolkit.Aspire.Hosting.Floci": "*" + } +} +``` + + + + +### Add Floci resource + +The following example demonstrates how to add a Floci resource to your app model: + + + +```csharp title="AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var floci = builder.AddFloci("floci"); + +var api = builder.AddProject("api") + .WithReference(floci) + .WaitFor(floci); + +builder.Build().Run(); +``` + + +```typescript title="apphost.mts" twoslash +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const floci = await builder.addFloci('floci'); + +const apiService = await builder.addProject('api', '../Api/Api.csproj') + .withReference(floci) + .waitFor(floci); + +await builder.build().run(); +``` + + + +The preceding code: + +- Creates a Floci container resource named `floci` +- Adds an API service project that references the Floci service +- Uses `WaitFor` to ensure Floci is ready before starting the API service +- Automatically configures AWS environment variables in the API service + +### Configure Floci resource properties + +You can customize the Floci container with various configuration options: + + + +```csharp title="AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var floci = builder.AddFloci("floci", options => +{ + options.Port = 14566; + options.DefaultRegion = "eu-west-1"; + options.DefaultAccountId = "123456789012"; +}); + +var api = builder.AddProject("api") + .WithReference(floci); + +builder.Build().Run(); +``` + + +```typescript title="apphost.mts" twoslash +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const floci = await builder.addFloci('floci', { + port: 14566, + defaultRegion: 'eu-west-1', + defaultAccountId: '123456789012', +}); + +const api = await builder.addProject('api', '../Api/Api.csproj') + .withReference(floci); + +await builder.build().run(); +``` + + + +Key configuration options: + +- **Port**: The port on which Floci listens (default: 4566) +- **Default Region**: AWS region for the emulator (default: `us-east-1`) +- **Default Account ID**: AWS account ID for the emulator (default: `000000000000`) + +### Add data persistence to Floci + +Floci supports two approaches for data persistence: named volumes (recommended) and bind mounts. + +#### Named volume (recommended) + +Named volumes automatically switch Floci from in-memory to persistent mode: + + + +```csharp title="AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var floci = builder.AddFloci("floci") + .WithDataVolume("floci-data"); + +builder.Build().Run(); +``` + + +```typescript title="apphost.mts" +const floci = await builder.addFloci('floci'); +await floci.withDataVolume('floci-data'); +``` + + + +#### Bind mount + +Alternatively, use a bind mount for directory-based storage: + + + +```csharp title="AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var floci = builder.AddFloci("floci") + .WithBindMount("./floci-data", "/tmp/floci-data"); + +builder.Build().Run(); +``` + + +```typescript title="apphost.mts" +const floci = await builder.addFloci('floci'); +await floci.withDataBindMount('/tmp/floci-data'); +``` + + + +This configuration: + +- Persists AWS resource state across container restarts +- Allows local inspection of stored state in the volume or mounted directory + +### Use AWS SDK to interact with Floci + +Once Floci is running and referenced by your service, you can use the AWS SDK to interact with emulated services. The `WithReference` method automatically injects the necessary AWS environment variables: + + + +```csharp title="Service.cs" +using Amazon.S3; +using Amazon.S3.Model; + +public class StorageService +{ + private readonly IAmazonS3 _s3Client; + + public StorageService(IAmazonS3 s3Client) + { + _s3Client = s3Client; + } + + public async Task CreateBucketAsync(string bucketName) + { + await _s3Client.PutBucketAsync(new PutBucketRequest + { + BucketName = bucketName + }); + } + + public async Task UploadObjectAsync(string bucketName, string key, Stream stream) + { + await _s3Client.PutObjectAsync(new PutObjectRequest + { + BucketName = bucketName, + Key = key, + InputStream = stream + }); + } +} +``` + + + +### Enable Lambda and container-backed services + +Floci requires access to the Docker socket to launch sibling containers for Lambda and other container-backed services: + + + +```csharp title="AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var floci = builder.AddFloci("floci") + .WithDockerSocket(); + +var api = builder.AddProject("api") + .WithReference(floci); + +builder.Build().Run(); +``` + + +```typescript title="apphost.mts" +const floci = await builder.addFloci('floci'); +await floci.withDockerSocket(); + +const api = await builder.addProject('api', '../Api/Api.csproj') + .withReference(floci); + +await builder.build().run(); +``` + + + +On non-standard Docker installations (e.g., Podman, Rancher Desktop), pass the socket path explicitly: + + + +```csharp title="AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var floci = builder.AddFloci("floci") + .WithDockerSocket("/run/user/1000/podman/podman.sock"); + +var api = builder.AddProject("api") + .WithReference(floci); + +builder.Build().Run(); +``` + + +```typescript title="apphost.mts" +const floci = await builder.addFloci('floci'); +await floci.withDockerSocket({ + socketPath: '/run/user/1000/podman/podman.sock' +}); + +const api = await builder.addProject('api', '../Api/Api.csproj') + .withReference(floci); + +await builder.build().run(); +``` + + + +### Quarkus configuration + +Mount a custom `application.yml` to tune any Floci setting that doesn't have a dedicated extension method. The file is injected read-only at `/deployments/config/application.yml`: + + + +```csharp title="AppHost.cs" +var floci = builder.AddFloci("floci") + .WithConfigFile("./floci.yml"); +``` + + +```typescript title="apphost.mts" +const floci = await builder.addFloci('floci'); +await floci.withConfigFile('./floci.yml'); +``` + + + +Example `floci.yml`: + +```yaml title="floci.yml" +floci: + auth: + validate-signatures: false +quarkus: + log: + level: DEBUG +``` + +### TLS/HTTPS support + +Use the standard Aspire `WithHttpsDeveloperCertificate()` API to enable TLS. The integration automatically configures `FLOCI_TLS_ENABLED`, `FLOCI_TLS_CERT_PATH`, and `FLOCI_TLS_KEY_PATH`: + + + +```csharp title="AppHost.cs" +var floci = builder.AddFloci("floci") + .WithHttpsDeveloperCertificate(); +``` + + +```typescript title="apphost.mts" +const floci = await builder.addFloci('floci'); +await floci.withHttpsDeveloperCertificate(); +``` + + + +When TLS is enabled, the `AWS_ENDPOINT_URL` automatically switches to the `https://` scheme. Run `aspire certs trust` once to add the Aspire development certificate to your system trust store. + +You can also bring your own PEM certificate: + + + +```csharp title="AppHost.cs" +var cert = X509Certificate2.CreateFromPemFile("/certs/floci.crt", "/certs/floci.key"); + +var floci = builder.AddFloci("floci") + .WithHttpsCertificate(cert); +``` + + + +## Environment variables + +When a service references a Floci resource using `WithReference`, the following environment variables are automatically injected: + +| Variable | Value | +|----------|-------| +| `ConnectionStrings__floci` | `http://localhost:{port}` (standard Aspire connection string) | +| `AWS_ENDPOINT_URL` | `http://localhost:{port}` (host processes) / `http://host.docker.internal:{port}` (containers) | +| `AWS_DEFAULT_REGION` | Region passed to `AddFloci` (default: `us-east-1`) | +| `AWS_ACCESS_KEY_ID` | `test` | +| `AWS_SECRET_ACCESS_KEY` | `test` | + +You can override any of these settings via standard Aspire environment variable configuration. All Floci-specific settings can also be set via `FLOCI_`-prefixed environment variables. + +## Integration testing + +Floci is ideal for integration testing AWS-dependent code without requiring cloud credentials or incurring costs. Since Floci is managed as an Aspire resource, you can use it in integration tests the same way you use other Aspire resources. + +## Supported AWS services + +Floci supports 65+ AWS services including: + +- **Storage**: S3, DynamoDB, EBS +- **Compute**: Lambda, EC2 +- **Messaging**: SQS, SNS, Kinesis +- **Databases**: RDS, DynamoDB +- **Other services**: CloudFormation, CloudWatch, IAM, and many more + +For a complete list of supported services, visit the [Floci documentation](https://floci.io). + +## Troubleshooting + +### Container fails to start + +- Ensure Docker is running and has sufficient resources +- Check that the specified port isn't already in use +- Verify the Floci container image is available locally or can be pulled from Docker Hub + +### Connection refused errors + +- Verify the Floci container is running: `docker ps | grep floci` +- Check that the endpoint URL matches the configured port +- Ensure the service has the correct `WithReference` to the Floci resource + +### Data persistence issues + +- Verify the bind mount directory has the correct permissions +- Check that the host path exists before starting the container +- Use absolute paths for bind mounts to avoid path resolution issues + +## See also + +- [Floci documentation](https://floci.io) +- [Floci GitHub repository](https://github.com/floci-io/floci) +- [AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/) +- [Aspire Hosting documentation](/architecture/overview/) +- [CommunityToolkit.Aspire.Hosting.Floci GitHub](https://github.com/CommunityToolkit/Aspire) +- [CommunityToolkit.Aspire.Hosting.Floci NuGet package](https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Floci) diff --git a/src/frontend/src/data/aspire-integrations.json b/src/frontend/src/data/aspire-integrations.json index 4340b7579..60d703389 100644 --- a/src/frontend/src/data/aspire-integrations.json +++ b/src/frontend/src/data/aspire-integrations.json @@ -2107,6 +2107,24 @@ "downloads": 16156, "version": "13.4.0" }, + { + "title": "CommunityToolkit.Aspire.Hosting.Floci", + "description": "An Aspire integration for Floci, a high-performance AWS emulator supporting 65+ AWS services.", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.floci/13.4.0-preview.1.260717/icon", + "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Floci", + "tags": [ + "aspire", + "integration", + "communitytoolkit", + "dotnetcommunitytoolkit", + "hosting", + "floci", + "aws", + "emulator" + ], + "downloads": 0, + "version": "13.4.0-preview.1.260717" + }, { "title": "CommunityToolkit.Aspire.Hosting.Flyway", "description": "An Aspire integration for Flyway database migration tool.", @@ -2860,4 +2878,4 @@ "downloads": 18433, "version": "13.4.0" } -] \ No newline at end of file +] diff --git a/src/frontend/src/data/integration-docs.json b/src/frontend/src/data/integration-docs.json index e7c67f277..4bd67f202 100644 --- a/src/frontend/src/data/integration-docs.json +++ b/src/frontend/src/data/integration-docs.json @@ -403,6 +403,10 @@ "match": "CommunityToolkit.Aspire.Hosting.Flagd", "href": "/integrations/devtools/flagd/flagd-get-started/" }, + { + "match": "CommunityToolkit.Aspire.Hosting.Floci", + "href": "/integrations/compute/floci/" + }, { "match": "CommunityToolkit.Aspire.Hosting.GoFeatureFlag", "href": "/integrations/devtools/goff/goff-get-started/" From 10ef25f05720974e5eadba3ad9fc7ee052cb6778 Mon Sep 17 00:00:00 2001 From: edmondshtogu Date: Fri, 17 Jul 2026 18:44:25 +0200 Subject: [PATCH 2/5] chore: enhance floci icons --- .../src/assets/icons/floci-icon-light.svg | 41 +++++++++++++++++++ .../icons/{floci.svg => floci-icon.svg} | 0 .../src/components/IntegrationGrid.astro | 5 ++- .../docs/integrations/compute/floci.mdx | 33 ++++++++++----- 4 files changed, 66 insertions(+), 13 deletions(-) create mode 100644 src/frontend/src/assets/icons/floci-icon-light.svg rename src/frontend/src/assets/icons/{floci.svg => floci-icon.svg} (100%) diff --git a/src/frontend/src/assets/icons/floci-icon-light.svg b/src/frontend/src/assets/icons/floci-icon-light.svg new file mode 100644 index 000000000..70762bd95 --- /dev/null +++ b/src/frontend/src/assets/icons/floci-icon-light.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/frontend/src/assets/icons/floci.svg b/src/frontend/src/assets/icons/floci-icon.svg similarity index 100% rename from src/frontend/src/assets/icons/floci.svg rename to src/frontend/src/assets/icons/floci-icon.svg diff --git a/src/frontend/src/components/IntegrationGrid.astro b/src/frontend/src/components/IntegrationGrid.astro index 55d8536fc..ed1094ede 100644 --- a/src/frontend/src/components/IntegrationGrid.astro +++ b/src/frontend/src/components/IntegrationGrid.astro @@ -42,7 +42,8 @@ import denoLightIcon from '@assets/icons/deno-light-icon.png'; import devTunnelsIcon from '@assets/icons/dev-tunnels-icon.svg'; import dockerIcon from '@assets/icons/docker.svg'; import elasticIcon from '@assets/icons/elastic-icon.png'; -import flociIcon from '@assets/icons/floci.svg'; +import flociIcon from '@assets/icons/floci-icon.svg'; +import flociLightIcon from '@assets/icons/floci-icon-light.svg'; import flagDIcon from '@assets/icons/flagd-icon.svg'; import flagDLightIcon from '@assets/icons/flagd-light-icon.svg'; import garnetIcon from '@assets/icons/garnet-icon.png'; @@ -182,7 +183,7 @@ const icons = [ { meta: devTunnelsIcon, alt: 'Dev Tunnels', search: 'devtunnels' }, { meta: dockerIcon, alt: 'Docker', search: 'docker' }, { meta: elasticIcon, alt: 'Elasticsearch', search: 'elasticsearch' }, - { meta: flociIcon, alt: 'Floci', search: 'floci aws' }, + { meta: flociIcon, alt: 'Floci', search: 'floci aws', light: flociLightIcon }, { meta: flagDIcon, alt: 'flagd', search: 'flagd', light: flagDLightIcon }, { meta: garnetIcon, alt: 'Garnet', search: 'garnet' }, { meta: goIcon, alt: 'Go', search: 'golang gofeature', light: goLightIcon }, diff --git a/src/frontend/src/content/docs/integrations/compute/floci.mdx b/src/frontend/src/content/docs/integrations/compute/floci.mdx index 447a578ce..ca5b3b15a 100644 --- a/src/frontend/src/content/docs/integrations/compute/floci.mdx +++ b/src/frontend/src/content/docs/integrations/compute/floci.mdx @@ -5,17 +5,28 @@ description: Learn how to use the Aspire Floci hosting integration to emulate AW --- import { Image } from 'astro:assets'; -import { Aside, Tabs, TabItem } from '@astrojs/starlight/components'; -import flociIcon from '@assets/icons/floci.svg'; - -Floci logo +import { Aside, Badge, Tabs, TabItem } from '@astrojs/starlight/components'; +import flociIcon from '@assets/icons/floci-icon-light.svg'; + + + +
+ Floci logo +
+ The Aspire Floci hosting integration enables you to model Floci as a container resource in your Aspire application. Floci is a high-performance AWS emulator that runs as a container and supports 65+ AWS services. This integration simplifies local AWS service development and testing without requiring actual cloud resources. It supports: From 1422e367c35eb43c7a174ff1953baaf4d6bc72e6 Mon Sep 17 00:00:00 2001 From: edmondshtogu Date: Fri, 17 Jul 2026 19:23:19 +0200 Subject: [PATCH 3/5] fix: mdx issues --- src/frontend/src/content/docs/integrations/compute/floci.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/compute/floci.mdx b/src/frontend/src/content/docs/integrations/compute/floci.mdx index ca5b3b15a..27a260285 100644 --- a/src/frontend/src/content/docs/integrations/compute/floci.mdx +++ b/src/frontend/src/content/docs/integrations/compute/floci.mdx @@ -97,7 +97,7 @@ builder.Build().Run(); ``` -```typescript title="apphost.mts" twoslash +```typescript title="apphost.mts" import { createBuilder } from './.aspire/modules/aspire.mjs'; const builder = await createBuilder(); @@ -143,7 +143,7 @@ builder.Build().Run(); ``` -```typescript title="apphost.mts" twoslash +```typescript title="apphost.mts" import { createBuilder } from './.aspire/modules/aspire.mjs'; const builder = await createBuilder(); From 642e64faaf4775af4037a0fa3796974f260ce821 Mon Sep 17 00:00:00 2001 From: edmondshtogu Date: Wed, 22 Jul 2026 19:14:06 +0200 Subject: [PATCH 4/5] docs: add Floci UI web console section and enhance documentation - Add Floci UI web console integration examples for C# and TypeScript - Include customization options for container name and host port - Add note about Floci's built-in UI mechanism vs Aspire resource - Enhance Quarkus configuration section with standard location reference - Add clarification about FLOCI_ prefixed environment variables - Improve TLS/HTTPS section structure with better documentation - Detail port routing behavior for TLS connections --- .../docs/integrations/compute/floci.mdx | 69 +++++++++++++++++-- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/compute/floci.mdx b/src/frontend/src/content/docs/integrations/compute/floci.mdx index 27a260285..5770553fd 100644 --- a/src/frontend/src/content/docs/integrations/compute/floci.mdx +++ b/src/frontend/src/content/docs/integrations/compute/floci.mdx @@ -326,9 +326,64 @@ await builder.build().run(); +### Floci UI web console + +Run the [Floci UI](https://github.com/floci-io/floci-ui) web console alongside the emulator to browse the hosted AWS resources: + + + +```csharp title="AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var floci = builder.AddFloci("floci") + .WithFlociUI(); + +builder.Build().Run(); +``` + + +```typescript title="apphost.mts" +const floci = await builder.addFloci('floci'); +await floci.withFlociUI(); + +await builder.build().run(); +``` + + + +The UI container is added as a child resource of the Floci container and automatically wired to the Floci endpoint. It inherits the region and account ID from `AddFloci` and is excluded from the deployment manifest (local development only). + +Customize the container name or pin the host port: + + + +```csharp title="AppHost.cs" +var floci = builder.AddFloci("floci") + .WithFlociUI(ui => ui.WithHostPort(14500), containerName: "my-floci-ui"); +``` + + +```typescript title="apphost.mts" +const floci = await builder.addFloci('floci'); +await floci.withFlociUI({ + configureContainer: async (ui) => { + await ui.withHostPort({ port: 14500 }); + }, + containerName: 'my-floci-ui', +}); + +await builder.build().run(); +``` + + + + + ### Quarkus configuration -Mount a custom `application.yml` to tune any Floci setting that doesn't have a dedicated extension method. The file is injected read-only at `/deployments/config/application.yml`: +Mount a custom `application.yml` to tune any Floci setting that does not have a dedicated extension method. The file is injected read-only at `/deployments/config/application.yml` — the standard Quarkus Docker config override location: @@ -356,9 +411,13 @@ quarkus: level: DEBUG ``` +All Floci settings can also be set via `FLOCI_`-prefixed environment variables — `WithConfigFile` is only needed for settings that do not have a dedicated extension method. + ### TLS/HTTPS support -Use the standard Aspire `WithHttpsDeveloperCertificate()` API to enable TLS. The integration automatically configures `FLOCI_TLS_ENABLED`, `FLOCI_TLS_CERT_PATH`, and `FLOCI_TLS_KEY_PATH`: +**Aspire development certificate** + +Chain the standard Aspire `WithHttpsDeveloperCertificate()` API directly on the `AddFloci` return value. The integration automatically configures `FLOCI_TLS_ENABLED`, `FLOCI_TLS_CERT_PATH`, and `FLOCI_TLS_KEY_PATH`: @@ -375,9 +434,11 @@ await floci.withHttpsDeveloperCertificate(); -When TLS is enabled, the `AWS_ENDPOINT_URL` automatically switches to the `https://` scheme. Run `aspire certs trust` once to add the Aspire development certificate to your system trust store. +When TLS is enabled, the `AWS_ENDPOINT_URL` automatically switches to the `https://` scheme. Both HTTP and HTTPS connect to the same port (4566); Floci's TLS proxy handles routing based on the connection protocol. Run `aspire certs trust` once to add the Aspire development certificate to your system trust store. + +**Bring-your-own PEM certificate** -You can also bring your own PEM certificate: +Use the standard Aspire `WithHttpsCertificate(cert)` API instead: From 131913101740000e683bedf6740d2a4ac0a0d026 Mon Sep 17 00:00:00 2001 From: edmondshtogu Date: Wed, 22 Jul 2026 23:04:11 +0200 Subject: [PATCH 5/5] feat: add multi-clod docs --- .../docs/integrations/compute/floci.mdx | 450 ++++++++++-------- .../src/data/aspire-integrations.json | 4 +- 2 files changed, 266 insertions(+), 188 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/compute/floci.mdx b/src/frontend/src/content/docs/integrations/compute/floci.mdx index 5770553fd..0cdc64fcb 100644 --- a/src/frontend/src/content/docs/integrations/compute/floci.mdx +++ b/src/frontend/src/content/docs/integrations/compute/floci.mdx @@ -1,7 +1,7 @@ --- title: Floci integration -seoTitle: Aspire Floci integration for AWS emulation -description: Learn how to use the Aspire Floci hosting integration to emulate AWS services locally in your development environment. +seoTitle: Aspire Floci integration for AWS, Azure & GCP +description: Learn how to use the Aspire Floci hosting integration to emulate AWS, Azure, and GCP services locally in your development environment. --- import { Image } from 'astro:assets'; @@ -28,14 +28,21 @@ import flociIcon from '@assets/icons/floci-icon-light.svg'; -The Aspire Floci hosting integration enables you to model Floci as a container resource in your Aspire application. Floci is a high-performance AWS emulator that runs as a container and supports 65+ AWS services. This integration simplifies local AWS service development and testing without requiring actual cloud resources. It supports: +The Aspire Floci hosting integration enables you to model [Floci](https://floci.io) — a family of high-performance local cloud emulators — as container resources in your Aspire application. Floci ships one image per cloud, each API-compatible with its respective provider: -- Running Floci as a containerized AWS emulator in your Aspire application -- Automatic environment variable injection for dependent services to connect to AWS services -- Customizable port, region, and AWS account ID configuration -- Data persistence with volume mounting -- Advanced features like TLS encryption and custom configuration files -- Health checks for container readiness +- **`floci/floci`** — AWS, 65+ services including Lambda, S3, DynamoDB, SQS, and SNS +- **`floci/floci-az`** — Azure, including Blob/Queue/Table Storage, Cosmos DB, Functions, Event Hubs, and Service Bus +- **`floci/floci-gcp`** — GCP, including Pub/Sub, Firestore, Datastore, Storage, Secret Manager, and Cloud Functions + +Every API is available in both C# and TypeScript (polyglot AppHost). It supports: + +- Running any combination of the AWS, Azure, and GCP emulators as container resources in the same Aspire application +- Automatic environment variable injection for dependent services to connect to the emulated cloud +- Customizable port and cloud-specific defaults (region, account ID, project ID) +- Data persistence with named volumes or bind mounts +- Docker-socket access for container-backed services (Lambda, Azure Functions, Cloud Run/Cloud SQL) +- An optional [Floci UI](https://github.com/floci-io/floci-ui) web console, attachable to one or all three clouds at once +- Custom Quarkus configuration files for the AWS emulator ## Installation @@ -45,7 +52,7 @@ To start building an Aspire app that uses Floci, install the [📦 CommunityTool ```bash title="Terminal" -aspire add floci +aspire add communitytoolkit-floci ``` Or, choose a manual installation approach: @@ -62,7 +69,7 @@ Or, choose a manual installation approach: ```bash title="Terminal" -aspire add floci +aspire add communitytoolkit-floci ``` This updates your `aspire.config.json` with the Floci hosting integration package: @@ -78,20 +85,22 @@ This updates your `aspire.config.json` with the Floci hosting integration packag -### Add Floci resource +### Add a Floci resource + +Each cloud has its own dedicated method — `AddFlociAws`/`addFlociAws`, `AddFlociAzure`/`addFlociAzure`, and `AddFlociGcp`/`addFlociGcp` — and each returns its own resource type. Add whichever clouds your app depends on; they can coexist in the same AppHost. -The following example demonstrates how to add a Floci resource to your app model: +**AWS** ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); -var floci = builder.AddFloci("floci"); +var aws = builder.AddFlociAws("floci-aws"); var api = builder.AddProject("api") - .WithReference(floci) - .WaitFor(floci); + .WithReference(aws) + .WaitFor(aws); builder.Build().Run(); ``` @@ -102,75 +111,167 @@ import { createBuilder } from './.aspire/modules/aspire.mjs'; const builder = await createBuilder(); -const floci = await builder.addFloci('floci'); +const aws = await builder.addFlociAws('floci-aws'); -const apiService = await builder.addProject('api', '../Api/Api.csproj') - .withReference(floci) - .waitFor(floci); +const api = await builder.addProject('api', '../Api/Api.csproj') + .withReference(aws) + .waitFor(aws); await builder.build().run(); ``` -The preceding code: +`WithReference(aws)`/`withReference(aws)` uses the standard Aspire connection string injection and automatically injects the AWS environment variables listed in [Environment variables](#environment-variables) into the dependent resource. + +**Azure** + + + +```csharp title="AppHost.cs" +var azure = builder.AddFlociAzure("floci-az"); -- Creates a Floci container resource named `floci` -- Adds an API service project that references the Floci service -- Uses `WaitFor` to ensure Floci is ready before starting the API service -- Automatically configures AWS environment variables in the API service +builder.AddProject("api") + .WithReference(azure) + .WaitFor(azure); +``` + + +```typescript title="apphost.mts" +const azure = await builder.addFlociAzure('floci-az'); -### Configure Floci resource properties +await builder.addProject('api', '../Api/Api.csproj') + .withReference(azure) + .waitFor(azure); +``` + + -You can customize the Floci container with various configuration options: +**GCP** ```csharp title="AppHost.cs" -var builder = DistributedApplication.CreateBuilder(args); +var gcp = builder.AddFlociGcp("floci-gcp", defaultProjectId: "my-project"); -var floci = builder.AddFloci("floci", options => -{ - options.Port = 14566; - options.DefaultRegion = "eu-west-1"; - options.DefaultAccountId = "123456789012"; +builder.AddProject("api") + .WithReference(gcp) + .WaitFor(gcp); +``` + + +```typescript title="apphost.mts" +const gcp = await builder.addFlociGcp('floci-gcp', { + defaultProjectId: 'my-project', }); -var api = builder.AddProject("api") - .WithReference(floci); +await builder.addProject('api', '../Api/Api.csproj') + .withReference(gcp) + .waitFor(gcp); +``` + + -builder.Build().Run(); +### Configure resource properties + +**AWS** accepts a custom region and account ID: + + + +```csharp title="AppHost.cs" +var aws = builder.AddFlociAws("floci-aws", + defaultRegion: "eu-west-1", + defaultAccountId: "123456789012"); ``` ```typescript title="apphost.mts" -import { createBuilder } from './.aspire/modules/aspire.mjs'; - -const builder = await createBuilder(); - -const floci = await builder.addFloci('floci', { - port: 14566, +const aws = await builder.addFlociAws('floci-aws', { defaultRegion: 'eu-west-1', defaultAccountId: '123456789012', }); +``` + + -const api = await builder.addProject('api', '../Api/Api.csproj') - .withReference(floci); +- **Port**: The host port Floci listens on (default: 4566) +- **Default Region**: AWS region for the emulator (default: `us-east-1`) +- **Default Account ID**: AWS account ID for the emulator (default: `000000000000`) -await builder.build().run(); +**GCP** accepts a custom project ID: + + + +```csharp title="AppHost.cs" +var gcp = builder.AddFlociGcp("floci-gcp", + defaultProjectId: "my-project"); +``` + + +```typescript title="apphost.mts" +const gcp = await builder.addFlociGcp('floci-gcp', { + defaultProjectId: 'my-project', +}); ``` -Key configuration options: +- **Port**: The host port Floci listens on (default: 4566) +- **Default Project ID**: GCP project ID for the emulator (default: `floci-local`) -- **Port**: The port on which Floci listens (default: 4566) -- **Default Region**: AWS region for the emulator (default: `us-east-1`) -- **Default Account ID**: AWS account ID for the emulator (default: `000000000000`) +**Azure** only accepts a custom port; there's no region/account/project equivalent to configure. + +### Enable Lambda, Azure Functions, and container-backed services + +Each emulator needs access to the Docker socket to launch sibling containers for its container-backed services (AWS Lambda, Azure Functions, GCP Cloud Run/Cloud SQL). `WithDockerSocket`/`withDockerSocket` works the same way on all three clouds: + + + +```csharp title="AppHost.cs" +var aws = builder.AddFlociAws("floci-aws") + .WithDockerSocket(); + +var azure = builder.AddFlociAzure("floci-az") + .WithDockerSocket(); + +var gcp = builder.AddFlociGcp("floci-gcp") + .WithDockerSocket(); +``` + + +```typescript title="apphost.mts" +const aws = await builder.addFlociAws('floci-aws'); +await aws.withDockerSocket(); + +const azure = await builder.addFlociAzure('floci-az'); +await azure.withDockerSocket(); + +const gcp = await builder.addFlociGcp('floci-gcp'); +await gcp.withDockerSocket(); +``` + + + +On non-standard Docker installations (e.g., Podman, Rancher Desktop), pass the socket path explicitly: + + + +```csharp title="AppHost.cs" +var aws = builder.AddFlociAws("floci-aws") + .WithDockerSocket("/run/user/1000/podman/podman.sock"); +``` + + +```typescript title="apphost.mts" +const aws = await builder.addFlociAws('floci-aws'); +await aws.withDockerSocket({ socketPath: '/run/user/1000/podman/podman.sock' }); +``` + + ### Add data persistence to Floci -Floci supports two approaches for data persistence: named volumes (recommended) and bind mounts. +By default each emulator stores all state in memory. Both persistence approaches are available on all three clouds. #### Named volume (recommended) @@ -179,53 +280,54 @@ Named volumes automatically switch Floci from in-memory to persistent mode: ```csharp title="AppHost.cs" -var builder = DistributedApplication.CreateBuilder(args); - -var floci = builder.AddFloci("floci") +var aws = builder.AddFlociAws("floci-aws") .WithDataVolume("floci-data"); -builder.Build().Run(); +var azure = builder.AddFlociAzure("floci-az") + .WithDataVolume("floci-az-data"); + +var gcp = builder.AddFlociGcp("floci-gcp") + .WithDataVolume("floci-gcp-data"); ``` ```typescript title="apphost.mts" -const floci = await builder.addFloci('floci'); -await floci.withDataVolume('floci-data'); +const aws = await builder.addFlociAws('floci-aws'); +await aws.withDataVolume('floci-data'); + +const azure = await builder.addFlociAzure('floci-az'); +await azure.withDataVolume('floci-az-data'); + +const gcp = await builder.addFlociGcp('floci-gcp'); +await gcp.withDataVolume('floci-gcp-data'); ``` #### Bind mount -Alternatively, use a bind mount for directory-based storage: +Alternatively, use a host bind mount for directory-based storage: ```csharp title="AppHost.cs" -var builder = DistributedApplication.CreateBuilder(args); - -var floci = builder.AddFloci("floci") - .WithBindMount("./floci-data", "/tmp/floci-data"); - -builder.Build().Run(); +var aws = builder.AddFlociAws("floci-aws") + .WithDataBindMount("/path/to/data"); ``` ```typescript title="apphost.mts" -const floci = await builder.addFloci('floci'); -await floci.withDataBindMount('/tmp/floci-data'); +const aws = await builder.addFlociAws('floci-aws'); +await aws.withDataBindMount('/path/to/data'); ``` -This configuration: - -- Persists AWS resource state across container restarts -- Allows local inspection of stored state in the volume or mounted directory +Either approach persists resource state across container restarts and allows local inspection of the stored state. -### Use AWS SDK to interact with Floci +### Use the cloud SDKs to interact with Floci -Once Floci is running and referenced by your service, you can use the AWS SDK to interact with emulated services. The `WithReference` method automatically injects the necessary AWS environment variables: +Once a Floci resource is running and referenced by your service, use the matching cloud SDK as you normally would — `WithReference`/`withReference` injects the environment variables each SDK reads by convention. For example, against the AWS emulator: @@ -264,143 +366,111 @@ public class StorageService -### Enable Lambda and container-backed services +### Floci UI web console -Floci requires access to the Docker socket to launch sibling containers for Lambda and other container-backed services: +Run the [Floci UI](https://github.com/floci-io/floci-ui) web console alongside an emulator to browse its hosted resources. `WithFlociUI`/`withFlociUI` is available on all three cloud resource types: ```csharp title="AppHost.cs" -var builder = DistributedApplication.CreateBuilder(args); - -var floci = builder.AddFloci("floci") - .WithDockerSocket(); - -var api = builder.AddProject("api") - .WithReference(floci); - -builder.Build().Run(); +var floci = builder.AddFlociAws("floci") + .WithFlociUI(); ``` ```typescript title="apphost.mts" -const floci = await builder.addFloci('floci'); -await floci.withDockerSocket(); - -const api = await builder.addProject('api', '../Api/Api.csproj') - .withReference(floci); - -await builder.build().run(); +const floci = await builder.addFlociAws('floci'); +await floci.withFlociUI(); ``` -On non-standard Docker installations (e.g., Podman, Rancher Desktop), pass the socket path explicitly: +Customize the container name or pin the host port: ```csharp title="AppHost.cs" -var builder = DistributedApplication.CreateBuilder(args); - -var floci = builder.AddFloci("floci") - .WithDockerSocket("/run/user/1000/podman/podman.sock"); - -var api = builder.AddProject("api") - .WithReference(floci); - -builder.Build().Run(); +var floci = builder.AddFlociAws("floci") + .WithFlociUI(ui => ui.WithHostPort(14500), containerName: "my-floci-ui"); ``` ```typescript title="apphost.mts" -const floci = await builder.addFloci('floci'); -await floci.withDockerSocket({ - socketPath: '/run/user/1000/podman/podman.sock' +const floci = await builder.addFlociAws('floci'); +await floci.withFlociUI({ + containerName: 'my-floci-ui', + configureContainer: async (ui) => { + await ui.withHostPort({ port: 14500 }); + }, }); - -const api = await builder.addProject('api', '../Api/Api.csproj') - .withReference(floci); - -await builder.build().run(); ``` -### Floci UI web console + + +#### Attach all three clouds to one console -Run the [Floci UI](https://github.com/floci-io/floci-ui) web console alongside the emulator to browse the hosted AWS resources: +A single UI console can attach to any combination of clouds — call `WithFlociUI`/`withFlociUI` on whichever cloud creates the console, then attach the others with `WithPluggedCloud`/`withPluggedCloud`: ```csharp title="AppHost.cs" -var builder = DistributedApplication.CreateBuilder(args); - -var floci = builder.AddFloci("floci") - .WithFlociUI(); +var aws = builder.AddFlociAws("floci-aws"); +var azure = builder.AddFlociAzure("floci-az"); +var gcp = builder.AddFlociGcp("floci-gcp"); -builder.Build().Run(); +aws.WithFlociUI(configureContainer: ui => +{ + ui.WithPluggedCloud(azure); + ui.WithPluggedCloud(gcp); +}); ``` ```typescript title="apphost.mts" -const floci = await builder.addFloci('floci'); -await floci.withFlociUI(); - -await builder.build().run(); -``` - - - -The UI container is added as a child resource of the Floci container and automatically wired to the Floci endpoint. It inherits the region and account ID from `AddFloci` and is excluded from the deployment manifest (local development only). - -Customize the container name or pin the host port: +const aws = await builder.addFlociAws('floci-aws'); +const azure = await builder.addFlociAzure('floci-az'); +const gcp = await builder.addFlociGcp('floci-gcp'); - - -```csharp title="AppHost.cs" -var floci = builder.AddFloci("floci") - .WithFlociUI(ui => ui.WithHostPort(14500), containerName: "my-floci-ui"); -``` - - -```typescript title="apphost.mts" -const floci = await builder.addFloci('floci'); -await floci.withFlociUI({ +await aws.withFlociUI({ configureContainer: async (ui) => { - await ui.withHostPort({ port: 14500 }); + await ui.withPluggedCloudAzure(azure); + await ui.withPluggedCloudGcp(gcp); }, - containerName: 'my-floci-ui', }); - -await builder.build().run(); ``` +The UI container (`floci/floci-ui`) is added as a child resource of whichever cloud resource created it, wired to each attached cloud's endpoint over the container network (`FLOCI_ENDPOINT`/`FLOCI_AZURE_ENDPOINT`/`FLOCI_GCP_ENDPOINT`), and is excluded from the deployment manifest — it's a local development tool only. + -### Quarkus configuration +### Quarkus configuration file (AWS only) -Mount a custom `application.yml` to tune any Floci setting that does not have a dedicated extension method. The file is injected read-only at `/deployments/config/application.yml` — the standard Quarkus Docker config override location: +Mount a custom `application.yml` to tune any Floci setting that does not have a dedicated extension method. The file is injected read-only at `/deployments/config/application.yml` — the standard Quarkus Docker config override location. This is currently only available on the AWS emulator: ```csharp title="AppHost.cs" -var floci = builder.AddFloci("floci") +var floci = builder.AddFlociAws("floci") .WithConfigFile("./floci.yml"); ``` ```typescript title="apphost.mts" -const floci = await builder.addFloci('floci'); +const floci = await builder.addFlociAws('floci'); await floci.withConfigFile('./floci.yml'); ``` -Example `floci.yml`: +Example `floci.yml` that enables debug logging and disables signature validation: ```yaml title="floci.yml" floci: @@ -411,75 +481,80 @@ quarkus: level: DEBUG ``` -All Floci settings can also be set via `FLOCI_`-prefixed environment variables — `WithConfigFile` is only needed for settings that do not have a dedicated extension method. +All Floci settings can also be set via `FLOCI_`-prefixed environment variables — `WithConfigFile`/`withConfigFile` is only needed for settings that don't have a dedicated extension method. -### TLS/HTTPS support +### Connection string / endpoint properties -**Aspire development certificate** - -Chain the standard Aspire `WithHttpsDeveloperCertificate()` API directly on the `AddFloci` return value. The integration automatically configures `FLOCI_TLS_ENABLED`, `FLOCI_TLS_CERT_PATH`, and `FLOCI_TLS_KEY_PATH`: +Available on all three cloud resource types: -```csharp title="AppHost.cs" -var floci = builder.AddFloci("floci") - .WithHttpsDeveloperCertificate(); +```csharp +var endpoint = floci.PrimaryEndpoint; +var host = floci.Host; +var port = floci.Port; +var connectionString = floci.ConnectionStringExpression; ``` -```typescript title="apphost.mts" -const floci = await builder.addFloci('floci'); -await floci.withHttpsDeveloperCertificate(); +```typescript +const endpoint = await floci.primaryEndpoint(); +const host = await floci.host(); +const port = await floci.port(); +const connectionString = await floci.connectionStringExpression(); ``` -When TLS is enabled, the `AWS_ENDPOINT_URL` automatically switches to the `https://` scheme. Both HTTP and HTTPS connect to the same port (4566); Floci's TLS proxy handles routing based on the connection protocol. Run `aspire certs trust` once to add the Aspire development certificate to your system trust store. - -**Bring-your-own PEM certificate** - -Use the standard Aspire `WithHttpsCertificate(cert)` API instead: - - - -```csharp title="AppHost.cs" -var cert = X509Certificate2.CreateFromPemFile("/certs/floci.crt", "/certs/floci.key"); - -var floci = builder.AddFloci("floci") - .WithHttpsCertificate(cert); -``` - - +`connectionStringExpression` resolves to `http://localhost:{port}` for host processes and `http://host.docker.internal:{port}` for container dependents that call `WithReference`/`withReference`. ## Environment variables -When a service references a Floci resource using `WithReference`, the following environment variables are automatically injected: +When a service references a Floci resource using `WithReference`/`withReference`, the following environment variables are automatically injected. + +**AWS** (`ConnectionStrings__` shown as `ConnectionStrings__floci-aws`): | Variable | Value | |----------|-------| -| `ConnectionStrings__floci` | `http://localhost:{port}` (standard Aspire connection string) | +| `ConnectionStrings__floci-aws` | `http://localhost:{port}` (standard Aspire connection string) | | `AWS_ENDPOINT_URL` | `http://localhost:{port}` (host processes) / `http://host.docker.internal:{port}` (containers) | -| `AWS_DEFAULT_REGION` | Region passed to `AddFloci` (default: `us-east-1`) | +| `AWS_DEFAULT_REGION` | Region passed to `AddFlociAws`/`addFlociAws` (default: `us-east-1`) | | `AWS_ACCESS_KEY_ID` | `test` | | `AWS_SECRET_ACCESS_KEY` | `test` | +**Azure** (`ConnectionStrings__` shown as `ConnectionStrings__floci-az`): + +| Variable | Value | +|----------|-------| +| `ConnectionStrings__floci-az` | `http://localhost:{port}` (standard Aspire connection string) | +| `AZURE_STORAGE_CONNECTION_STRING` | Connection string pointed at the Floci Azure endpoint, using the well-known `devstoreaccount1` dev storage account credentials | + +**GCP** (`ConnectionStrings__` shown as `ConnectionStrings__floci-gcp`): + +| Variable | Value | +|----------|-------| +| `ConnectionStrings__floci-gcp` | `http://localhost:{port}` (standard Aspire connection string) | +| `PUBSUB_EMULATOR_HOST` | `localhost:{port}` (host processes) / `host.docker.internal:{port}` (containers) | +| `FIRESTORE_EMULATOR_HOST` | `localhost:{port}` (host processes) / `host.docker.internal:{port}` (containers) | +| `DATASTORE_EMULATOR_HOST` | `localhost:{port}` (host processes) / `host.docker.internal:{port}` (containers) | +| `STORAGE_EMULATOR_HOST` | `http://localhost:{port}` (host processes) / `http://host.docker.internal:{port}` (containers) | +| `SECRET_MANAGER_EMULATOR_HOST` | `localhost:{port}` (host processes) / `host.docker.internal:{port}` (containers) | +| `GOOGLE_CLOUD_PROJECT` | Project ID passed to `AddFlociGcp`/`addFlociGcp` (default: `floci-local`) | +| `CLOUDSDK_CORE_PROJECT` | Same project ID, for tools that read the `gcloud` CLI's config var instead | + You can override any of these settings via standard Aspire environment variable configuration. All Floci-specific settings can also be set via `FLOCI_`-prefixed environment variables. ## Integration testing -Floci is ideal for integration testing AWS-dependent code without requiring cloud credentials or incurring costs. Since Floci is managed as an Aspire resource, you can use it in integration tests the same way you use other Aspire resources. - -## Supported AWS services +Floci is ideal for integration testing cloud-dependent code without requiring real cloud credentials or incurring costs. Since each Floci resource is managed as a standard Aspire resource, you can use it in integration tests the same way you use other Aspire resources. -Floci supports 65+ AWS services including: +## Supported services -- **Storage**: S3, DynamoDB, EBS -- **Compute**: Lambda, EC2 -- **Messaging**: SQS, SNS, Kinesis -- **Databases**: RDS, DynamoDB -- **Other services**: CloudFormation, CloudWatch, IAM, and many more +- **AWS** (`floci/floci`) — 65+ services including S3, DynamoDB, Lambda, EC2, SQS, SNS, Kinesis, RDS, CloudFormation, CloudWatch, IAM, and many more +- **Azure** (`floci/floci-az`) — Blob/Queue/Table Storage, Cosmos DB, Functions, Event Hubs, Service Bus +- **GCP** (`floci/floci-gcp`) — Pub/Sub, Firestore, Datastore, Storage, Secret Manager, Cloud Functions -For a complete list of supported services, visit the [Floci documentation](https://floci.io). +For a complete list of supported services per cloud, visit the [Floci documentation](https://floci.io). ## Troubleshooting @@ -493,7 +568,7 @@ For a complete list of supported services, visit the [Floci documentation](https - Verify the Floci container is running: `docker ps | grep floci` - Check that the endpoint URL matches the configured port -- Ensure the service has the correct `WithReference` to the Floci resource +- Ensure the service has the correct `WithReference`/`withReference` to the Floci resource ### Data persistence issues @@ -505,6 +580,7 @@ For a complete list of supported services, visit the [Floci documentation](https - [Floci documentation](https://floci.io) - [Floci GitHub repository](https://github.com/floci-io/floci) +- [Floci UI GitHub repository](https://github.com/floci-io/floci-ui) - [AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/) - [Aspire Hosting documentation](/architecture/overview/) - [CommunityToolkit.Aspire.Hosting.Floci GitHub](https://github.com/CommunityToolkit/Aspire) diff --git a/src/frontend/src/data/aspire-integrations.json b/src/frontend/src/data/aspire-integrations.json index 2a0ae5017..d88dfbfe7 100644 --- a/src/frontend/src/data/aspire-integrations.json +++ b/src/frontend/src/data/aspire-integrations.json @@ -2222,7 +2222,7 @@ }, { "title": "CommunityToolkit.Aspire.Hosting.Floci", - "description": "An Aspire integration for Floci, a high-performance AWS emulator supporting 65+ AWS services.", + "description": "An Aspire integration for Floci, a family of high-performance local cloud emulators for AWS, Azure, and GCP.", "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.floci/13.4.0-preview.1.260717/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Floci", "tags": [ @@ -2233,6 +2233,8 @@ "hosting", "floci", "aws", + "azure", + "gcp", "emulator" ], "downloads": 0,