Visitar URL original
GitHub - floci-io/floci-ui: Any Cloud. Locally - Web Console for the local Cloud (AWS, Azure, GCP and OCI) · GitHub
Skip to content
floci-ioPublic

About

Any Cloud. Locally - Web Console for the local Cloud (AWS, Azure, GCP and OCI)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

441 stars

Watchers

3 watching

Forks

Repository files navigation

Floci UI Floci UI

Any Cloud. Locally.
The web console for Floci: browse and manage AWS, Azure, GCP and OCI resources on your machine.

Latest Release CI Status Docker Pulls Docker Image Size License: MIT

Quick Start · Features · Services · Architecture · Development · Troubleshooting

Floci UI console


What is Floci UI?

A Web UI for the Floci local emulators. It emulates nothing itself: the API turns the UI's requests into real cloud-SDK calls against the runtimes you already run, and the UI shows only what they return. No demo rows, no mock metrics, real empty states.

Emulator Cloud Port
floci AWS 4566
floci-az Azure 4577
floci-gcp GCP 4588
floci-oci OCI 4599

Quick Start

docker compose up                              # AWS only
docker compose --profile multicloud up         # AWS + Azure + GCP + OCI

Open http://localhost:4500.

Other ways to run it

From Floci itself. Floci starts the console on demand at http://localhost:4566/_floci/ui (needs the Docker socket mounted; see the Floci docs).

Podman. floci mounts the host container socket to start Lambda and Postgres containers, and rootless Podman has no /var/run/docker.sock. Point the mount at Podman's Docker-compatible socket in a .env file:

echo "FLOCI_CONTAINER_SOCKET=$XDG_RUNTIME_DIR/podman/podman.sock" >> .env
podman-compose up

Without it, up aborts with statfs /var/run/docker.sock: no such file or directory and no service starts.

Single image, UI and API on one port:

docker run -p 4500:4500 -e FLOCI_ENDPOINT=http://host.docker.internal:4566 floci/floci-ui

Features

  • One console, four clouds. Pick the cloud in Settings; the nav is built from what each runtime supports.
  • Generic Cloud Explorer. List, search, create, inspect (Plain Text, JSON and Table views) and delete, with multi-select and bulk delete. Every service renders from a schema.
  • Honest availability. A service without an adapter, or one the runtime cannot serve yet, is a disabled row with the reason in its tooltip.
  • Rich workspaces where a flat form is not enough:
Area What you get
Storage Object browser with prefixes, upload, download, copy, delete
Databases DynamoDB, Cosmos DB and Azure SQL / PostgreSQL data explorers with a query editor; RDS update and snapshots
Compute EC2 launch, power actions, AMIs, tags, console output; EKS nodegroups and Fargate profiles; Lambda invoke with tailed logs
Networking VPC wizard, subnets, security groups, gateways, route tables, Elastic IPs
Messaging SQS send, receive and purge
Workflows and logs Step Functions execution history; CloudWatch Logs streams, events and Logs Insights
Security Secrets (reveal on demand), KMS encrypt and decrypt, IAM users, roles and policies
Email SES mailbox with HTML, text and raw MIME preview
Settings Light, dark or system theme; account switcher

Supported Services

Generated from the service catalog and adapter registry, so it never drifts. After changing either, run cd packages/api && bun run scripts/service-matrix.ts.

Group Service AWS Azure GCP OCI
Compute Compute ✅ ✅ – –
Compute k8s Engine 👁 👁 ✅ ✅
Compute Serverless ✅ ✅ ✅ ✅
Compute Containers – – ✅ –
Compute SageMaker AI ✅ – – –
Storage Storage ✅ ✅ ✅ ✅
Storage Table Storage – ✅ – –
Databases Database ✅ ✅ ✅ –
Databases NoSQL ✅ ✅ ✅ –
Networking Networking 👁 ✅ – –
Networking Load Balancing ✅ – – –
Integration Messaging ✅ ✅ ✅ ✅
Integration API Gateway ✅ – – –
Integration SNS ✅ – – –
Integration Queue Storage – ✅ – –
Integration Streams ✅ ✅ – ✅
Integration Events ✅ – – –
Integration Email 👁 – – –
Integration Cloud Scheduler – – ✅ –
Integration Workflows ✅ – – –
Provisioning Infrastructure as Code ✅ – – –
Provisioning Configuration ✅ – – –
Security Identity ✅ – – ✅
Security Cognito ✅ – – –
Security Secrets Manager ✅ ✅ ✅ ✅
Security Key Management ✅ – – ✅
Security Parameter Store ✅ – – –
Observability Logs ✅ – – –
Observability CloudWatch ✅ – – –

✅ list, inspect, create, delete · 👁 read-only or partial · ⏳ adapter registered, runtime gap · – not available

Known runtime gaps (the adapter is ready, the emulator is not):

  • RDS CreateDBSnapshot: Floci answers 501; listing works.
  • AKS clusters never leave Failed locally, so AKS stays read-only.

Adding a service is a catalog row, a schema and an adapter, with no frontend change. See AGENTS.md.

Azure console home with services grouped by category

Architecture

floci-unified-ui-architecture.png

Browser → /api/clouds/* → Cloud Adapter Registry → provider adapter → local runtime

The UI knows no cloud, the proxy knows no implementation, adapters translate, runtimes execute. Code lives in packages/api (Bun, Hono, AWS SDK v3) and packages/frontend (React, Vite).

Development

Requires Node 22.22+ or 24.15+, pnpm 9+, Bun, and a running Floci (docker compose up floci is enough).

pnpm install
cp .env.example packages/api/.env
pnpm dev                 # UI :4500 + API :4501

Before opening a PR:

pnpm lint && pnpm type-check && pnpm test && pnpm build

Frontend e2e tests use mocked /api/* and need no emulator: pnpm --filter @floci/frontend test:e2e.

Configuration

Set in packages/api/.env (defaults shown).

Variable Default
FLOCI_ENDPOINT http://localhost:4566
FLOCI_AZURE_ENDPOINT http://localhost:4577
FLOCI_GCP_ENDPOINT http://localhost:4588
FLOCI_OCI_ENDPOINT http://localhost:4599
FLOCI_AZURE_ACCOUNT_NAME / _SUBSCRIPTION_ID / _RESOURCE_GROUP devstoreaccount1 / 00000000-0000-0000-0000-000000000000 / floci-local
FLOCI_GCP_PROJECT / _LOCATION floci-local / us-central1
FLOCI_OCI_REGION us-ashburn-1
FLOCI_OCI_TENANCY_ID Floci-OCI's built-in tenancy
FLOCI_OCI_NAMESPACE unset, discovered from the runtime
FLOCI_DEFAULT_ACCOUNT_ID 000000000000
AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY us-east-1, test, test
PORT 4501
CORS_ALLOWED_ORIGINS http://localhost:4500

CORS_ALLOWED_ORIGINS is a comma separated allow-list. It only gates the Secrets Manager routes and KMS encrypt and decrypt; the console reaches the API same-origin and does not need it.

Troubleshooting

Symptom Fix
ECONNREFUSED on /api/* The API is down. Run pnpm dev:api, then curl localhost:4501/api/clouds.
EADDRINUSE on 4501 Another API is running. Stop it first.
Cloud shows Not connected Check the runtime: curl localhost:4566/_floci/health (Azure :4577/_floci/health, GCP :4588/_floci-gcp/health, OCI :4599/_floci-oci/health), then curl localhost:4501/api/clouds/<cloud>/status.
One service is unavailable curl "localhost:4501/api/clouds/<cloud>/status?services=all". errorCode tells you why: operation_not_implemented (the runtime lacks it), runtime_unavailable (unreachable), operation_not_supported (no adapter).
AWS auth errors Keep AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY as test, matching the runtime.

Contributing

Read CONTRIBUTING.md and AGENTS.md. Prefer the Cloud Explorer and generic SPI over new pages, keep placeholders explicit, and update this README when the visible surface changes.

Community

floci-dash is a community AWS dashboard on Cloudscape with an EC2 web terminal (AWS only). Built something for Floci? Open a PR to list it.

License

MIT, part of the Floci ecosystem.

About

Any Cloud. Locally - Web Console for the local Cloud (AWS, Azure, GCP and OCI)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

441 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Contributors

Languages