An MLIR-based toolchain for homomorphic encryption compilers. Read the docs at the HEIR website.
For more information on MLIR, see the MLIR homepage.
Pip install the heir_py package
pip install heir_pyThen run an example:
from heir import compile
from heir.mlir import I64, Secret
@compile() # defaults to scheme="bgv", OpenFHE backend, and debug=False
def func(x: Secret[I64], y: Secret[I64]):
sum = x + y
diff = x - y
mul = x * y
expression = sum * diff + mul
deadcode = expression * mul
return expression
func.setup()
enc_x = func.encrypt_x(7)
enc_y = func.encrypt_y(8)
result_enc = func.eval(enc_x, enc_y)
result = func.decrypt_result(result_enc)
print(
f"Expected result for `func`: {func.original(7,8)}, FHE result:"
f" {result}"
)This will compile the function above using the BGV scheme to machine code via
the OpenFHE backend.
Then calling the function will encrypt the inputs, run the function, and return
the decrypted result. The function call foo(7, 8) runs the entire
encrypt-run-decrypt flow for ease of testing.
HEIR requires a recent C compiler (see
clang_matrix
for version-specific support, recent GCCs also tend to work), and some backends
like OpenFHE require libomp-dev.
HEIR depends on LLVM (from source) so a clean build may take 15-30 minutes depending on your machine.
This project uses bazel for its build system. Install
bazelisk to manage the bazel version
automatically. Then, with bazel on your path (pointing to bazelisk), run the
following to build the main pass-running tool.
bazel build //tools:heir-optOr run an end-to-end test like
bazel test //tests/Examples/openfhe/ckks/halevi_shoup_matvec:allSee the bazel tips page for more example commands and tips on using bazel.
| Backend Library | BGV | BFV | CKKS | CGGI |
|---|---|---|---|---|
| OpenFHE | ✅ | ✅ | ✅ | ❌ |
| Lattigo | ✅ | ✅ | ✅ | ❌ |
| tfhe-rs | ❌ | ❌ | ❌ | ✅ |
| Jaxite | ❌ | ❌ | ❌ | ✅ |
Note some backends do not support all schemes.
There are many ways to contribute to HEIR:
- Come to our monthly meetings to discuss active work on HEIR and future project directions. The meetings are recorded and posted to our blog and YouTube channel.
- Come to our weekly office hours for informal discussions and debugging help.
- Ask questions or discuss feature ideas in the
#heirchannel on the FHE.org discord. - Work on an issue marked "good first issue" or browse issues labeled by topic.
- Help us understand new FHE research: either
- Read a paper tagged under research synthesis and summarize the novel techniques that could be ported to HEIR.
- File new issues under research synthesis to alert us of papers that should be investigated and incorporated into HEIR.
The HEIR project can be cited in in academic work through following entry:
@misc{ali2025heir,
title={HEIR: A Universal Compiler for Homomorphic Encryption},
author={Asra Ali and Jaeho Choi and Bryant Gipson and Shruthi Gorantala
and Jeremy Kun and Wouter Legiest and Lawrence Lim and Alexander
Viand and Meron Zerihun Demissie and Hongren Zheng},
year={2025},
eprint={2508.11095},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2508.11095},
}
This is not an officially supported Google product.