Changelog

User-visible changes in each Elide release. Releases are ordered newest first, with routine dependency and CI-only work omitted.

Inside Elide 1.6.0

Python becomes an optional download that elide setup python adds. Projects gain workspaces, a shared build cache, and export to Maven and IntelliJ. WebAssembly runs as an experimental language.

On one 24-core Linux workstation, elide run hello.js starts in 2.1 ms (Node.js 11.4 ms, Deno 6.1 ms), and a Python hello world in 4.8 ms (CPython 6.0 ms). With default settings, a fetch-handler server answered 600,000 to 710,000 requests per second: two to four times Bun and Deno, and six to seven times Node.js. Elide serves on several threads by default; Bun, Deno, and Node.js serve on one.

hyperfine timing hello world in Elide, Node.js, Bun, Deno, and CPython
Hello-world startup measured with hyperfine: 10 warmup runs, then 100 measured. Elide 1.6.0, Node.js 24.21, Bun 1.4.2, Deno 2.9.7, CPython 3.14.4.
wrk measuring a hello-world HTTP server in Elide, Bun, Deno, and Node.js
A 13-byte response served with default settings. Each server runs on the same 24 CPUs and wrk on the other 24, with wrk -t12 -c256 -d10s after a 5-second warmup. Results vary between runs; this recording shows one.
LatestOctober 9, 2026

Elide 1.6.0

Python as an optional component, workspaces, a shared build cache, experimental WebAssembly, Kotlin 2.5, and faster startup and HTTP serving.

Release archive
Added
  • Install Python only when you need it: elide setup python, --with-python, or ELIDE_WITH_PYTHON=1 for npm.
  • Build several projects as one workspace with workspace { members { ... } } in the root elide.pkl.
  • Share a build cache between machines with ELIDE_REMOTE_CACHE=<url>.
  • ELIDE_REMOTE_CACHE_POLICY=smart transfers a cache entry only when that is faster than rebuilding it.
  • Limit build concurrency with elide build --workers=N.
  • Unknown, missing, or misspelled build options fail before any task runs and name the closest match.
  • ELIDE_BUILD_TELEMETRY writes a local Chrome trace of the build.
  • Select JVM tests with --select=class:..., method:..., or package:..., and by tag with --include-tag.
  • jvm.flags apply to JVM tests, and jvm.defs apply to runs, tests, start scripts, and container images.
  • project("core").friend() lets a workspace member see a sibling's Kotlin internal declarations.
  • kotlin.features and kotlin.plugins configure Kotlin compiler plugins in elide build.
  • elide kotlinc --abi-only (experimental) emits only a Kotlin ABI jar.
  • Replace a Maven artifact with a local jar using dependencies.maven.substitutions.
  • Jar packaging applies excludes, keeps requested classifiers, and merges META-INF/services.
  • elide run and elide test exit with the program's own exit code.
  • --allow-env[=NAMES] lets a manifest read environment variables outside the default allowlist.
  • Serve from several application contexts with --contexts=N or --contexts=auto.
  • elide project export prints the manifest as JSON, a Maven POM, or an IntelliJ project.
  • Run WASI commands with elide run app.wasm (experimental).
  • Load WASM libraries from JavaScript and TypeScript with the WebAssembly API or import.
  • Compile JVM applications to WebAssembly with elide native-image.
  • Package a runnable JVM application, with start scripts and archives, as a Jvm.JvmApplication artifact.
  • Run Java annotation processors declared under processors.
  • Limit the heap with --max-mem=512m; one-shot runs default to a 4 GB limit.
  • Collect JaCoCo coverage from runs with elide run --coverage.
Changed
  • Serving and fetch use the native transport by default on Linux and macOS; --transport=nio selects the portable one.
  • HTTP serving and fetch handle more requests per second.
  • JavaScript, TypeScript, and Python programs start faster.
  • A program starts only the languages it uses; --interop lets JavaScript, TypeScript, and Python call each other.
  • Source sets follow convention (src/<set>/<language>, src/<set>, then flat src or test).
  • elide test stops discovery at a nested project; name its path to run it.
  • A --release build no longer counts as up to date after a debug build.
  • Plain http:// Maven repositories are refused except on loopback; --allow-http-repositories allows them.
  • --timeout kills the run's whole process tree before exiting 124.
  • NODE_TLS_REJECT_UNAUTHORIZED=0 prints Node's warning once.
  • jvmstat data is off by default; --vmstat makes the process visible to jps, jstat, and jcmd.
  • Development, MCP, and CDP servers accept only local Host and Origin values; elide mcp reads ELIDE_MCP_TOKEN.
  • A pinned version that is not installed prompts before downloading; ELIDE_AUTO_INSTALL=1 answers yes.
  • elide project export replaces elide manifest.
  • Java compiles with --release, targeting jvm.target or Java 21.
  • Release channels are release and nightly; preview is gone.
  • Patch releases only add manifest schema properties; a removed property names the schema to move to.
  • JVM coverage reports go under .dev/reports/coverage/jvm/.
  • A top-level coverage block in elide.pkl replaces testing.coverage.
Fixed
  • Containers with a private cgroup namespace (the Docker and Podman default) get their memory and CPU limits.
  • Fix a startup crash on linux-arm64, and Windows startup and directory-watcher regressions.
  • Python: bz2, lzma, and multiprocessing spawn pools work.
  • Python: thread switching, gc.collect(), warnings, and ProcessPoolExecutor shutdown match CPython.
  • fetch retries an idempotent request on a closed keep-alive connection; https applies ca.
  • Node: MessagePort, BroadcastChannel, dgram, net, dns, and fs match Node.
  • Node: streams, vm, AsyncLocalStorage, signals, and child-process IPC match Node.
  • HTTP serving answers 413 for oversized uploads and 400 for malformed or conflicting headers.
  • Static files with percent-encoded paths resolve.
  • The development server reloads only when files change.
  • REPL: Ctrl+C no longer resets an idle session, and Ctrl+D exits a runaway evaluation.
  • elide init and archive extraction refuse entries that escape the target directory.
  • Crash reports refuse a planted directory and read ELIDE_SYS_TMP.
  • --allow-run=name no longer allows a path-qualified command of that name.
  • elide install no longer hangs on a TLS server that requires a client certificate; javac applies -encoding.
  • Kotlin: elide run file.kt works with compiler plugins; changing kotlin.features recompiles.
  • elide build --workers 2 is refused with the --workers=2 spelling named.
  • Tests: a suite that skips itself reports as skipped; every --exec file is included in the JaCoCo report.
  • MCP build/cancel reports cancelled=true only when it stopped a build.
  • --heap-dump-on-oom exits after writing the dump.
  • elide serve keeps the newest request visible; subcommand help shows its footer.
  • Nightly versions pinned by date no longer re-download.
Maintenance
  • Kotlin 2.5.0-Beta1; manifests accept Kotlin language and API level 2.5.
  • JDK 25.0.4.
  • Python 3.13.

Recent releases

Earlier releases

Versions 1.0 through 1.2 and the pre-1.0 Classic line are retained for teams maintaining older projects. New projects should use the current release line.

Browse the complete release archive