<?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: satvik upadhyaya</title>
    <description>The latest articles on DEV Community by satvik upadhyaya (@satvik_upadhyaya_80259209).</description>
    <link>https://dev.to/satvik_upadhyaya_80259209</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%2F3817392%2F4ce19c95-553c-4676-9dd3-892e96377539.jpg</url>
      <title>DEV Community: satvik upadhyaya</title>
      <link>https://dev.to/satvik_upadhyaya_80259209</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/satvik_upadhyaya_80259209"/>
    <language>en</language>
    <item>
      <title>I built a pre-deployment sandbox in Rust to catch bugs before deployment</title>
      <dc:creator>satvik upadhyaya</dc:creator>
      <pubDate>Wed, 11 Mar 2026 16:15:52 +0000</pubDate>
      <link>https://dev.to/satvik_upadhyaya_80259209/i-built-a-pre-deployment-sandbox-in-rust-to-catch-bugs-before-deployment-44e6</link>
      <guid>https://dev.to/satvik_upadhyaya_80259209/i-built-a-pre-deployment-sandbox-in-rust-to-catch-bugs-before-deployment-44e6</guid>
      <description>&lt;p&gt;Hello everyone reading this post - and even those who might just be scrolling by.&lt;/p&gt;

&lt;p&gt;I’m a Rust developer who enjoys building tools and experimenting with new ideas. One day (yes, during a shower — where many engineering ideas seem to appear), I thought about a problem most developers have experienced at least once: deployment failures.&lt;/p&gt;

&lt;p&gt;Even when CI pipelines pass, deployments can still fail due to things like:&lt;/p&gt;

&lt;p&gt;dependency mismatches&lt;/p&gt;

&lt;p&gt;missing environment variables&lt;/p&gt;

&lt;p&gt;runtime configuration issues&lt;/p&gt;

&lt;p&gt;infrastructure inconsistencies&lt;/p&gt;

&lt;p&gt;These issues often appear only after code reaches the deployment stage, which can slow down development and break pipelines.&lt;/p&gt;

&lt;p&gt;That got me thinking:&lt;/p&gt;

&lt;p&gt;What if we could simulate deployment conditions before deployment actually happens?&lt;/p&gt;

&lt;p&gt;So I decided to build a pre-deployment sandbox in Rust.&lt;/p&gt;

&lt;p&gt;The idea is simple: run code inside an isolated environment before it reaches production and analyze potential failures early. This allows developers to detect issues before pushing code to their real deployment infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Sandbox Does
&lt;/h2&gt;

&lt;p&gt;The sandbox executes code in an isolated Docker environment, simulating a deployment-like setup. It can detect common issues such as:&lt;/p&gt;

&lt;p&gt;dependency conflicts&lt;/p&gt;

&lt;p&gt;runtime errors&lt;/p&gt;

&lt;p&gt;missing environment variables&lt;/p&gt;

&lt;p&gt;configuration problems&lt;/p&gt;

&lt;p&gt;This gives developers an additional safety layer before their code reaches production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;Here is the stack I used to build the project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Backend: Rust, Axum (web framework), Tokio (async runtime)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Frontend: Next.js, TypeScript&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Infrastructure: Docker for sandbox isolation, AWS ECS and EC2 for execution environments, AWS S3 &amp;amp; DynamoDB for storage and metadata&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yes, AWS can sometimes bill you more than expected - thankfully free credits exist 😄.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rust Dependencies&lt;/strong&gt;&lt;br&gt;
Some of the main dependencies used in the backend include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="py"&gt;axum&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.7"&lt;/span&gt;
&lt;span class="py"&gt;tokio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"full"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="py"&gt;serde&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"derive"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="py"&gt;serde_json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;
&lt;span class="py"&gt;async-stream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.3"&lt;/span&gt;
&lt;span class="py"&gt;tokio-stream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.1"&lt;/span&gt;
&lt;span class="py"&gt;async-openai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.33.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"responses"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="py"&gt;tower-http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"cors"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;span class="py"&gt;http&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1.4.0"&lt;/span&gt;
&lt;span class="py"&gt;reqwest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.12"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"json"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="py"&gt;cookie&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.18"&lt;/span&gt;
&lt;span class="py"&gt;time&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.3"&lt;/span&gt;
&lt;span class="py"&gt;aws-config&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;
&lt;span class="py"&gt;aws-sdk-dynamodb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;
&lt;span class="py"&gt;chrono&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"serde"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="py"&gt;anyhow&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1.0.102"&lt;/span&gt;
&lt;span class="py"&gt;axum-extra&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.9.6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"cookie"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="py"&gt;aws-sdk-s3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"behavior-version-latest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="py"&gt;aws-sdk-bedrockruntime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"behavior-version-latest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Architecture Overview&lt;/strong&gt;&lt;br&gt;
At a high level, the sandbox works by simulating a deployment environment before the code actually reaches production.&lt;/p&gt;

&lt;p&gt;The flow looks roughly like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A developer submits their project or repository to the sandbox.&lt;/li&gt;
&lt;li&gt;The backend service (written in Rust using Axum) receives the request.&lt;/li&gt;
&lt;li&gt;The project is packaged and sent to a sandbox environment.&lt;/li&gt;
&lt;li&gt;A Docker container spins up to create an isolated runtime environment.&lt;/li&gt;
&lt;li&gt;The code runs inside this container while logs and execution output are captured.&lt;/li&gt;
&lt;li&gt;The system analyzes the results and reports potential issues such as runtime errors, missing dependencies, or configuration problems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This architecture allows the code to be tested in a controlled environment that closely resembles a real deployment setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Components&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The sandbox is made up of several components working together to simulate a deployment environment and detect potential issues before code reaches production.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;API Layer (Rust + Axum)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The core backend of the system is written in Rust using the Axum framework. This API layer acts as the main entry point for the system.&lt;/p&gt;

&lt;p&gt;It is responsible for:&lt;/p&gt;

&lt;p&gt;receiving requests from the frontend&lt;/p&gt;

&lt;p&gt;validating project submissions&lt;/p&gt;

&lt;p&gt;triggering sandbox execution jobs&lt;/p&gt;

&lt;p&gt;returning execution results and logs&lt;/p&gt;

&lt;p&gt;Axum works well for this use case because it provides a fast and reliable async web framework built on top of Tokio.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sandbox Execution (Docker)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The most important part of the system is the sandbox execution environment.&lt;/p&gt;

&lt;p&gt;Whenever a project is submitted, the backend spins up a Docker container that acts as an isolated runtime environment. The code is executed inside this container so that it cannot affect the host system.&lt;/p&gt;

&lt;p&gt;Using Docker provides several benefits:&lt;/p&gt;

&lt;p&gt;process isolation&lt;/p&gt;

&lt;p&gt;reproducible environments&lt;/p&gt;

&lt;p&gt;easy dependency management&lt;/p&gt;

&lt;p&gt;safer execution of arbitrary code&lt;/p&gt;

&lt;p&gt;This allows the sandbox to simulate conditions that are close to real deployment environments.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cloud Infrastructure (AWS)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To run the sandbox environments reliably, the system uses several AWS services.&lt;/p&gt;

&lt;p&gt;The main services include:&lt;/p&gt;

&lt;p&gt;EC2 for compute resources&lt;/p&gt;

&lt;p&gt;ECS for container orchestration&lt;/p&gt;

&lt;p&gt;S3 for storing artifacts and logs&lt;/p&gt;

&lt;p&gt;DynamoDB for storing execution metadata&lt;/p&gt;

&lt;p&gt;Using AWS makes it easier to scale sandbox execution when multiple jobs are triggered simultaneously.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI Analysis Layer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After code execution completes, the system can optionally analyze the results using an AI layer.&lt;/p&gt;

&lt;p&gt;This analysis can help detect potential issues such as:&lt;/p&gt;

&lt;p&gt;dependency problems&lt;/p&gt;

&lt;p&gt;configuration mistakes&lt;/p&gt;

&lt;p&gt;runtime errors&lt;/p&gt;

&lt;p&gt;deployment risks&lt;/p&gt;

&lt;p&gt;This step adds an additional layer of insight beyond simply running the code.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Frontend Interface&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The frontend is built using Next.js with TypeScript.&lt;/p&gt;

&lt;p&gt;It provides a simple interface where users can:&lt;/p&gt;

&lt;p&gt;submit projects to the sandbox&lt;/p&gt;

&lt;p&gt;monitor execution status&lt;/p&gt;

&lt;p&gt;view logs and analysis results&lt;/p&gt;

&lt;p&gt;This makes the sandbox easier to use compared to interacting with the backend APIs directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution Flow&lt;/strong&gt;&lt;br&gt;
Now let's look at what actually happens when a developer submits a project to the sandbox.&lt;/p&gt;

&lt;p&gt;The system follows a simple execution pipeline.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Project Submission&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A developer submits their project through the frontend interface built with Next.js. This request is sent to the Rust backend API.&lt;/p&gt;

&lt;p&gt;The request may contain things like:&lt;/p&gt;

&lt;p&gt;repository URL&lt;/p&gt;

&lt;p&gt;project files&lt;/p&gt;

&lt;p&gt;configuration data&lt;/p&gt;

&lt;p&gt;environment variables&lt;/p&gt;

&lt;p&gt;The API validates the request before starting the execution process.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Job Creation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once the request is validated, the backend creates a sandbox execution job.&lt;/p&gt;

&lt;p&gt;This job contains all the information required to run the project inside the sandbox environment, such as:&lt;/p&gt;

&lt;p&gt;project files&lt;/p&gt;

&lt;p&gt;runtime configuration&lt;/p&gt;

&lt;p&gt;resource limits&lt;/p&gt;

&lt;p&gt;execution instructions&lt;/p&gt;

&lt;p&gt;The job metadata can be stored in DynamoDB so the system can track execution status.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Container Initialization&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, the system launches a Docker container inside the sandbox environment.&lt;/p&gt;

&lt;p&gt;This container acts as a completely isolated runtime where the project can run safely without affecting the host machine.&lt;/p&gt;

&lt;p&gt;The container environment is prepared by:&lt;/p&gt;

&lt;p&gt;installing required dependencies&lt;/p&gt;

&lt;p&gt;configuring environment variables&lt;/p&gt;

&lt;p&gt;mounting project files&lt;/p&gt;

&lt;p&gt;setting execution limits&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Code Execution&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After the container is ready, the project code is executed inside the sandbox.&lt;/p&gt;

&lt;p&gt;During execution, the system captures:&lt;/p&gt;

&lt;p&gt;runtime logs&lt;/p&gt;

&lt;p&gt;errors&lt;/p&gt;

&lt;p&gt;dependency issues&lt;/p&gt;

&lt;p&gt;exit status&lt;/p&gt;

&lt;p&gt;These logs help identify problems that may cause deployment failures.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Result Analysis&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once execution finishes, the system collects the logs and execution results.&lt;/p&gt;

&lt;p&gt;These results can then be analyzed to detect potential problems such as:&lt;/p&gt;

&lt;p&gt;missing dependencies&lt;/p&gt;

&lt;p&gt;configuration errors&lt;/p&gt;

&lt;p&gt;runtime crashes&lt;/p&gt;

&lt;p&gt;environment mismatches&lt;/p&gt;

&lt;p&gt;Optional AI analysis can also be applied to help summarize potential issues.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Result Reporting&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Finally, the results are returned to the user through the frontend dashboard.&lt;/p&gt;

&lt;p&gt;Developers can view:&lt;/p&gt;

&lt;p&gt;execution logs&lt;/p&gt;

&lt;p&gt;detected issues&lt;/p&gt;

&lt;p&gt;analysis results&lt;/p&gt;

&lt;p&gt;deployment readiness status&lt;/p&gt;

&lt;p&gt;This allows developers to fix problems before their code reaches production deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges I Faced While Building This&lt;/strong&gt;&lt;br&gt;
Building a sandbox that executes code safely is not trivial. While developing this system, I ran into several interesting challenges.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Secure Code Execution&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the biggest concerns when building a sandbox is security. Since the system executes user-submitted code, it must be isolated from the host machine.&lt;/p&gt;

&lt;p&gt;Using Docker containers helped solve this problem by providing an isolated runtime environment. Each execution runs inside its own container so that it cannot access the host system directly.&lt;/p&gt;

&lt;p&gt;However, additional precautions are still necessary such as:&lt;/p&gt;

&lt;p&gt;limiting container resources&lt;/p&gt;

&lt;p&gt;restricting network access&lt;/p&gt;

&lt;p&gt;enforcing execution timeouts&lt;/p&gt;

&lt;p&gt;Managing Container Lifecycle&lt;/p&gt;

&lt;p&gt;Spinning up containers dynamically for each job introduces new challenges.&lt;/p&gt;

&lt;p&gt;Containers must be:&lt;/p&gt;

&lt;p&gt;created quickly&lt;/p&gt;

&lt;p&gt;monitored during execution&lt;/p&gt;

&lt;p&gt;cleaned up after the job finishes&lt;/p&gt;

&lt;p&gt;If containers are not properly removed, they can consume system resources and increase infrastructure costs.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Handling Different Project Environments&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Another challenge was dealing with different project configurations.&lt;/p&gt;

&lt;p&gt;Projects can require different:&lt;/p&gt;

&lt;p&gt;dependencies&lt;/p&gt;

&lt;p&gt;runtime versions&lt;/p&gt;

&lt;p&gt;environment variables&lt;/p&gt;

&lt;p&gt;The sandbox environment needs to be flexible enough to support these variations while still remaining reproducible.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Infrastructure Costs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Running sandbox environments on cloud infrastructure like AWS can become expensive if not managed carefully.&lt;/p&gt;

&lt;p&gt;Services such as EC2 and ECS make container orchestration easier, but they also require proper resource management to avoid unnecessary costs.&lt;/p&gt;

&lt;p&gt;Luckily, free credits help while experimenting 😄.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>devops</category>
      <category>docker</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
