|
| 1 | +--- |
| 2 | +title: "Grainchain: Langchain for Sandboxes" |
| 3 | +icon: "wheat-awn" |
| 4 | +iconType: "solid" |
| 5 | +description: "Unifying the fragmented sandbox ecosystem with a provider-agnostic interface" |
| 6 | +--- |
| 7 | + |
| 8 | +<Frame caption="Grainchain provides a unified interface across sandbox providers, just like Langchain does for LLMs"> |
| 9 | + <img src="/images/grainchain-architecture.png" /> |
| 10 | +</Frame> |
| 11 | + |
| 12 | +The sandbox ecosystem is exploding. E2B, Modal, Daytona, Morph, and countless other providers are revolutionizing how we execute code in isolated environments. But this innovation comes with a cost: **fragmentation**. |
| 13 | + |
| 14 | +Today, developers face an impossible choice: commit to a single sandbox provider and accept vendor lock-in, or spend countless hours learning multiple APIs, managing different configurations, and maintaining separate codebases for each provider. |
| 15 | + |
| 16 | +**We built Grainchain to solve this problem.** |
| 17 | + |
| 18 | +## The Inspiration |
| 19 | + |
| 20 | +The idea came from a simple tweet by [@mathemagician](https://twitter.com/mathemagician/status/1795149337284866500): |
| 21 | + |
| 22 | +> *"There should be a 'langchain for sandboxes'"* |
| 23 | +
|
| 24 | +That statement captured a fundamental truth. Just as [Langchain](https://github.com/langchain-ai/langchain) revolutionized how developers work with Large Language Models by providing a unified interface across OpenAI, Anthropic, Google, and others, **the sandbox ecosystem needs the same unification**. |
| 25 | + |
| 26 | +## The Problem with Sandbox Fragmentation |
| 27 | + |
| 28 | +The rapid growth of sandbox providers represents incredible innovation, but it creates several critical challenges: |
| 29 | + |
| 30 | +### Vendor Lock-in |
| 31 | +Applications become tightly coupled to specific sandbox providers. Switching from E2B to Modal or Daytona requires rewriting significant portions of your codebase. |
| 32 | + |
| 33 | +### Learning Curve |
| 34 | +Each provider has its own API, configuration format, and operational patterns. Developers must learn multiple systems instead of focusing on their core application logic. |
| 35 | + |
| 36 | +### Migration Complexity |
| 37 | +Moving between providers isn't just about changing a few configuration values—it often requires architectural changes and extensive testing. |
| 38 | + |
| 39 | +### Testing Challenges |
| 40 | +Testing across multiple providers becomes cumbersome when each requires different setup, authentication, and operational procedures. |
| 41 | + |
| 42 | +## Enter Grainchain |
| 43 | + |
| 44 | +Grainchain provides a clean, consistent API for interacting with various sandbox providers. Write your code once, and run it across multiple sandbox environments seamlessly. |
| 45 | + |
| 46 | +### Unified API |
| 47 | + |
| 48 | +```python |
| 49 | +import asyncio |
| 50 | +from grainchain import Sandbox |
| 51 | + |
| 52 | +async def main(): |
| 53 | + # This code works with ANY provider |
| 54 | + async with Sandbox() as sandbox: |
| 55 | + # Execute code |
| 56 | + result = await sandbox.execute("echo 'Hello, Grainchain!'") |
| 57 | + print(result.stdout) # "Hello, Grainchain!" |
| 58 | + |
| 59 | + # Upload and run a Python script |
| 60 | + await sandbox.upload_file("script.py", "print('Hello from Python!')") |
| 61 | + result = await sandbox.execute("python script.py") |
| 62 | + print(result.stdout) # "Hello from Python!" |
| 63 | + |
| 64 | +asyncio.run(main()) |
| 65 | +``` |
| 66 | + |
| 67 | +### Provider Flexibility |
| 68 | + |
| 69 | +Switch between providers with a single configuration change: |
| 70 | + |
| 71 | +```python |
| 72 | +# Use E2B |
| 73 | +async with Sandbox(provider="e2b") as sandbox: |
| 74 | + result = await sandbox.execute("pip install numpy") |
| 75 | + |
| 76 | +# Use Modal |
| 77 | +async with Sandbox(provider="modal") as sandbox: |
| 78 | + result = await sandbox.execute("echo 'Using Modal'") |
| 79 | + |
| 80 | +# Use Daytona |
| 81 | +async with Sandbox(provider="daytona") as sandbox: |
| 82 | + result = await sandbox.execute("echo 'Using Daytona'") |
| 83 | + |
| 84 | +# Use Morph |
| 85 | +async with Sandbox(provider="morph") as sandbox: |
| 86 | + result = await sandbox.execute("echo 'Using Morph'") |
| 87 | +``` |
| 88 | + |
| 89 | +## Core Principles |
| 90 | + |
| 91 | +### 1. Provider Agnostic by Design |
| 92 | +Your code should work seamlessly across E2B, Modal, Daytona, Morph, or any future provider that emerges. |
| 93 | + |
| 94 | +### 2. Simplicity Over Complexity |
| 95 | +A unified API shouldn't mean a complicated API. We believe in clean, intuitive interfaces that make the complex simple. |
| 96 | + |
| 97 | +### 3. Performance Without Compromise |
| 98 | +Abstraction should not mean overhead. Grainchain adds minimal latency while maximizing developer productivity. |
| 99 | + |
| 100 | +### 4. Open by Default |
| 101 | +Our code is open source. Our development is transparent. Our community drives our roadmap. |
| 102 | + |
| 103 | +### 5. Future-Proof Architecture |
| 104 | +We build for the sandbox ecosystem of tomorrow, not just today. New providers integrate seamlessly. |
| 105 | + |
| 106 | +## Real-World Impact |
| 107 | + |
| 108 | +Since launching Grainchain, we've seen remarkable adoption: |
| 109 | + |
| 110 | +- **Eliminated vendor lock-in** for hundreds of developers |
| 111 | +- **Reduced integration time** from days to minutes |
| 112 | +- **Enabled rapid prototyping** across multiple sandbox providers |
| 113 | +- **Fostered innovation** by removing infrastructure concerns |
| 114 | + |
| 115 | +## Advanced Features |
| 116 | + |
| 117 | +### Performance Benchmarking |
| 118 | + |
| 119 | +Grainchain includes built-in benchmarking to help you choose the right provider for your workload: |
| 120 | + |
| 121 | +```bash |
| 122 | +# Test individual providers |
| 123 | +grainchain benchmark --provider local |
| 124 | +grainchain benchmark --provider e2b |
| 125 | +grainchain benchmark --provider daytona |
| 126 | +grainchain benchmark --provider morph |
| 127 | + |
| 128 | +# Generate comprehensive reports |
| 129 | +./scripts/benchmark_all.sh |
| 130 | +``` |
| 131 | + |
| 132 | +Current performance baseline: |
| 133 | + |
| 134 | +| Provider | Total Time | Basic Echo | Python Test | File Ops | Performance | |
| 135 | +| ----------- | ---------- | ---------- | ----------- | -------- | ---------------- | |
| 136 | +| **Local** | 0.036s | 0.007s | 0.021s | 0.008s | ⚡ Fastest | |
| 137 | +| **E2B** | 0.599s | 0.331s | 0.111s | 0.156s | 🚀 Balanced | |
| 138 | +| **Daytona** | 1.012s | 0.305s | 0.156s | 0.551s | 🛡️ Comprehensive | |
| 139 | +| **Morph** | 0.250s | 0.005s | 0.010s | 0.005s | 🚀 Instant Snapshots | |
| 140 | + |
| 141 | +### Provider Health Checking |
| 142 | + |
| 143 | +Before using Grainchain, check which sandbox providers are available: |
| 144 | + |
| 145 | +```bash |
| 146 | +# Check all providers |
| 147 | +grainchain providers |
| 148 | + |
| 149 | +# Show detailed setup instructions |
| 150 | +grainchain providers --verbose |
| 151 | + |
| 152 | +# Check specific provider |
| 153 | +grainchain providers --check e2b |
| 154 | +``` |
| 155 | + |
| 156 | +### Advanced Configuration |
| 157 | + |
| 158 | +```python |
| 159 | +from grainchain import Sandbox, SandboxConfig |
| 160 | + |
| 161 | +config = SandboxConfig( |
| 162 | + timeout=300, |
| 163 | + memory_limit="2GB", |
| 164 | + cpu_limit=2.0, |
| 165 | + environment_vars={"API_KEY": "secret"}, |
| 166 | + working_directory="/workspace" |
| 167 | +) |
| 168 | + |
| 169 | +async with Sandbox(provider="e2b", config=config) as sandbox: |
| 170 | + result = await sandbox.execute("echo $API_KEY") |
| 171 | +``` |
| 172 | + |
| 173 | +## The Technology Stack |
| 174 | + |
| 175 | +Grainchain is built with modern Python best practices: |
| 176 | + |
| 177 | +- **Async-first architecture** for maximum performance |
| 178 | +- **Type-safe interfaces** for reliable development |
| 179 | +- **Comprehensive testing** across all supported providers |
| 180 | +- **Rich configuration system** for complex deployments |
| 181 | +- **Built-in benchmarking** for performance optimization |
| 182 | + |
| 183 | +## Supported Providers |
| 184 | + |
| 185 | +| Provider | Status | Features | |
| 186 | +| ----------- | ------------ | ------------------------------------------------ | |
| 187 | +| **E2B** | ✅ Supported | Code interpreter, custom images, file operations | |
| 188 | +| **Daytona** | ✅ Supported | Development environments, workspace management | |
| 189 | +| **Morph** | ✅ Supported | Custom base images, instant snapshots, <250ms startup | |
| 190 | +| **Local** | ✅ Supported | Local development and testing | |
| 191 | +| **Docker** | 🚧 Planned | Local Docker containers | |
| 192 | + |
| 193 | +## The Future of Sandbox Computing |
| 194 | + |
| 195 | +We're building toward a future where: |
| 196 | + |
| 197 | +### Phase 2: Ecosystem 🚧 |
| 198 | +- Docker provider support |
| 199 | +- Advanced features (GPU support, custom images, networking) |
| 200 | +- Performance optimizations and monitoring |
| 201 | + |
| 202 | +### Phase 3: Intelligence 🔮 |
| 203 | +- Intelligent provider selection based on workload |
| 204 | +- Cost optimization across providers |
| 205 | +- Auto-scaling and resource management |
| 206 | + |
| 207 | +### Phase 4: Community 🌍 |
| 208 | +- Plugin ecosystem for custom providers |
| 209 | +- Multi-language SDKs (JavaScript, Go, Rust) |
| 210 | +- Enterprise features and support |
| 211 | + |
| 212 | +## Why This Matters for Code Agents |
| 213 | + |
| 214 | +The future of software development is increasingly driven by AI agents that need reliable, fast access to sandbox environments. Whether it's: |
| 215 | + |
| 216 | +- **Code agents** executing and testing code changes |
| 217 | +- **Data science workflows** running analysis pipelines |
| 218 | +- **CI/CD systems** building and testing applications |
| 219 | +- **Development environments** providing isolated workspaces |
| 220 | + |
| 221 | +All of these use cases benefit from provider-agnostic sandbox access. Grainchain enables AI systems to focus on their core logic rather than infrastructure concerns. |
| 222 | + |
| 223 | +## Getting Started |
| 224 | + |
| 225 | +```bash |
| 226 | +# Basic installation |
| 227 | +pip install grainchain |
| 228 | + |
| 229 | +# With specific provider support |
| 230 | +pip install grainchain[e2b] |
| 231 | +pip install grainchain[daytona] |
| 232 | +pip install grainchain[morph] |
| 233 | + |
| 234 | +# With all providers |
| 235 | +pip install grainchain[all] |
| 236 | +``` |
| 237 | + |
| 238 | +## Join the Movement |
| 239 | + |
| 240 | +Grainchain is more than a library—it's a movement toward a better, more unified sandbox ecosystem. |
| 241 | + |
| 242 | +**Contribute:** |
| 243 | +- GitHub: [https://github.com/codegen-sh/grainchain](https://github.com/codegen-sh/grainchain) |
| 244 | +- Issues: Share your ideas and feedback |
| 245 | +- PRs: Help us build the future |
| 246 | + |
| 247 | +**Connect:** |
| 248 | +- Follow our progress on [Twitter](https://twitter.com/codegen_sh) |
| 249 | +- Join discussions in our community channels |
| 250 | +- Share your Grainchain success stories |
| 251 | + |
| 252 | +## The Bottom Line |
| 253 | + |
| 254 | +**Sandbox providers should compete on performance, features, and price—not on API lock-in.** |
| 255 | + |
| 256 | +Grainchain makes this possible. We're building the abstraction layer that lets innovation flourish while keeping developers free. |
| 257 | + |
| 258 | +The future of sandbox computing is unified, open, and developer-first. |
| 259 | + |
| 260 | +**Welcome to Grainchain. Welcome to the future.** |
| 261 | + |
| 262 | +--- |
| 263 | + |
| 264 | +*Built with ❤️ by the [Codegen](https://codegen.com) team* |
| 265 | + |
| 266 | +*Get started with Grainchain today: [https://github.com/codegen-sh/grainchain](https://github.com/codegen-sh/grainchain)* |
| 267 | + |
0 commit comments