A partially ld-compatible incremental linker executable and daemon for
developing Rust applications on macOS and Linux.
Unlike traditional linkers that run as standalone executables, lold is a
daemon process that exposes an IPC server, stays online between link
invocations, keeps project state in memory, and incrementally applies only the
changed object and library files to the resulting binary.
lold is not a general-purpose linker — it targets only Rust linker needs
and development-time incremental linking. For production builds, use another
linker.
- The
loldbinary is a thin facade that delegates linking work to an IPC daemon server, caching as much state as possible between subsequent builds. - Data structures and algorithms are designed for the fastest possible delta/incremental changes; initial linking time may be slower in order to build proper indexes for subsequent updates.
- Advanced lifetime annotations to minimize memory copies.
- High-performance crates for common data structures and algorithms where applicable: e.g. fast (non-cryptographic) hashes, inlineable strings instead of standard strings for small tokens, etc.
- Smallest or most optimal binaries:
loldtrades binary size for faster increments. Sections may be over-provisioned and padded (e.g. 125%) to allow inline rewrites on content changes, preventing full relocation. - Full
ldcompatibility:loldimplements only the subset of GNUldfunctionality needed to support common Rust project compilation. - Windows support: only macOS and Linux are supported.
See docs/FINDINGS.md for decision rationale and findings, and docs/BACKLOG.md for remaining work items.