Fresh search state. No container wait.
A fresh state for every test—not a fresh search engine
Section titled “A fresh state for every test—not a fresh search engine”Reuse one seeded base. Read-only tests can query it directly; a test that changes documents, mappings, or index state gets its own copy-on-write fork. Only an index the test mutates is copied.
Average time to a seeded test environment
Local means. osmem loads the 525-byte seed; container paths use a warm image and stop at a successful PUT /benchmark.
Memory while the server is ready
Docker rows show Docker-reported container memory. Testcontainers uses a 1 GiB tmpfs for OpenSearch data and adds its Go runner RSS increase over baseline.
Clone creation for mutating tests
Forking an already-built Japanese-enabled index. Writes and cleanup are excluded.
A route-table caching fix landed the same day this was measured—Go's in-process Clone() is now faster than any previously published number; see the performance page.
Linked binary and first-download footprint
Same decimal-MB scale; these bars describe different things, not interchangeable package sizes.
Re-measured 2026-09-16, after an OpenSearch 3.8 compatibility pass and two performance changes (in-memory segment merging, typed top-K sort execution)—see the measurement page for the before/after. The Go startup chart shows the embedded path: Japanese-disabled measures initialization without kuromoji, while Japanese-enabled includes kuromoji analyzer initialization. Its timer covers New()+LoadSeed() for the 525-byte seed. Python, Java, and Node.js SDK startup results and ranges are on the measurement page. Clone timing measures creation only: Go 5,000 × 5; each SDK 300 clones. Devbox starts the same Docker-backed OpenSearch service through process-compose; its first environment download is the Maven/JDK toolchain, not the server image. Server container paths use a cached image; Testcontainers mounts its data path on a 1 GiB tmpfs and its first trial starts Ryuk. Docker-reported container memory excludes the daemon; Testcontainers Go adds only runner RSS increase over its pre-start baseline. Readiness conditions differ, so this is a local path comparison, not a controlled engine ranking.