Getting Started

Run with Docker

docker run -p 4747:4747 ghcr.io/skyoo2003/devcloud:latest

To persist data across restarts, mount a local volume:

docker run -p 4747:4747 -v $(pwd)/data:/app/data ghcr.io/skyoo2003/devcloud:latest

Generic resources persist by default alongside service data. To reset local environment data, run devcloud --reset-data. When the admin API is enabled, DELETE /devcloud/api/data performs the same reset via HTTP.

Docker Compose

docker compose -f deployments/docker-compose.yml up

Builds from source and starts the server on port 4747 with ./data mounted. To select specific services, set DEVCLOUD_SERVICES (for example, DEVCLOUD_SERVICES=s3,sqs,dynamodb,iam,sts,lambda). See Configuration for details.

Build from Source

git clone https://github.com/skyoo2003/devcloud.git
cd devcloud
make build   # builds devcloud and codegen binaries
make run     # starts the server on port 4747

Verify Your Setup

All AWS, Azure, and GCP services listen on port 4747.

AWS (boto3)

import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="http://localhost:4747",
    aws_access_key_id="test",
    aws_secret_access_key="test",
    region_name="us-east-1",
)

s3.create_bucket(Bucket="test-bucket")
print(s3.list_buckets()["Buckets"])

AWS CLI

# Configure a local profile
aws configure set aws_access_key_id test --profile devcloud
aws configure set aws_secret_access_key test --profile devcloud
aws configure set region us-east-1 --profile devcloud

# Use the endpoint
aws --endpoint-url http://localhost:4747 --profile devcloud s3 mb s3://test-bucket
aws --endpoint-url http://localhost:4747 --profile devcloud s3 ls

Azure (Python SDK)

from azure.storage.blob import BlobServiceClient

client = BlobServiceClient(
    account_url="http://localhost:4747/devstoreaccount1",
    credential="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
)

container = client.create_container("test-container")
print("Container created:", container.container_name)

GCP (Python SDK)

import os
from google.cloud import storage

os.environ["STORAGE_EMULATOR_HOST"] = "http://127.0.0.1:4747"
client = storage.Client(project="test-project")

bucket = client.create_bucket("test-bucket")
print("GCS bucket created:", bucket.name)

Admin API

Opt-in by setting admin.enabled: true in your configuration:

RouteReturns
GET /devcloud/api/servicesService status overview
GET /devcloud/api/services/{id}/resourcesInventory of created resources (buckets, queues, tables, functions)
GET /devcloud/api/logsRecent API request logs (?limit=100)
GET /devcloud/api/fidelityPer-operation fidelity tiers (?service=s3)
GET /devcloud/api/unroutedLog of requests sent to unhandled or unmapped services

Next Steps