Start-up time
about25 ms
Warm start, timed to ready.
Local emulators for AWS, Google Cloud and Azure in one binary, on one port. Starts in about 25 ms, with nothing to sign up for.
One address for every SDK. AWS, Google Cloud, Azure and the console all answer on 7644.
Everything stays on localhost.
eval "$(pogi env)" points every SDK here. 7644 spells “pogi” on a phone keypad.
Fast enough to start a fresh pogi for every test run.
about25 ms
Warm start, timed to ready.
about20,000
DynamoDB PutItem, 8 at a time.
about140 MB
About 64 MB at idle.
about0.1 ms
DynamoDB PutItem, one at a time.
*Apple M5, pogi v0.1.0 release build. How we measured →
Point them at pogi once. Your code stays the same.
181 services across AWS (131), Google Cloud (26) and Azure (24). See coverage
Moving from LocalStack? Point at port 7644, or keep 4566 with pogi start --port 4566. Read the migration guide
Every call, flow and connection, live in your browser at localhost:7644/_pogi/.
Every call your code makes, on every cloud, the moment it happens.
Activity
Every call to every service, newest first.
Each upload is traced end to end, from S3 through Pub/Sub to Azure Blob Storage. One took 6 steps in 19 ms.
Flows 1-6cf92f35-77b34da6a3ce929d0e0e4711
PutObject /photos/uploads/6cf92.jpg
2026-10-13 14:25:14 · 6 steps · 19 ms
Times are per step. The 19 ms runs from the first call to the last step, including the wait between deliveries.
The map draws each cloud's resources and the messages moving between them.
Activity
Every call to every service, newest first.
pogi records what your code calls, writes the smallest IAM (who may do what) policy that allows it, and attaches it. On AWS, Google Cloud and Azure.
Run your code as a real IAM user. pogi records every action it calls and writes the matching policy.
uploader · 5 calls recorded, one identity on each cloud
Turn on strict mode (deny anything not allowed) and calls without a policy fail, with the same AccessDenied error AWS returns.
StrictCalls without an allowing policy fail.
An error occurred (AccessDenied) when calling the PutObject operation: User: arn:aws:iam::000000000000:user/uploader is not authorized to perform: s3:PutObject on resource: arn:aws:s3:::photos/cat.jpg because no identity-based policy allows the s3:PutObject action
Review the policy pogi wrote, then attach it in one step.
{
"Version": "2012-10-17",
"Statement": [
{ "Effect": "Allow", "Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:us-east-1:000000000000:table/orders" },
{ "Effect": "Allow", "Action": "s3:PutObject",
"Resource": "arn:aws:s3:::photos/*" },
{ "Effect": "Allow", "Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:us-east-1:000000000000:thumbnails" }
]
}Attached to user/uploaderas the policy pogi-uploader
The same calls pass. Least privilege, without guessing.
uploader · 5 calls recorded, one identity on each cloud
$13.60
Estimated monthly cost
≈ $0.45 / day · on-demand · no free tier
AWS
$1.73
Google Cloud
$0.63
Azure
$11.24
A real-cloud cost estimate from your resources and traffic.
Throttle, slow down or take out a service to test your retries.
before-tests
Save every resource once, then restore it with one command before each run.
Messages your code sends land in a local inbox, never a real phone.
Nothing to sign up for. Pick your platform and paste.
brew install nrndev/tap/pogipogi startReady.
# In a second terminal.# sets the endpoint and test keyseval "$(pogi env)"aws s3 mb s3://my-bucketmake_bucket: my-bucket
# Debian and Ubuntu; on Arm use arm64. Fedora and RHEL: the .rpm with dnf.curl -LO https://github.com/nrndev/pogi/releases/download/v0.1.0/pogi_0.1.0_linux_amd64.debsudo apt install ./pogi_0.1.0_linux_amd64.deb
pogi startReady.
# In a second terminal.# sets the endpoint and test keyseval "$(pogi env)"aws s3 mb s3://my-bucketmake_bucket: my-bucket
go install github.com/nrndev/pogi/cmd/pogi@latestpogi startReady.
# In a second terminal.# sets the endpoint and test keyseval "$(pogi env)"aws s3 mb s3://my-bucketmake_bucket: my-bucket
docker run --rm -p 127.0.0.1:7644:7644 ghcr.io/nrndev/pogiReady.
# In a second terminal.# pogi accepts any keys; these are placeholdersexport AWS_ENDPOINT_URL=http://localhost:7644 AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_REGION=us-east-1aws s3 mb s3://my-bucketmake_bucket: my-bucket
scoop bucket add nrndev https://github.com/nrndev/scoop-bucketscoop install nrndev/pogi
No Scoop? Download pogi_0.1.0_windows_amd64.zip from the releases page and unzip it.
pogi startReady.
# In a second terminal.pogi env --shell pwsh | Invoke-Expressionaws s3 mb s3://my-bucketmake_bucket: my-bucket
Binaries for macOS, Linux and Windows are on the releases page. pogi also has a CLI, a terminal UI and an MCP server, so AI coding assistants can drive it; see the docs.