<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Raj Jaiswal</title>
    <description>The latest articles on DEV Community by Raj Jaiswal (@jaisraj).</description>
    <link>https://dev.to/jaisraj</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3955586%2F968ad41f-44b0-4223-b778-7d3e5f737040.jpg</url>
      <title>DEV Community: Raj Jaiswal</title>
      <link>https://dev.to/jaisraj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaisraj"/>
    <language>en</language>
    <item>
      <title>JaisCloud — A Free, Single-Binary AWS Emulator in Go</title>
      <dc:creator>Raj Jaiswal</dc:creator>
      <pubDate>Thu, 28 May 2026 03:23:36 +0000</pubDate>
      <link>https://dev.to/jaisraj/jaiscloud-a-free-single-binary-aws-emulator-in-go-1m40</link>
      <guid>https://dev.to/jaisraj/jaiscloud-a-free-single-binary-aws-emulator-in-go-1m40</guid>
      <description>&lt;h1&gt;
  
  
  Why We Built JaisCloud — A Free, Single-Binary AWS Emulator in Go
&lt;/h1&gt;

&lt;p&gt;If you've ever tried to test AWS-dependent code locally, you've probably reached for LocalStack. It works but it comes with baggage like Python runtime, Docker dependency, and the features most teams actually need locked behind a Pro subscription.&lt;/p&gt;

&lt;p&gt;JaisCloud is our answer to that problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is JaisCloud?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://jaiscloud.com" rel="noopener noreferrer"&gt;JaisCloud&lt;/a&gt; is a free, open-source local AWS cloud emulator written entirely in Go. It implements the exact AWS wire protocols — Query/XML, JSON/Target, REST — so your existing SDK code points at JaisCloud and works unmodified. No shims, no proxy rewrites, no SDK patches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start it&lt;/span&gt;
jaiscloud-aws start

&lt;span class="c"&gt;# Point your SDK at it&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_ENDPOINT_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:4566
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;test
export &lt;/span&gt;&lt;span class="nv"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;test
export &lt;/span&gt;&lt;span class="nv"&gt;AWS_REGION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;us-east-1

&lt;span class="c"&gt;# Your existing code works — no changes needed&lt;/span&gt;
aws s3 mb s3://my-bucket
aws sqs create-queue &lt;span class="nt"&gt;--queue-name&lt;/span&gt; my-queue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single Static Binary
&lt;/h3&gt;

&lt;p&gt;JaisCloud ships as a single Go binary per cloud. No Python, no Docker, no Node. Just download and run. Works on laptop, CI runner, or Kubernetes pod.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download and run — that is it&lt;/span&gt;
./jaiscloud-aws start

&lt;span class="c"&gt;# Or with Docker&lt;/span&gt;
docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 4566:4566 rjaisval/jaiscloud-aws:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Portable State Snapshots
&lt;/h3&gt;

&lt;p&gt;Export the complete emulator state — every resource, every account, every region to a single gzip tarball and restore it anywhere in milliseconds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Capture a baseline&lt;/span&gt;
jaiscloud-aws &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; baseline.tar.gz

&lt;span class="c"&gt;# Restore on a teammate's machine or CI runner&lt;/span&gt;
jaiscloud-aws import &lt;span class="nt"&gt;-i&lt;/span&gt; baseline.tar.gz

&lt;span class="c"&gt;# Named snapshots for test isolation&lt;/span&gt;
jaiscloud-aws snapshot create &lt;span class="nt"&gt;--name&lt;/span&gt; before-migration
&lt;span class="c"&gt;# ... run tests ...&lt;/span&gt;
jaiscloud-aws snapshot revert before-migration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This changes how teams share environments. Instead of per-developer setup scripts that take minutes, share a tarball that restores in under a second.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deterministic Time Control
&lt;/h3&gt;

&lt;p&gt;This is the feature that has no equivalent in any other AWS emulator.&lt;/p&gt;

&lt;p&gt;JaisCloud lets you freeze the clock at any instant and advance it on demand. Testing a 5-minute SQS delay queue? No need to wait 5 minutes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Freeze the clock&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:4566/_jaiscloud/clock &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"mode":"fixed","time":"2024-06-01T09:00:00Z"}'&lt;/span&gt;

&lt;span class="c"&gt;# Advance to trigger time-based behaviour&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:4566/_jaiscloud/clock &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"mode":"fixed","time":"2024-06-01T09:06:00Z"}'&lt;/span&gt;

&lt;span class="c"&gt;# Reset to wall time&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:4566/_jaiscloud/clock &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"mode":"real"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This unlocks deterministic testing for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQS delay queues — advance clock instead of waiting&lt;/li&gt;
&lt;li&gt;DynamoDB TTL expiry — trigger expiry on demand&lt;/li&gt;
&lt;li&gt;EventBridge cron rules — replay the exact scheduled moment repeatedly&lt;/li&gt;
&lt;li&gt;STS/SecretsManager token expiry — test expiry without waiting&lt;/li&gt;
&lt;li&gt;CloudWatch alarm windows — advance into the evaluation window instantly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Real Spark / EMR Execution
&lt;/h3&gt;

&lt;p&gt;Most emulators fake compute — they accept the API call and immediately return COMPLETED. JaisCloud actually runs the Spark job, in Docker or on Kubernetes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Docker executor — runs real Spark jobs in containers&lt;/span&gt;
&lt;span class="nv"&gt;JAISCLOUD_EXECUTOR_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker ./jaiscloud-aws start

&lt;span class="c"&gt;# Kubernetes executor — runs jobs as real K8s batch jobs&lt;/span&gt;
&lt;span class="nv"&gt;JAISCLOUD_EXECUTOR_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;k8s ./jaiscloud-aws start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Kubernetes-Native
&lt;/h3&gt;

&lt;p&gt;JaisCloud runs natively as a Kubernetes pod. Lambda functions execute as real K8s pods. EMR steps run as batch/v1 Jobs. No special configuration needed, it uses the in-cluster service account.&lt;/p&gt;




&lt;h2&gt;
  
  
  JaisCloud in AI-Driven SDLC
&lt;/h2&gt;

&lt;p&gt;AI coding agents — Claude, Copilot, Cursor, and others — are now writing, reviewing, and deploying cloud-dependent code, but giving them a safe, fast, and realistic cloud environment to develop and test against without touching real AWS has been an unsolved problem. JaisCloud is the answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Agents Need a Local Cloud
&lt;/h3&gt;

&lt;p&gt;When an AI agent writes a Lambda function, creates an SQS queue, or sets up a DynamoDB table, it needs somewhere to run and verify that code immediately. &lt;/p&gt;

&lt;p&gt;Real AWS introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latency — round trips to AWS slow the agent's iteration loop&lt;/li&gt;
&lt;li&gt;Cost — every test run consumes real AWS resources&lt;/li&gt;
&lt;li&gt;Risk — a misconfigured IAM policy or an accidental S3 bucket deletion has real consequences&lt;/li&gt;
&lt;li&gt;State pollution — test resources left behind in shared AWS accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JaisCloud gives AI agents a fully isolated, local AWS environment that starts in milliseconds, costs nothing, and can be wiped and reset between runs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Snapshot-Based Agent Context
&lt;/h3&gt;

&lt;p&gt;One of the most powerful patterns for AI-driven development is using JaisCloud snapshots as agent context. Before handing a task to an AI agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a snapshot of the exact environment state the agent should work against&lt;/span&gt;
jaiscloud-aws snapshot create &lt;span class="nt"&gt;--name&lt;/span&gt; agent-task-baseline

&lt;span class="c"&gt;# Agent runs, creates resources, tests code&lt;/span&gt;
&lt;span class="c"&gt;# ...&lt;/span&gt;

&lt;span class="c"&gt;# If the agent's changes are wrong, revert and retry&lt;/span&gt;
jaiscloud-aws snapshot revert agent-task-baseline
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent gets a deterministic, reproducible environment every time. &lt;br&gt;
No shared state, no cross-contamination between agent runs.&lt;/p&gt;
&lt;h3&gt;
  
  
  Deterministic Testing for AI-Generated Code
&lt;/h3&gt;

&lt;p&gt;AI-generated code often involves time-dependent logic — TTL expiry, scheduled jobs, token rotation, delay queues. JaisCloud's time-freeze feature lets agents test this logic without wall-clock delays:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Agent generates code that processes expired DynamoDB records&lt;/span&gt;
&lt;span class="c"&gt;# Freeze clock, create records, advance past TTL, verify behaviour&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:4566/_jaiscloud/clock &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"mode":"fixed","time":"2024-01-01T00:00:00Z"}'&lt;/span&gt;

&lt;span class="c"&gt;# Create records with TTL&lt;/span&gt;
&lt;span class="c"&gt;# ...&lt;/span&gt;

&lt;span class="c"&gt;# Advance past TTL — no waiting&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:4566/_jaiscloud/clock &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"mode":"fixed","time":"2024-01-02T00:00:00Z"}'&lt;/span&gt;

&lt;span class="c"&gt;# Trigger TTL sweep and verify&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An AI agent can iterate through dozens of time-dependent test scenarios in seconds that would otherwise take hours of wall-clock time.&lt;/p&gt;

&lt;h3&gt;
  
  
  CI Pipeline for AI-Generated Pull Requests
&lt;/h3&gt;

&lt;p&gt;When AI agents submit pull requests, your CI pipeline needs to validate cloud-dependent code quickly and cheaply. JaisCloud fits naturally into this loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/ai-pr-validation.yml&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Start JaisCloud&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;docker run -d -p 4566:4566 rjaisval/jaiscloud-aws:latest&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Import baseline state&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jaiscloud-aws import -i ci-baseline.tar.gz&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run tests against JaisCloud&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;go test ./...&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;AWS_ENDPOINT_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://localhost:4566&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No real AWS credentials needed in CI. No cost per PR. No shared state between parallel runs. Every agent-generated PR gets a clean, identical cloud environment to validate against.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Full AI SDLC Loop
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent writes code
      |
      v
JaisCloud provides local AWS environment
      |
      v
Agent tests and iterates against JaisCloud
      |
      v
Snapshot captures validated state
      |
      v
CI imports snapshot, runs full test suite
      |
      v
PR merged — real AWS only touched in production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JaisCloud makes the entire inner loop from AI code generation to PR validation — fast, free, and safe. Real AWS stays out of the picture until code is production-ready.&lt;/p&gt;




&lt;h2&gt;
  
  
  Supported AWS Services
&lt;/h2&gt;

&lt;p&gt;SQS, SNS, DynamoDB (+ Streams), S3, Lambda, EMR on EC2, EMR on EKS,&lt;br&gt;
Glue (Data Catalog + Apache Iceberg), EventBridge, CloudWatch (metrics + alarms + logs), KMS, SecretsManager, SSM, IAM, STS, CloudFormation, API Gateway, EC2, ECS, EKS, RDS, ElastiCache, Route53, Kinesis, Cognito, ACM, SES, Firehose, Redshift&lt;/p&gt;


&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Docker (quickest):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 4566:4566 rjaisval/jaiscloud-aws:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Binary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS&lt;/span&gt;
brew tap jaisrajms/homebrew-tap
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; jaiscloud-aws

&lt;span class="c"&gt;# Linux&lt;/span&gt;
curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://github.com/jaisrajms/jaiscloud/releases/latest/download/jaiscloud-aws_linux_amd64.tar.gz | &lt;span class="nb"&gt;tar &lt;/span&gt;xz
./jaiscloud-aws start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default storage — state saved to ~/.jaiscloud/ and survives restarts.&lt;/p&gt;

&lt;p&gt;Ephemeral mode (clean slate, ideal for CI):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jaiscloud-aws start &lt;span class="nt"&gt;--ephemeral&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Postgres backend (durable, for teams):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jaiscloud-aws start &lt;span class="nt"&gt;--dsn&lt;/span&gt; &lt;span class="s2"&gt;"postgres://user:pass@localhost:5432/jaiscloud"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What is Next
&lt;/h2&gt;

&lt;p&gt;JaisCloud is in early alpha (v0.1.0-alpha.1). Core AWS services are working and tested. On the roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GCP emulator (jaiscloud-gcp)&lt;/li&gt;
&lt;li&gt;Azure emulator (jaiscloud-azure)&lt;/li&gt;
&lt;li&gt;Step Functions improvements&lt;/li&gt;
&lt;li&gt;Web UI for resource inspection&lt;/li&gt;
&lt;li&gt;More CloudFormation intrinsic functions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/jaisrajms/jaiscloud" rel="noopener noreferrer"&gt;https://github.com/jaisrajms/jaiscloud&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://jaiscloud.com" rel="noopener noreferrer"&gt;https://jaiscloud.com&lt;/a&gt;&lt;br&gt;
Docker: docker pull rjaisval/jaiscloud-aws:latest&lt;/p&gt;

&lt;p&gt;JaisCloud is Apache-2.0 licensed — free forever, no Pro tier, no usage limits.&lt;/p&gt;

&lt;p&gt;If you have hit walls with LocalStack Community or just want a Go-native cloud emulator that runs anywhere as a single binary, give JaisCloud a try.&lt;/p&gt;

&lt;p&gt;Feedback and contributions are very welcome.&lt;/p&gt;

&lt;p&gt;Star the repo if JaisCloud looks useful — it helps others find it.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>testing</category>
      <category>aiops</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
