isol8.config.json defines your baseline security, resource, and server behavior.
Config resolution order:
./isol8.config.json(current working directory)~/.isol8/config.json- Built-in defaults
Config files are not merged with each other. isol8 loads the first file it finds (
./isol8.config.json before ~/.isol8/config.json) and then merges that file with built-in defaults.How configuration is applied
- CLI
isol8 run: CLI flags override config defaults. - Library (
DockerIsol8): constructor options are authoritative. - Server API (
isol8 serve): server config establishes defaults, requestoptionsmay override them.
Full schema shape
Use this as a complete reference template. In real configs, you can provide only the sections you need.Fields
Top-Level
Maximum number of concurrent container executions. Enforced by a global semaphore in the server.
defaults
Default values for execution options. These are used when a request doesn’t specify its own values.Default execution timeout in milliseconds.
Default memory limit. Accepts Docker format:
256m, 512m, 1g.Default CPU limit as fraction of one core.
Default network mode:
none, host, or filtered.Default size of the
/sandbox tmpfs mount.Default size of the
/tmp tmpfs mount.network
Network filtering rules forfiltered network mode.
Regex patterns for allowed hostnames. When non-empty, only matching hostnames can be accessed.
Regex patterns for blocked hostnames. Matching hostnames are denied.
cleanup
Server cleanup behavior for stale containers.Whether the server should periodically clean up old containers.
Maximum age of a container in milliseconds before it’s eligible for auto-pruning (default: 1 hour).
dependencies
Packages to bake into custom Docker images when runningisol8 setup.
Python packages (pip install).
Node.js packages (npm install -g).
Bun packages (bun install -g).
Deno module URLs (deno cache).
Alpine apk packages.
remoteCode
Controls URL-based source fetching (ExecutionRequest.codeUrl, isol8 run --url).
Enable remote code fetching. Disabled by default for security.
Allowed URL schemes. Keep this as
https in production.Hostname regex allowlist. Empty means all hosts are allowed unless blocked.
Hostname regex blocklist used for SSRF protection.
Maximum bytes allowed when fetching remote source code.
Timeout for remote source downloads.
Require
codeHash on every URL-based execution.seccomp
Security computing mode profile configuration.The seccomp profile to use:
safety: Blocks known dangerous syscalls (mount, ptrace, kernel modules) while allowing standard runtime operations (blacklist approach).unconfined: Disables seccomp filtering (use with caution).path/to/profile.json: Path to a custom seccomp profile JSON file.
audit
Audit logging configuration for execution provenance and compliance tracking.Enable audit logging. When enabled, every execution is recorded with metadata including code hash, timestamps, and resource usage.
Destination for audit logs. Options:
filesystemorfile: Write to log files (default)stdout: Print to console
Custom directory for audit log files. Defaults to
./.isol8_audit in the current working directory, or the value of ISOL8_AUDIT_DIR environment variable.Path to a script that runs after each audit log entry is written. The script receives the log file path as its first argument. Useful for integrating with external systems like CloudWatch, Splunk, or custom log aggregators.
Track resource usage (CPU percentage, memory MB, network bytes) during execution. Adds slight overhead but useful for billing and monitoring.
Number of days to retain audit log files. Files older than this are automatically cleaned up when the AuditLogger initializes.
Include the full source code in audit logs. Disabled by default for privacy. Enable only when you need complete code provenance.
Include stdout and stderr in audit logs. Disabled by default for privacy. Useful for debugging and compliance scenarios.
Top-level sections
| Field | Type | Default | Used by |
|---|---|---|---|
debug | boolean | false | CLI/server/engine internal logs |
maxConcurrent | number | 10 | Global server concurrency cap |
defaults | object | safe baseline | Engine defaults for runs |
network | object | empty lists | Filter lists for filtered mode |
cleanup | object | prune enabled | Server session lifecycle |
poolStrategy | string | fast | Serve-time pool default |
poolSize | number/object | { clean: 1, dirty: 1 } | Serve-time pool capacity default |
dependencies | object | {} | Custom image setup inputs |
security | object | strict seccomp | Syscall policy |
audit | object | disabled | Audit and telemetry logging |
defaults
These values are applied to every execution unless overridden by CLI flags or request options.
Hard execution timeout in milliseconds. If execution exceeds this, the container is forcibly killed.
Container memory limit (e.g.,
512m, 1g). Code exceeding this will be OOM killed.CPU shares relative to one core.
1.0 allows full usage of one core.Default network egress mode.
none: No network access.filtered: Access allowed only to whitelisted hosts via proxy.host: Full host network access (dangerous).
Size of the writable
/sandbox tmpfs mount where code executes.Size of the
/tmp tmpfs mount (mounted noexec).network
Global hostname rules used when network is set to filtered.
List of regex patterns for allowed hostnames. If non-empty, only matching connections are allowed.
List of regex patterns for denied hostnames. Matches here are blocked even if they match a whitelist rule.
cleanup
Server-side idle session management settings.
cleanup applies to long-running server sessions (isol8 serve). It does not change one-off local CLI runs.Enables the background periodic cleanup loop for idle persistent containers.
Idle time threshold (in milliseconds) before a persistent container is removed. Default is 1 hour.
poolStrategy and poolSize
Server-side pool defaults for engines created by isol8 serve.
These config keys are serve defaults. API calls do not override them per request.
Default pool strategy used by server-created engines.
Default warm pool size used by server-created engines.
dependencies
Runtime-specific packages to bake into custom Docker images during isol8 setup.
List of pip packages (e.g.,
["numpy", "pandas"]).List of global npm packages.
List of global bun packages.
List of Deno module URLs to pre-cache.
List of Alpine packages to install via
apk.security
System-level security policies.
Syscall filtering profile.
strict: Default secure profile.unconfined: No syscall filtering.custom: Use profile fromcustomProfilePath.
Absolute path to a custom seccomp profile JSON file. Required if
seccomp is custom.audit
Telemetry and audit logging configuration.
Master switch to enable audit logging.
Where to write logs. Currently supports
filesystem or stdout.Directory to store audit log files when destination is
filesystem.Whether to record CPU, memory, and network usage metrics for each execution.
Number of days to keep audit logs before auto-deletion.
Security Risk. If true, the full source code of every execution is saved in the logs.
Security Risk. If true, full stdout/stderr capture is saved in the logs.
Practical baseline configs
Secure default for most workloads
API-heavy workload with filtered egress and audit logs
Validation and inspection
- Keep
$schemain your config for IDE validation/autocomplete.
FAQ
Can I combine project and home config files?
Can I combine project and home config files?
No. isol8 picks the first existing config file by search order, then merges that single file with built-in defaults.
Which values are safe defaults for production start?
Which values are safe defaults for production start?
Start with
defaults.network: "none", conservative timeoutMs/memoryLimit, and audit.enabled: false unless you need logging.Where should I set package dependencies for setup images?
Where should I set package dependencies for setup images?
Use the
dependencies section in config (or equivalent flags on isol8 setup) for runtime-specific pre-baked packages.Troubleshooting quick checks
- Config changes not reflected: confirm which file is being loaded (
./isol8.config.jsontakes precedence over~/.isol8/config.json). - Filtered mode not behaving as expected: validate
network.whitelist/network.blacklistregex patterns. - Persistent sessions not being cleaned up: check
cleanup.autoPruneandcleanup.maxContainerAgeMson the server. - Missing audit files: verify
audit.enabled,audit.destination, andaudit.logDirsettings.
See also
Option mapping
See exactly where each option is set across CLI, config, API, and library.
How to CLI
Command-level flags and behavior for
run, setup, serve, and cleanup.Library reference
TypeScript option mapping for
DockerIsol8 and RemoteIsol8.Troubleshooting
Diagnose and fix common runtime and server problems.