Weave it all together

A high-performance, local toolchain for managing monorepos. Build every language in your repo with one command, and skip the work that hasn't changed.

Spend less time waiting on builds

Point Lattice at a monorepo and it takes care of the busywork, so you can get back to writing code.

Builds finish sooner

Repeat a build and the parts that didn't change come straight from cache. You wait for new work, not for work you already did.

One command for the whole repo

Build, test, and run every project in your monorepo the same way, whatever language it's written in. No per-language scripts to remember.

No build scripts to write

List your projects once, and Lattice reads each one's own manifest to work out how it builds. No per-language build scripts to write or keep in sync.

The right tool versions, every time

Lattice pins the compilers and tools each project needs, so a fresh clone builds the same on your laptop and in CI.

Skip work you already did

Your projects and how they build live in one file. Run it, and Lattice rebuilds only what changed since last time.

lattice.json
{
  "workspaces": [
    { "name": "api", "path": "apps/api", "engines": { "go": ">=1.22" } },
    { "name": "web", "path": "apps/web", "engines": { "node": ">=20" } },
    { "name": "ml",  "path": "services/ml", "engines": { "python": ">=3.12" } }
  ],
  "tasks": {
    "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] },
    "test":  { "dependsOn": ["build"] }
  }
}
terminal
$ lattice run build

  api   build   built
  web   build   restored from cache
  ml    build   built

  3 projects, 1 restored from cache

Install and run

Run this in your repo, then ./.lattice/bin/lattice init and a task.