46 releases (20 breaking)

new 0.21.1 May 1, 2025
0.20.0 Apr 22, 2025
0.19.0 Mar 10, 2025
0.17.0-pre.2 Oct 6, 2021
0.8.0 Nov 1, 2018

#36 in Database interfaces

Download history 8470/week @ 2025-01-11 8511/week @ 2025-01-18 10586/week @ 2025-01-25 16036/week @ 2025-02-01 15537/week @ 2025-02-08 18337/week @ 2025-02-15 20827/week @ 2025-02-22 18727/week @ 2025-03-01 19328/week @ 2025-03-08 17475/week @ 2025-03-15 21697/week @ 2025-03-22 30041/week @ 2025-03-29 22178/week @ 2025-04-05 32212/week @ 2025-04-12 33459/week @ 2025-04-19 27547/week @ 2025-04-26

119,527 downloads per month
Used in 77 crates (28 directly)

Apache-2.0 OR MIT

1.5MB
8K SLoC

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.

Dependencies

~4–28MB
~380K SLoC