← Blog

Release v0.9.1

David Cruz · April 12, 2026

Upgrade to the latest version with lde upgrade!

New REPL

lde repl has been rebuilt from scratch with a custom readline implementation — no external dependencies required.

lde repl

repl

The new REPL supports line editing, history, and syntax highlighting, implemented in pure Lua with platform-specific raw terminal handling for both POSIX and Windows. It runs inside the lde environment, so require() works as expected for your project’s dependencies.

Android support

lde now runs natively on Android via Termux. Prebuilt binaries for aarch64-linux-android are included in every release.

The install script handles Android automatically:

curl -fsSL https://lde.sh/install | sh

Native curl, git, and archive libraries

lde’s three core I/O subsystems have been rewritten to use native C bindings rather than shelling out or using pure Lua implementations:

These are compiled ahead of time and bundled into the lde binary.

nogit

Git submodule support

All git clones — including dependency installs — now recursively initialize submodules:

{
	"dependencies": {
		"mylib": { "git": "https://github.com/example/mylib" }
	}
}

If mylib has submodules, they’re cloned too. This was previously only done in some cases.

Test lifecycle hooks

lde-test now supports afterAll and afterEach hooks for teardown logic:

local test = require("lde-test")

test.afterEach(function()
  -- runs after every test in this file
  cleanup()
end)

test.afterAll(function()
  -- runs once after all tests in this file
  db:close()
end)

test.it("does something", function()
  -- ...
end)

afterEach runs after every individual test. afterAll runs once when all tests in the file are done.

Lockfile auto-invalidation on lde add / lde remove

Previously, adding or removing a dependency could leave the installed target/ out of sync until you manually ran lde sync. Now, lde add and lde remove automatically invalidate the lockfile cache so the next lde run or lde sync re-installs cleanly.

Fixes