Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

salsa-rs/salsa

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

salsa-rs/salsa.json
{
"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-21T07:49:09Z",
"stargazersCount": 2605,
"topics": [],
"updatedAt": "2025-11-21T07:48:36Z",
"url": "https://github.com/salsa-rs/salsa"
}

Test Book Released API docs Crates.io

A generic framework for on-demand, incrementalized computation.

Salsa Logo

Very much a WORK IN PROGRESS at this point.

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.

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.

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

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

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.