-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
320 lines (301 loc) · 16.6 KB
/
index.html
File metadata and controls
320 lines (301 loc) · 16.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-5C3LL34WWW"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-5C3LL34WWW');
</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Local Web Services - The Fastest Feedback Loop for Cloud-Native Development</title>
<meta name="description" content="Local Web Services reads your AWS CDK or HCL project and recreates your application locally. Build, test, and debug cloud-native AWS apps without deploying — no credentials, no cost, no waiting.">
<link rel="sitemap" type="application/xml" href="sitemap.xml">
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css">
</head>
<body>
<nav class="nav">
<div class="container nav-inner">
<a href="index.html" class="nav-logo">Local Web Services</a>
<ul class="nav-links">
<li><a href="getting-started.html">Get Started</a></li>
<li><a href="sdks.html">SDKs</a></li>
<li><a href="services.html">Cloud Emulation</a></li>
<li><a href="faking.html">Faking Services</a></li>
<li><a href="chaos.html">Chaos Engineering</a></li>
<li><a href="cli.html">CLI</a></li>
<li><a href="https://github.com/local-web-services/local-web-services" class="nav-github">GitHub</a></li>
</ul>
</div>
</nav>
<header class="hero">
<div class="container">
<h1>Local Web Services</h1>
<p class="hero-subtitle">Test AWS applications with realistic in-process local services using native language SDKs.<br>
Or run <code>ldk dev</code> as a local development server for CDK and HCL projects.<br>
No credentials. No cost. No waiting.</p>
<div class="hero-actions">
<a href="sdks.html" class="btn btn-primary">Explore the SDKs</a>
<a href="https://github.com/local-web-services/local-web-services" class="btn btn-secondary">View on GitHub</a>
</div>
<div class="hero-install">
<code>pip install local-web-services-python-sdk</code>
</div>
</div>
</header>
<section class="section" id="what">
<div class="container">
<h2>What is Local Web Services?</h2>
<p class="section-lead">Local Web Services emulates AWS services locally for development and testing. Use the language SDKs for in-process pytest or unit testing, or run <code>ldk dev</code> to start a full local development server that reads your CDK or HCL project and recreates your entire stack.</p>
<div class="feature-grid">
<div class="feature-card">
<div class="feature-icon"><img src="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/python/python-original.svg" alt="Python" width="40" height="40" style="vertical-align: middle;"></div>
<h3>Python SDK</h3>
<p>In-process AWS service testing for pytest. Start DynamoDB, SQS, S3 and more in background threads — no external process, no ports. Fluent APIs for faking, chaos, and IAM.</p>
</div>
<div class="feature-card">
<div class="feature-icon">⚡</div>
<h3>ldk</h3>
<p>The local development server. Parses your CDK or HCL project and spins up local providers for every AWS service you use — DynamoDB, Lambda, S3, SQS, and more. Hot reloading included.</p>
</div>
<div class="feature-card">
<div class="feature-icon">🔧</div>
<h3>lws</h3>
<p>AWS CLI for local services. Interact with your running local stack using familiar AWS SDK commands. Inspect tables, send messages, upload objects — all without touching AWS.</p>
</div>
</div>
<div class="feature-grid">
<div class="feature-card">
<div class="feature-icon">$0</div>
<h3>Zero Cost</h3>
<p>No AWS resources consumed during development. Your entire stack runs on your laptop.</p>
</div>
<div class="feature-card">
<div class="feature-icon">∅</div>
<h3>Zero Credentials</h3>
<p>No AWS access keys required. No risk of credential leaks or accidental production changes.</p>
</div>
<div class="feature-card">
<div class="feature-icon">Δ</div>
<h3>Zero Code Changes</h3>
<p>Standard AWS SDK calls work transparently. Your code runs identically locally and in production.</p>
</div>
</div>
<h3 class="section-subheading">Developer Experience</h3>
<div class="feature-grid">
<div class="feature-card">
<div class="feature-icon">🔄</div>
<h3>Hot Reloading</h3>
<p>Change your Lambda handlers and see the results instantly. File watchers detect changes and reload automatically — no restart needed.</p>
</div>
<div class="feature-card">
<div class="feature-icon">📊</div>
<h3>Web Dashboard</h3>
<p>Real-time web UI showing all resources, API routes, logs, and system status. Browse to <code>http://localhost:3000/_ldk/gui</code> to see everything at a glance.</p>
</div>
<div class="feature-card">
<div class="feature-icon">📝</div>
<h3>Structured Logging</h3>
<p>All Lambda invocations, API requests, and service calls logged in real-time. Stream logs directly in your terminal or via WebSocket to the dashboard.</p>
</div>
</div>
</div>
</section>
<section class="section section-alt" id="why">
<div class="container">
<h2>Why Use Local Web Services?</h2>
<p class="section-lead">Building with AWS CDK or HCL traditionally means deploying to the cloud just to test your code. Every change triggers a deploy-wait-test cycle that kills your flow and racks up costs.</p>
<div class="comparison">
<div class="comparison-col comparison-before">
<h3>Without Local Web Services</h3>
<ul>
<li>Edit code</li>
<li>Run <code>cdk deploy</code> or <code>tofu apply</code> — wait minutes</li>
<li>Test against live AWS resources</li>
<li>Check CloudWatch logs for errors</li>
<li>Pay for every invocation and resource</li>
<li>Manage AWS credentials on every machine</li>
<li>Hope you don't break a shared environment</li>
</ul>
</div>
<div class="comparison-col comparison-after">
<h3>With Local Web Services</h3>
<ul>
<li>Edit code</li>
<li>Run <code>uvx --from local-web-services ldk dev</code> — ready in seconds</li>
<li>Edit code — hot reload picks up changes instantly</li>
<li>Test against local services</li>
<li>Use lws commands to inspect data</li>
<li>See logs directly in your terminal</li>
<li>Pay nothing</li>
<li>No credentials needed</li>
<li>Your own isolated environment</li>
</ul>
</div>
</div>
<h3 class="section-subheading section-subheading--large">Shift Left: Inner Loop Development</h3>
<p class="section-lead" style="margin-top: -32px;">Post-deployment testing is slow and expensive. Local Web Services moves testing into the inner loop — before deployment — enabling rapid iteration for developers and AI agents alike.</p>
<div class="goals-grid">
<div class="goal-card">
<h3>Instant Feedback</h3>
<p>Edit your code and see the results immediately. Hot reloading picks up changes automatically — no restart, no redeploy, no waiting. The fastest feedback loop for cloud-native development.</p>
</div>
<div class="goal-card">
<h3>AI Agent Ready</h3>
<p>AI code editors need fast feedback loops to verify changes. Local Web Services eliminates deployment wait time, enabling AI agents to iterate and validate rapidly without AWS costs.</p>
</div>
<div class="goal-card">
<h3>Production Parity</h3>
<p>Your local environment mirrors your AWS architecture. The same services, the same APIs, the same integration patterns — so local testing actually predicts production behavior.</p>
</div>
<div class="goal-card">
<h3>Zero AWS Dependency</h3>
<p>Develop on a plane, in a coffee shop, or in a locked-down network. No AWS account needed, no credentials to manage, no risk of accidental production changes.</p>
</div>
<div class="goal-card">
<h3>Complete Observability</h3>
<p>Built-in web dashboard and structured logging show all invocations, events, and state changes. Debug with full transparency in real-time instead of hunting through CloudWatch.</p>
</div>
<div class="goal-card">
<h3>CI/CD Testing</h3>
<p>Run your full integration test suite in CI without provisioning real AWS resources. Fast, cheap, and reliable automated testing for your cloud-native apps.</p>
</div>
</div>
</div>
</section>
<section class="section" id="how-it-works">
<div class="container">
<h2>How It Works</h2>
<p class="section-lead">Local Web Services auto-detects your project type (CDK or HCL) and starts local AWS-compatible service endpoints. Your code talks to local services instead of real AWS.</p>
<h3 class="section-subheading">CDK Mode</h3>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
<div class="step-content">
<h3>Parse</h3>
<p>The <code>ldk</code> tool reads your <code>cdk.out/</code> cloud assembly — the CloudFormation templates, construct tree, and asset paths that <code>cdk synth</code> produces.</p>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div class="step-content">
<h3>Graph</h3>
<p>It builds a directed graph of your resources and their relationships: which Lambda is triggered by which API route, which function writes to which table, and what depends on what.</p>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div class="step-content">
<h3>Start</h3>
<p>Local providers spin up in topological order — tables and queues first, then compute, then API gateways. Each service gets its own HTTP endpoint that speaks the AWS API.</p>
</div>
</div>
<div class="step">
<div class="step-number">4</div>
<div class="step-content">
<h3>Redirect</h3>
<p>The local runtime sets <code>AWS_ENDPOINT_URL_*</code> environment variables so the standard AWS SDK in your Lambda handlers automatically talks to the local services. No code changes needed.</p>
</div>
</div>
</div>
<h3 class="section-subheading" style="margin-top: 80px;">HCL Mode</h3>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
<div class="step-content">
<h3>Detect</h3>
<p>The <code>ldk</code> tool detects <code>.tf</code> files in your project directory and enters HCL mode automatically (or use <code>--mode terraform</code> explicitly).</p>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div class="step-content">
<h3>Start All Services</h3>
<p>All AWS service providers start in always-on mode — DynamoDB, SQS, S3, SNS, EventBridge, Step Functions, Cognito, API Gateway, Lambda, IAM, STS, SSM Parameter Store, Secrets Manager, and more. Each service gets its own port.</p>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div class="step-content">
<h3>Override</h3>
<p>A <code>_lws_override.tf</code> file is generated that redirects all AWS provider endpoints to your local services. This file is automatically added to <code>.gitignore</code>.</p>
</div>
</div>
<div class="step">
<div class="step-number">4</div>
<div class="step-content">
<h3>Apply</h3>
<p>Run <code>tofu apply</code> as normal. Your HCL tool creates resources (tables, queues, buckets, Lambda functions) against your local endpoints. Your Lambda handlers run locally with full AWS SDK support.</p>
</div>
</div>
</div>
</div>
</section>
<section class="section section-alt">
<div class="container">
<h2>Build with Local Web Services</h2>
<p class="section-lead">From in-process SDK testing to full local development servers — choose your path.</p>
<div class="journey-grid journey-grid--5">
<a href="sdks.html" class="feature-card" style="text-decoration: none;">
<div class="feature-icon" style="display:flex;gap:6px;justify-content:center;align-items:center;flex-wrap:wrap;">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/python/python-original.svg" alt="Python" width="24" height="24">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/typescript/typescript-original.svg" alt="TypeScript" width="24" height="24">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/javascript/javascript-original.svg" alt="JavaScript" width="24" height="24">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/java/java-original.svg" alt="Java" width="24" height="24">
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/go/go-original-wordmark.svg" alt="Go" width="24" height="24">
</div>
<h3>SDKs</h3>
<p>Native language SDKs for Python, TypeScript, JavaScript, Java, and Go.</p>
</a>
<a href="getting-started.html" class="feature-card" style="text-decoration: none;">
<div class="feature-icon">🚀</div>
<h3>Get Started</h3>
<p>Install prerequisites, run your first local stack, and set up Claude Code integration.</p>
</a>
<a href="services.html" class="feature-card" style="text-decoration: none;">
<div class="feature-icon">☁️</div>
<h3>Cloud Emulation</h3>
<p>25 supported AWS service emulations with full operation lists and CDK construct mappings.</p>
</a>
<a href="faking.html" class="feature-card" style="text-decoration: none;">
<div class="feature-icon">🎭</div>
<h3>Fake Servers</h3>
<p>Fake AWS operations and external APIs with HTTP, GraphQL, and gRPC fake servers.</p>
</a>
<a href="chaos.html" class="feature-card" style="text-decoration: none;">
<div class="feature-icon">💥</div>
<h3>Chaos Testing</h3>
<p>Inject errors, latency, timeouts, and connection resets to test your application's resilience.</p>
</a>
</div>
</div>
</section>
<footer class="footer">
<div class="container">
<div class="footer-inner">
<div class="footer-brand">
<a href="index.html" class="nav-logo">Local Web Services</a>
<p>The fastest feedback loop for cloud-native development, for humans and AI alike</p>
</div>
<div class="footer-links">
<a href="https://github.com/local-web-services/local-web-services">GitHub</a>
<a href="https://github.com/local-web-services/local-web-services/tree/main/sample-project/cdk">CDK Sample</a>
<a href="https://github.com/local-web-services/local-web-services/tree/main/sample-project/hcl">Terraform Sample</a>
<a href="https://github.com/local-web-services/local-web-services/issues">Issues</a>
</div>
</div>
<p class="footer-copy">Open source under the MIT License.</p>
</div>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-clike.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-yaml.min.js"></script>
<script src="lws.js"></script>
</body>
</html>