salsa-rs/salsa
{ "createdAt": "2018-09-28T14:56:12Z", "defaultBranch": "master", "description": "A generic framework for on-demand, incrementalized computation. Inspired by adapton, glimmer, and rustc's query system.", "fullName": "salsa-rs/salsa", "homepage": "https://salsa-rs.netlify.app/", "language": "Rust", "name": "salsa", "pushedAt": "2025-11-26T07:48:59Z", "stargazersCount": 2607, "topics": [], "updatedAt": "2025-11-27T00:24:17Z", "url": "https://github.com/salsa-rs/salsa"}A generic framework for on-demand, incrementalized computation.
Obligatory warning
Section titled “Obligatory warning”Very much a WORK IN PROGRESS at this point.
Credits
Section titled “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
Section titled “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?
Section titled “Want to learn more?”To learn more about Salsa, try one of the following:
- read the heavily commented examples;
- check out the Salsa book;
- watch one of our videos.
Getting in touch
Section titled “Getting in touch”The bulk of the discussion happens in the issues and pull requests, but we have a zulip chat as well.
Contributing
Section titled “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.