Skip to content

Commit cbebf3e

Browse files
koki-developclaude
andcommitted
feat: add Python 3.13.12 runtime support
Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 50b6183 commit cbebf3e

7 files changed

Lines changed: 456 additions & 19 deletions

File tree

CLAUDE.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
44

55
## Project Overview
66

7-
A code execution sandbox service that runs arbitrary code inside Linux namespace jails (nsjail). Supports Node.js, Ruby, Go, and Bash runtimes. Exposes an HTTP API to receive code, execute it in an isolated environment, and return the output.
7+
A code execution sandbox service that runs arbitrary code inside Linux namespace jails (nsjail). Supports Node.js, Ruby, Go, Python, and Bash runtimes. Exposes an HTTP API to receive code, execute it in an isolated environment, and return the output.
88

99
## Development Setup
1010

@@ -87,7 +87,7 @@ Comprehensive nsjail reference documentation lives in `.context/docs/nsjail/`. C
8787

8888
### POST /v1/run
8989

90-
Request (`runtime` is required, must be `"node"`, `"ruby"`, `"go"`, or `"bash"`):
90+
Request (`runtime` is required, must be `"node"`, `"ruby"`, `"go"`, `"python"`, or `"bash"`):
9191
```json
9292
{"runtime": "node", "files": [{"name": "index.js", "content": "<base64-encoded source>"}]}
9393
```
@@ -99,4 +99,4 @@ Response:
9999

100100
Possible `status` values: `"OK"`, `"SIGNAL"`, `"TIMEOUT"`, `"OUTPUT_LIMIT_EXCEEDED"`.
101101

102-
`compile`: Compilation step result (same schema as `run`). `null` for non-compiled runtimes (node, ruby, bash). When compilation fails, `run` is `null`.
102+
`compile`: Compilation step result (same schema as `run`). `null` for non-compiled runtimes (node, ruby, python, bash). When compilation fails, `run` is `null`.

Dockerfile

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ ARG TARGETARCH
44

55
RUN ARCH=$([ "$TARGETARCH" = "arm64" ] && echo "arm64" || echo "x64") && \
66
wget -qO /usr/local/bin/mise \
7-
"https://github.com/jdx/mise/releases/download/v2026.2.23/mise-v2026.2.23-linux-${ARCH}-musl" && \
7+
"https://github.com/jdx/mise/releases/download/v2026.2.23/mise-v2026.2.23-linux-${ARCH}" && \
88
chmod +x /usr/local/bin/mise
99

1010
# ---
@@ -21,12 +21,15 @@ COPY --from=mise /usr/local/bin/mise /usr/local/bin/mise
2121

2222
ENV MISE_DATA_DIR="/mise"
2323

24+
# Node.js
2425
ENV PATH="/mise/installs/node/24.14.0/bin:$PATH"
2526
RUN mise use -g node@24.14.0
2627

28+
# Ruby
2729
ENV PATH="/mise/installs/ruby/3.4.8/bin:$PATH"
2830
RUN mise settings ruby.compile=false && mise use -g ruby@3.4.8
2931

32+
# Go
3033
ENV PATH="/mise/installs/go/1.26.0/bin:$PATH"
3134
RUN mise use -g go@1.26.0
3235
RUN CGO_ENABLED=0 GOCACHE=/mise/go-cache go build std
@@ -36,6 +39,11 @@ RUN cd /tmp/preinstall && \
3639
GOMODCACHE=/mise/go-modcache go mod download && \
3740
rm -rf /tmp/preinstall
3841

42+
# Python
43+
ENV PATH="/mise/installs/python/3.13.12/bin:$PATH"
44+
RUN mise use -g python@3.13.12
45+
46+
# Install tools for sandbox
3947
RUN apt-get update && \
4048
apt-get install -y --no-install-recommends \
4149
curl wget mawk && \

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Codize Sandbox is a code execution engine that runs arbitrary code safely inside
3737
| Node.js | `node` |
3838
| Ruby | `ruby` |
3939
| Go | `go` |
40+
| Python | `python` |
4041
| Bash | `bash` |
4142

4243
## Usage
@@ -115,7 +116,7 @@ Request:
115116
}
116117
```
117118

118-
- `runtime` (required): one of `"node"`, `"ruby"`, `"go"`, `"bash"`
119+
- `runtime` (required): one of `"node"`, `"ruby"`, `"go"`, `"python"`, `"bash"`
119120
- `files` (required): array of source files. `content` is Base64-encoded. The first file in the array is used as the entrypoint
120121

121122
Response:
@@ -134,7 +135,7 @@ Response:
134135
}
135136
```
136137

137-
- `compile`: compilation result (same schema as `run`). `null` for interpreted runtimes (node, ruby, bash). When compilation fails, `run` is `null`
138+
- `compile`: compilation result (same schema as `run`). `null` for interpreted runtimes (node, ruby, python, bash). When compilation fails, `run` is `null`
138139
- `run`: execution result. `null` when compilation fails
139140
- `stdout` / `stderr` / `output`: Base64-encoded output. `output` is the interleaved combination of stdout and stderr
140141
- `exit_code`: process exit code

e2e/tests/api/validation.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ tests:
3939
- name: "unknown runtime"
4040
requests:
4141
- input:
42-
runtime: python
42+
runtime: java
4343
files:
44-
- name: main.py
44+
- name: Main.java
4545
type: plain
4646
content: |
47-
print("hello")
47+
class Main { public static void main(String[] args) {} }
4848
output:
4949
status: 400
5050
body:
@@ -53,7 +53,7 @@ tests:
5353
message: "request validation failed"
5454
errors:
5555
- path: ["runtime"]
56-
message: 'must be one of "bash", "go", "node", "ruby"'
56+
message: 'must be one of "bash", "go", "node", "python", "ruby"'
5757

5858
- name: "missing files"
5959
requests:

0 commit comments

Comments
 (0)