Skip to content
Projects

egraphs-good/egg has 1,862 GitHub stars and 212 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-08 01:09 UTC. Last push 2026-09-28.

How these counts are measured

egg is a flexible, high-performance e-graph library

Measured star growth

in 24h
0
in 7 days
Collecting history
in 15 days
Collecting history
in 1 month
Collecting history

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original

egg logo egg: egraphs good

Crates.io Released Docs.rs Main branch docs Zulip

egg is a library for e-graphs and equality saturation. It can be used to build program optimizers, synthesizers, verifiers, and more. For more information, see these resources:

Also check out the egglog system that provides an alternative approach to equality saturation based on Datalog. It features a language-based design, incremental execution, and composable analyses. See also the paper and the egglog web demo.

Are you using egg? Please cite using this BibTeX citation and add your project to the "Awesome E-graphs" page!

Using egg

Add egg to your Cargo.toml like this:

[dependencies]
egg = "0.11.0"

Make sure to compile with --release if you are measuring performance!

Clock selection

By default, egg uses Quanta for timing. Quanta can make clock reads cheaper, but may take up to 200 ms to initialize. For faster startup with std::time::Instant, set these options on your existing egg dependency:

[dependencies.egg]
# Keep your existing dependency source here.
default-features = false
features = ["std"]

Developing

It's written in Rust. Typically, you install Rust using rustup.

Run cargo doc --open to build and open the documentation in a browser.

Before committing/pushing, make sure to run make, which runs all the tests and lints that CI will (including those under feature flags). This requires the cbc solver due to the lp feature.

Tests

Running cargo test will run the tests. Some tests may time out; try cargo test --release if that happens.

There are a couple interesting tests in the tests directory:

  • prop.rs implements propositional logic and proves some simple theorems.
  • math.rs implements real arithmetic, with a little bit of symbolic differentiation.
  • lambda.rs implements a small lambda calculus, using egg as a partial evaluator.

Benchmarking

To get a simple csv of the runtime of each test, you set the environment variable EGG_BENCH_CSV to something to append a row per test to a csv.

Example:

EGG_BENCH_CSV=math.csv cargo test --test math --release -- --nocapture --test --test-threads=1

Explore related projects