Commit Graph

1380 Commits

Author SHA1 Message Date
Tomas Valenta f5cfa6d897 Update node version in SDK and CLI (#935) 2025-10-08 00:46:01 +00:00
Meet Kotadiya c66c9cc085 fix(types): make stdin optional in CommandOptions (#931)
This PR fixes a mismatch between the TypeScript types and the
documented/default runtime behavior in the JS SDK.

- The docs indicate `stdin` defaults to `false` (`@default false`).
- The current type declares `stdin: boolean;` (required), which causes
TypeScript errors for callers who rely on the default.
- Change: mark `stdin` as optional (`stdin?: boolean;`) so types match
docs/runtime.
2025-10-04 06:51:31 -07:00
github-actions[bot] 2d62fdcc46 [skip ci] Release new versions 2025-10-03 22:10:01 +00:00
Jonas Scholz ad4b882bff Fix e2b sbx logs -f <id> not following (#930)
This PR fixes 2 bugs that made the follow option in `e2b sbx logs` not
work:

1. `e2b sbx logs -f <id>` failed to follow because the `isRunning`
function was always returning false due to the API call being
unauthenticated if you dont have the `E2B_API_KEY` environment variable
set.

This follows the existing pattern from other API calls:

https://github.com/e2b-dev/E2B/blob/c4ce97e9b9a1809e3419d64499c1e56f9138e3d0/packages/cli/src/commands/sandbox/list.ts#L138-L152

Eventually it would make sense to handle the error here, for now just a
hotfix to fix the --follow usage

2. Once it actually followed, it never stopped following because
`isRunning` was not inside the loop and always true. Now when you kill
the sandbox follow actually stops following

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Fixes `e2b sbx logs -f` by authenticating `isRunning` and re-checking
sandbox state each loop so following works and stops when closed.
> 
> - **CLI — `packages/cli/src/commands/sandbox`**:
>   - **Logs follow behavior (`logs.ts`)**:
> - Re-check `isRunning(sandboxID)` inside the loop (`isSandboxRunning`)
instead of using a cached promise, ensuring follow stops when sandbox is
closed or not found.
>   - **Sandbox state check auth (`utils.ts`)**:
> - Use `ensureAPIKey()` and pass `apiKey` to
`Sandbox.getInfo(getShortID(sandboxID), { apiKey })` so `isRunning` is
authenticated.
> - **Release**:
> - Changeset adds patch for `@e2b/cli` with note: fix sbx logs follow
option.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
5fbd87166b70aca7229ccc1ff8fa2c27f12b1641. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-03 15:06:17 -07:00
github-actions[bot] c4ce97e9b9 [skip ci] Release new versions 2025-10-01 12:45:57 +00:00
Mish Ushakov b1e2701931 Correct file hashing logic in the SDK (#916)
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Jakub Dobry <jakub.dobry8@gmail.com>
2025-10-01 05:37:58 -07:00
github-actions[bot] 64e8f057d2 [skip ci] Release new versions 2025-09-30 15:53:06 +00:00
Jakub Dobry 4da865c1f3 fix: add queue for terminal input (#924) 2025-09-30 08:49:39 -07:00
github-actions[bot] 25526ff928 [skip ci] Release new versions 2025-09-29 12:53:44 +00:00
Jakub Novák e142c23c31 Set stdin to /dev/null by default (#919)
Disable stdin (setting it to `/dev/null` for `command.run()`, but enable
to setting it to pipe, which you can send the input via
`command.sendStdin()`
This fixes issues with tools checking for stdin and then hanging
indefinitely

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Disables stdin by default and introduces a new `StartRequest.stdin`
flag to opt-in to stdin piping, updating JS/Python SDKs, version gating,
and tests.
> 
> - **Spec/Protobuf**:
> - Add `optional bool stdin` to `process.StartRequest` in
`spec/envd/process/process.proto` and regenerate JS/Python protos.
> - **JS SDK**:
> - Add `ENVD_COMMANDS_STDIN = '0.3.0'` and version check; error if
`stdin === false` on older envd.
> - Extend `CommandStartOpts` with `stdin` (default `false`); pass
`stdin` to `rpc.start`.
> - **Python SDK**:
> - Add `ENVD_COMMANDS_STDIN = Version("0.3.0")` and version check
mirroring JS.
> - Extend async/sync `commands.run()` with `stdin` (default `False`);
pass to `StartRequest`.
>   - Update generated `process_pb2`/`.pyi` with `StartRequest.stdin`.
> - **Tests**:
> - Update send-stdin tests to run commands with `stdin:
true`/`stdin=True`.
> - **Changeset**:
>   - Minor bump for `@e2b/python-sdk` and `e2b`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
458a15187e6eadccd43540e6b8972c4d45e1bb78. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-09-29 05:34:16 -07:00
Jakub Dobry 1c34e5dd0b fix: npm install and pip install helpers (#923) 2025-09-29 05:33:46 -07:00
Jakub Dobry ad7ad6f101 Scope template build for typescript and python (#922) 2025-09-29 04:47:24 -07:00
Jakub Novák edc138cbf9 Improve envd version handling (#920)
The envd is always present, so we can simplify the handling + pass it to
filesystem module as a preparation for stdin
2025-09-26 14:59:34 -07:00
github-actions[bot] 4de9dabca0 [skip ci] Release new versions 2025-09-26 13:44:26 +00:00
Jakub Dobry 2ec9ea8a44 feat: add template init for new template SDK (#881) 2025-09-26 06:40:58 -07:00
github-actions[bot] ae19d941f0 [skip ci] Release new versions 2025-09-26 12:09:44 +00:00
Jakub Novák d90c201cf3 Update docstring in toml after CLI template build (#868)
Forgotten text with old way how to create sandbox in sync Python
2025-09-26 12:06:27 +00:00
Jakub Dobry 4b463bd09b Fix template SDK tests (#918) 2025-09-26 05:01:41 -07:00
github-actions[bot] 0726589667 [skip ci] Release new versions 2025-09-25 09:12:18 +00:00
Jakub Dobry b43793ceb9 Fix CLI template migrate copy target (#915) 2025-09-25 02:09:04 -07:00
github-actions[bot] 138f85dd07 [skip ci] Release new versions 2025-09-19 19:03:53 +00:00
Jakub Dobry e81c59be8c Fix template folder copy (#911) 2025-09-19 18:55:07 +00:00
github-actions[bot] 2eeca3f807 [skip ci] Release new versions 2025-09-19 15:44:52 +00:00
Jakub Dobry b9c4b16baa feat: add template migration to CLI (#880)
## 🔄 Add Template Migration to CLI

### Summary

This PR introduces a new `migrate` command to the E2B CLI that helps
users transition from the legacy Dockerfile + TOML configuration format
to the new Template SDK format. The migration tool automatically
converts existing `e2b.Dockerfile` and `e2b.toml` configurations into
SDK-compatible template files using Handlebars templates.

### What's Changed

####  New Features

- **Template Migration Command**: Added `e2b template migrate` command
for converting legacy configurations to SDK format
- **Multi-Language Support**: Supports migration to TypeScript, Python
(sync), and Python (async) formats
- **Interactive Language Selection**: CLI prompts for target language
when not specified
- **Multi-stage Dockerfile Support**: Added fallback handling for
complex multi-stage Dockerfiles

#### 🔧 Technical Improvements

- **Enhanced ENV Handling**: Improved parsing of multiple environment
variables from single ENV instructions
- **File Name Conflict Resolution**: Automatic unique filename
generation to prevent overwriting existing files
- **Comprehensive Template Generation**: Creates both development and
production build files

#### 📁 New Template Files

- `typescript-template.hbs` - TypeScript template generation
- `typescript-build.hbs` - TypeScript build script template
- `python-template.hbs` - Python template generation (supports both
sync/async)
- `python-build-async.hbs` - Python async build script template
- `python-build-sync.hbs` - Python sync build script template

### Usage

```bash
# Migrate with interactive language selection
e2b template migrate

# Migrate to specific language
e2b template migrate --language typescript
e2b template migrate --language python-sync
e2b template migrate --language python-async

# Custom paths
e2b template migrate --dockerfile custom.dockerfile --config custom.toml
```

### Generated Output

The migration command generates three files per target:
- `template.{ts|py}` - Template definition using SDK
- `build{.|_}dev.{ts|py}` - Development build script
- `build{.|_}prod.{ts|py}` - Production build script

### Migration Process

1. **Parse Configuration**: Reads `e2b.toml` for template settings
2. **Dockerfile Analysis**: Uses E2B SDK to parse Dockerfile
instructions
3. **Transformation**: Converts Docker instructions to SDK method calls
4. **Code Generation**: Uses Handlebars templates to generate target
language files
5. **File Creation**: Writes template and build files with conflict
resolution

### Error Handling

- **Graceful Dockerfile Parsing**: Falls back to custom image reference
for unparseable Dockerfiles
- **Clear User Guidance**: Provides manual build instructions when
automatic conversion fails
- **Validation**: Ensures required configuration files exist before
migration
2025-09-19 17:41:28 +02:00
github-actions[bot] 8255ba42c0 [skip ci] Release new versions 2025-09-19 10:40:39 +00:00
Mish Ushakov 9f9e2a8f20 Render failed layer stack traces on build error (#901)
### Changelog

- Added traces for Python and JavaScript SDK.
- Added methods for stack trace collection, stack trace context
- Updated file upload mechanism for tracing
- Changed API handling to support throwing API errors with traces

> **Note**
> For functions like `aptInstall`, `fromRegistry` which call `.run` and
`.fromImage`, the stack trace has to be replaced so it throws correctly
from parent.

> **Note**
> There are no build logs in the trace, we can add this at later point.

### Examples

Keep in mind that the way the traces are rendered entirely depends on
environment (Bun, Node, Deno, Vitest, Pytest)

**Standard Python**

```
Traceback (most recent call last):
  File "/Users/mish/Documents/Projects/E2B/E2B/packages/python-sdk/tests/sync/template_sync/test_stacktrace.py", line 17, in <module>
    Template.build(
    ~~~~~~~~~~~~~~^
        template,
        ^^^^^^^^^
    ...<2 lines>...
        memory_mb=1024,
        ^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/mish/Documents/Projects/E2B/E2B/packages/python-sdk/e2b/template_sync/main.py", line 157, in build
    wait_for_build_finish(
    ~~~~~~~~~~~~~~~~~~~~~^
        api_client,
        ^^^^^^^^^^^
    ...<4 lines>...
        stack_traces=template._template._stack_traces,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/mish/Documents/Projects/E2B/E2B/packages/python-sdk/e2b/template_sync/build_api.py", line 199, in wait_for_build_finish
    raise BuildException(error_message).with_traceback(stack_trace)
  File "/Users/mish/Documents/Projects/E2B/E2B/packages/python-sdk/tests/sync/template_sync/test_stacktrace.py", line 12, in <module>
    .run_cmd("cat non_existing_file.txt")
     ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
e2b.template.exceptions.BuildException: failed to run command: exit status 1
```

**Pytest**

```
[gw0] darwin -- Python 3.13.3 /Users/mish/Library/Caches/pypoetry/virtualenvs/e2b-e6GdLxLZ-py3.13/bin/python

    @pytest.mark.skip_debug()
    def test_build():
        template = (
            Template()
            .from_image("ubuntu:22.04")
            .run_cmd("cat non_existing_file.txt")
            .set_workdir("/app")
            .set_start_cmd("echo 'Hello, world!'", wait_for_timeout(10_000))
        )
    
        # try:
>       Template.build(
            template,
            alias=str(uuid4()),
            cpu_count=1,
            memory_mb=1024,
        )

tests/sync/template_sync/test_stacktrace.py:18: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
e2b/template_sync/main.py:157: in build
    wait_for_build_finish(
e2b/template_sync/build_api.py:199: in wait_for_build_finish
    raise BuildException(error_message).with_traceback(stack_trace)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    @pytest.mark.skip_debug()
    def test_build():
        template = (
            Template()
            .from_image("ubuntu:22.04")
>           .run_cmd("cat non_existing_file.txt")
            .set_workdir("/app")
            .set_start_cmd("echo 'Hello, world!'", wait_for_timeout(10_000))
        )
E       e2b.template.exceptions.BuildException: failed to run command: exit status 1

tests/sync/template_sync/test_stacktrace.py:12: BuildException
========================================================== short test summary info ==========================================================
FAILED tests/sync/template_sync/test_stacktrace.py::test_build - e2b.template.exceptions.BuildException: failed to run command: exit status 1
```

**Node**

```
node:internal/modules/run_main:104
    triggerUncaughtException(
    ^

    at file:///Users/mish/Documents/Projects/E2B/E2B/packages/js-sdk/tests/template/trace.test.mts:8:4
    at ModuleJob.run (node:internal/modules/esm/module_job:274:25)
    at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5) {
  name: 'BuildError'
}

Node.js v23.11.0
```

**Bun**

```
1 | export class BuildError extends Error {
2 |   constructor(message: string, stackTrace?: string) {
3 |     super(message)
        ^
BuildError: failed to run command: exit status 1
      at /Users/mish/Documents/Projects/E2B/E2B/packages/js-sdk/src/template/errors.ts:3:5

Bun v1.2.4 (macOS arm64)
```

**Vitest**

```
BuildError: failed to run command: exit status 1
 ❯ tests/template/trace.test.ts:8:6
      6|   const template = Template()
      7|     .fromImage('ubuntu:22.04')
      8|     .runCmd('cat folder/test.txt')
       |      ^
      9|     .setWorkdir('/app')
     10|     .setStartCmd('echo "Hello, world!"', waitForTimeout(10_000))
```

---------

Co-authored-by: Jakub Dobry <jakub.dobry8@gmail.com>
2025-09-19 12:34:08 +02:00
github-actions[bot] fba88a7aea [skip ci] Release new versions 2025-09-15 05:30:29 +00:00
Mish Ushakov c6efe1f26c CLI: format table > pretty to match rest of DX, added docs (#905)
Follow up my last PR, improves DX consistency and added docs.

Changelog

- format "table" > "pretty" to match other commands (metrics, logs)
- added doc section
2025-09-14 22:27:29 -07:00
github-actions[bot] 742ed67a80 [skip ci] Release new versions 2025-09-12 19:51:16 +00:00
Mish Ushakov 2a346bfcd2 Added format option to CLI sandbox + templates list (#903)
This PR is based on https://github.com/e2b-dev/E2B/pull/902, please
proceed with that first

**Changelog**

- Added `--format` option to "e2b sandbox list" and "e2b template list".
Can either be "table" or "json"

Sandboxes list in JSON format

<img width="471" height="341" alt="Screenshot 2025-09-12 at 11 17 45"
src="https://github.com/user-attachments/assets/13455b62-5efb-4b11-8fe3-a39b3fb6dffc"
/>

Templates list in JSON format

<img width="449" height="377" alt="Screenshot 2025-09-12 at 11 18 55"
src="https://github.com/user-attachments/assets/47fa3c2b-2e4c-4854-a87f-65c325261521"
/>
2025-09-12 21:47:07 +02:00
Mish Ushakov a116679b87 CLI: Refactored sandbox kill command (#904)
**Changelog**

- Added ability to pass multiple sandbox ids to "sbx kill id1 id2 id3"
- Added ability to filter sandboxes to be killed by metadata and by
state using --state, --metadata (requires --all)
- Fixed metadata parser and moved to utils
2025-09-12 21:45:25 +02:00
github-actions[bot] 9cbcaa40c4 [skip ci] Release new versions 2025-09-09 19:57:39 +00:00
Mish Ushakov 3d6418184f Add custom registries support for pulling base images (#897)
### Changelog

- added support for pulling base images from AWS, Docker, GCP
registries.
- removed unnecessary conversion in build_api.py.
- synced serialize implementation in TypeScript and Python.
- added Cursor Pylance config (side-effect, can delete if unwanted).

### Examples

**TypeScript**

```ts
import { Template } from 'e2b'

// Generic Docker registry
Template().fromRegistry('ubuntu:22.04', {
  username: 'jirka',
  password: 'password',
})

// AWS ECR registry
Template().fromAWSRegistry('ubuntu:22.04', {
  accessKeyId: '123',
  secretAccessKey: '456',
  region: 'eu-west-1',
})

// GCP GCR registry from file path
Template().fromGCPRegistry('ubuntu:22.04', {
  serviceAccountJSON: './service_account.json',
})

// GCP GCR registry from object
Template().fromGCPRegistry('ubuntu:22.04', {
  serviceAccountJSON: { project_id: '123', private_key_id: '456' },
})
```

**Python**

```py
from e2b import Template

# Generic Docker registry
Template().from_registry(
    image="ubuntu:22.04",
    username="jirka",
    password="password",
)

# AWS ECR registry
Template().from_aws_registry(
    image="ubuntu:22.04",
    access_key_id="123",
    secret_access_key="456",
    region="eu-west-1",
)

# GCP GCR registry from file path
Template().from_gcp_registry(
    image="ubuntu:22.04",
    service_account_json="./service_account.json",
)

# GCP GCR registry from object
Template().from_gcp_registry(
    image="ubuntu:22.04",
    service_account_json={"project_id": "123", "private_key_id": "456"},
)
```
2025-09-09 19:51:40 +00:00
Mish Ushakov 79d4ce34e2 Templates SDK: simplify exports (#898)
- Removed unnecessary deep export chains
2025-09-08 08:38:16 -07:00
github-actions[bot] 448beca40c [skip ci] Release new versions 2025-09-08 05:23:08 +00:00
Mish Ushakov 44365999e1 Vendor strip-ansi npm module to avoid ESM-related issues (#895)
- Fixes #894
2025-09-08 08:17:25 +03:00
github-actions[bot] bee91610dc [skip ci] Release new versions 2025-09-06 10:58:21 +00:00
Jakub Dobry 6fc97604f7 Add ready command for JS and Python (#893) 2025-09-06 03:52:42 -07:00
github-actions[bot] 9d82bd60fc [skip ci] Release new versions 2025-09-05 20:06:19 +00:00
Mish Ushakov 4a2a6c7051 Add Templates SDK (#871)
### Merge Templates SDK into E2B SDK.

This PR merges code from Templates SDK to E2B SDK.

**Changelog**

- Added new error classes: BuildError, FileUploadError.
- Added template API endpoints to API Client generation (Python).
- Updated API Clients error handling to throw BuildError in addition to
SandboxError.
- Exported Template and TemplateAsync classes.
- Moved `getRuntime` utility method from api to utils.
- Browser is supported except file operations (COPY). Incompatible
modules are not bundled, using dynamic imports (tar, glob) in supported
environments (Node, Deno, Bun) instead.
- Basic tests were added, subject to expansion in a follow-up PR.
- Breaking: Before, 401 error was raising `SandboxError`, which was
incorrect, now it will raise `AuthenticationError`. I have also changed
the `AuthenticationError` to extend Error class, not `SandboxError`
anymore as it's now thrown by both Sandbox and Template.

**Usage**

JavaScript

```js
import { Template } from 'e2b';

const template = Template()
  .fromImage('ubuntu:22.04')
  .copy('folder/*.txt', 'folder', { forceUpload: true })
  .setEnvs({
    ENV_1: 'value1',
    ENV_2: 'value2',
  })
  .runCmd('cat folder/test.txt')
  .setWorkdir('/app')
  .setStartCmd('echo "Hello, world!"', Template.waitForTimeout('10s'))

await Template.build(template, {
  alias: 'test-template',
  cpuCount: 1,
  memoryMB: 1024,
  onBuildLogs: (logEntry) => console.log(logEntry.toString()),
})

```

Python

```py
from e2b import Template

template = (
    Template()
    .from_image("ubuntu:22.04")
    .copy("folder/*.txt", "folder", force_upload=True)
    .set_envs(
        {
            "ENV_1": "value1",
            "ENV_2": "value2",
        }
    )
    .run_cmd("cat folder/test.txt")
    .set_workdir("/app")
    .set_start_cmd("echo 'Hello, world!'", Template.wait_for_timeout("10s"))
)

Template.build(
    template,
    alias="test-template",
    cpu_count=1,
    memory_mb=1024,
    on_build_logs=lambda log_entry: print(log_entry),
)
```

Python Async

```py
from e2b import AsyncTemplate

template = (
    AsyncTemplate()
    .from_image("ubuntu:22.04")
    .copy("folder/*.txt", "folder", force_upload=True)
    .set_envs(
        {
            "ENV_1": "value1",
            "ENV_2": "value2",
        }
    )
    .run_cmd("cat folder/test.txt")
    .set_workdir("/app")
    .set_start_cmd("echo 'Hello, world!'", Template.wait_for_timeout("10s"))
)

await AsyncTemplate.build(
    template,
    alias="test-template",
    cpu_count=1,
    memory_mb=1024,
    on_build_logs=lambda log_entry: print(log_entry),
)
```

---

Merge progress

- [x] JavaScript SDK
- [x] Python SDK
- [x] Tests
- [x] Split files for review
2025-09-05 22:00:22 +02:00
github-actions[bot] 2162c6191f [skip ci] Release new versions 2025-09-03 12:49:17 +00:00
Mish Ushakov 67070bb9ea Synced spec + generated API client (#889)
Changelog

- Synced latest spec from e2b-dev/infra
- Regenerated API clients
2025-09-03 05:43:47 -07:00
github-actions[bot] 787a3192ce [skip ci] Release new versions 2025-09-03 12:01:10 +00:00
Jakub Novák cf0bb40ed3 Fix autopause (#876)
# Description

Autopause option shouldn't be passed for resume
2025-09-03 11:48:12 +00:00
github-actions[bot] 0070938d01 [skip ci] Release new versions 2025-09-01 07:47:17 +00:00
Jakub Novák 99b9ed768d Deprecate spawn instead of remove (#885)
Adds a deprecated `spawn` command to the CLI, ensuring backward
compatibility and guiding users toward the preferred `create` command.


```
$ e2b sandbox
Usage: index sandbox|sbx [options] [command]

work with sandboxes

Options:
  -h, --help                        display help for command

Commands:
  connect|cn <sandboxID>            connect terminal to already running sandbox
  list|ls [options]                 list all sandboxes, by default it list only running ones
  kill|kl [options] [sandboxID]     kill sandbox
  create|cr [options] [template]    create sandbox and connect terminal to it
  logs|lg [options] <sandboxID>     show logs for sandbox
  metrics|mt [options] <sandboxID>  show metrics for sandbox
  help [command]                    display help for command
  ```
  
  ```
$ sbx sp base
Warning: The 'spawn' command is deprecated and will be removed in future releases. Please use 'e2b sandbox create' instead.
Terminal connecting to template base with sandbox ID in897x2dqs7aws8h1x0in
```
2025-09-01 07:44:10 +00:00
Jakub Novák b42ab2a86b Add pipeline for linting and formatting (#883)
Setup linting and formatting in all packages
2025-08-31 12:06:00 -07:00
Jakub Novák a5f4802ec5 Add migration guide to docs (#870)
Adds migration guide for SDK v2
Adds mentions about auto pause

https://e2b-web-git-migration-guide-v2.e2b-preview.dev/docs/migration/v2

---------

Co-authored-by: Vasek Mlejnsky <vasek@e2b.dev>
2025-08-28 01:21:43 -07:00
github-actions[bot] 663d832ddc [skip ci] Release new versions 2025-08-22 09:45:46 +00:00
Jakub Novák c2195d832f Fix API key check in JS SDK & remove deprecated fields (#869)
Fix the check and remove deprecated fields
2025-08-22 09:42:49 +00:00