GitHunt
VE

Veykril/salsa

A generic framework for on-demand, incrementalized computation. Inspired by adapton, glimmer, and rustc's query system.

salsa

Test
Book
Released API docs
Crates.io

A generic framework for on-demand, incrementalized computation.

Salsa Logo

Obligatory warning

Very much a WORK IN PROGRESS at this point.

Credits

This system is heavily inspired by adapton, glimmer, and rustc's query
system. So credit goes to Eduard-Mihai Burtescu, Matthew Hammer,
Yehuda Katz, and Michael Woerister.

Key idea

The key idea of salsa is that you define your program as a set of
queries. Every query is used like function K -> V that maps from
some key of type K to a value of type V. Queries come in two basic
varieties:

  • Inputs: the base inputs to your system. You can change these
    whenever you like.
  • Functions: pure functions (no side effects) that transform your
    inputs into other values. The results of queries are memoized to
    avoid recomputing them a lot. When you make changes to the inputs,
    we'll figure out (fairly intelligently) when we can re-use these
    memoized values and when we have to recompute them.

Want to learn more?

To learn more about Salsa, try one of the following:

Getting in touch

The bulk of the discussion happens in the issues
and pull requests,
but we have a zulip chat as well.

Contributing

To create a release and publish to crates.io, update the version field in Cargo.toml.
After pushed, GitHub Actions will publish the crates to crates.io automatically.

Languages

Rust99.4%CSS0.5%Shell0.1%Just0.0%Emacs Lisp0.0%JavaScript0.0%
Other
Created June 28, 2021
Updated November 1, 2025