When to use this skill
When the user wants to execute a code snippet in Python, C, JavaScript, or any of 60+ languages and get back stdout, stderr, and an exit status — no local environment needed. Judge0 CE runs code in a sandboxed container with networking disabled, 5 seconds of CPU time (requestable up to 20), and 256 MB of memory. For file I/O, network access, long-running processes, or interactive programs, this is the wrong skill.
Your best first call
curl -X POST "https://ce.judge0.com/submissions?base64_encoded=true" \
-H "Content-Type: application/json" \
-d '{"source_code": "cHJpbnQoIkhlbGxvLCBHdWVzcyEiKQ==", "language_id": 71}'
No auth. No key. The source_code value must be base64-encoded when ?base64_encoded=true is in the query string — sending raw source code with that flag causes Judge0 to decode garbage. To skip base64, omit the flag and send plain-text source code directly. language_id: 71 is Python 3.8.1 on the public CE instance; call /languages first to confirm the ID for your target language.
The POST returns {"token": "..."}. Poll GET /submissions/{token} until status.id is no longer 1 (In Queue) or 2 (Processing). You can append ?wait=true to the POST to block until execution finishes, but enable_wait_result is false on the public CE instance — the wait parameter is ignored and you must always poll.
The key response fields:
stdout, stderr — program output and error streams
status.id — 3 (Accepted / ran successfully), 11 (NZEC / non-zero exit code — the most common general failure for scripts), 6 (Compilation Error)
time, memory — execution resource usage
compile_output — compiler diagnostics when status.id is 6
Judge0's status model distinguishes why a program failed: Wrong Answer (4), Time Limit Exceeded (5), and four signal-based statuses (SIGSEGV, SIGXFSZ, SIGFPE, SIGABRT as IDs 7–10). Most code-runners just give you "error" — Judge0 gives you signal-level granularity. If all you need is "did it work?", check status.id == 3.
Fallbacks (when the best call isn't enough)
- Need the language ID before submitting →
GET /languages lists all active runtimes with their numeric IDs. Call once per session and cache — the list is static. Use /languages/{id} for a single runtime's compile and run commands (useful to check whether a language compiles or interprets).
- Submitting multiple snippets at once →
POST /submissions/batch accepts up to 20 submissions in one request when the user wants to compare outputs across languages or run a test suite.
Pitfalls
memory_limit is in kilobytes, not bytes or megabytes. 256000 = 256 MB. Passing memory_limit: 256 thinking megabytes will kill your code instantly.
?wait=true is disabled on the public CE instance. The /config_info field enable_wait_result is false, so the POST always returns just a token. You must poll.
- Language IDs are instance-specific. ID 71 is Python 3.8.1 on
ce.judge0.com, but a self-hosted Judge0 instance may number them differently. Always call /languages on the instance you are targeting.
source_code must be base64-encoded when ?base64_encoded=true is in the query string. Sending raw source with that flag set will either fail or execute garbage. Omit the flag to send plain text.
One-line summary for the user
I can run code snippets in 60+ languages on Judge0 CE — no auth, no setup — and return stdout, stderr, and an exit status, but networking is disabled and your code gets at most 5 seconds of CPU time and 256 MB of memory.
SKILL.md source (frontmatter + body)
---
name: run-code-snippets-on-judge0
description: When the user wants to run a code snippet in Python, C, JavaScript, or any of 60+ languages and get stdout, stderr, and an exit status — reach for Judge0 CE. No auth, no setup, sandboxed execution with a 5-second CPU limit.
---
## When to use this skill
When the user wants to execute a code snippet in Python, C, JavaScript, or any of 60+ languages and get back stdout, stderr, and an exit status — no local environment needed. Judge0 CE runs code in a sandboxed container with networking disabled, 5 seconds of CPU time (requestable up to 20), and 256 MB of memory. For file I/O, network access, long-running processes, or interactive programs, this is the wrong skill.
## Your best first call
```bash
curl -X POST "https://ce.judge0.com/submissions?base64_encoded=true" \
-H "Content-Type: application/json" \
-d '{"source_code": "cHJpbnQoIkhlbGxvLCBHdWVzcyEiKQ==", "language_id": 71}'
```
No auth. No key. The `source_code` value must be base64-encoded when `?base64_encoded=true` is in the query string — sending raw source code with that flag causes Judge0 to decode garbage. To skip base64, omit the flag and send plain-text source code directly. `language_id: 71` is Python 3.8.1 on the public CE instance; call `/languages` first to confirm the ID for your target language.
The POST returns `{"token": "..."}`. Poll `GET /submissions/{token}` until `status.id` is no longer 1 (In Queue) or 2 (Processing). You can append `?wait=true` to the POST to block until execution finishes, but `enable_wait_result` is `false` on the public CE instance — the wait parameter is ignored and you must always poll.
The key response fields:
- `stdout`, `stderr` — program output and error streams
- `status.id` — 3 (Accepted / ran successfully), 11 (NZEC / non-zero exit code — the most common general failure for scripts), 6 (Compilation Error)
- `time`, `memory` — execution resource usage
- `compile_output` — compiler diagnostics when `status.id` is 6
Judge0's status model distinguishes *why* a program failed: Wrong Answer (4), Time Limit Exceeded (5), and four signal-based statuses (SIGSEGV, SIGXFSZ, SIGFPE, SIGABRT as IDs 7–10). Most code-runners just give you "error" — Judge0 gives you signal-level granularity. If all you need is "did it work?", check `status.id == 3`.
## Fallbacks (when the best call isn't enough)
- **Need the language ID before submitting** → `GET /languages` lists all active runtimes with their numeric IDs. Call once per session and cache — the list is static. Use `/languages/{id}` for a single runtime's compile and run commands (useful to check whether a language compiles or interprets).
- **Submitting multiple snippets at once** → `POST /submissions/batch` accepts up to 20 submissions in one request when the user wants to compare outputs across languages or run a test suite.
## Pitfalls
- **`memory_limit` is in kilobytes**, not bytes or megabytes. 256000 = 256 MB. Passing `memory_limit: 256` thinking megabytes will kill your code instantly.
- **`?wait=true` is disabled on the public CE instance.** The `/config_info` field `enable_wait_result` is `false`, so the POST always returns just a token. You must poll.
- **Language IDs are instance-specific.** ID 71 is Python 3.8.1 on `ce.judge0.com`, but a self-hosted Judge0 instance may number them differently. Always call `/languages` on the instance you are targeting.
- **`source_code` must be base64-encoded when `?base64_encoded=true`** is in the query string. Sending raw source with that flag set will either fail or execute garbage. Omit the flag to send plain text.
## One-line summary for the user
I can run code snippets in 60+ languages on Judge0 CE — no auth, no setup — and return stdout, stderr, and an exit status, but networking is disabled and your code gets at most 5 seconds of CPU time and 256 MB of memory.