Skip to main content

The HEIR compiler

Project description

HEIR: Homomorphic Encryption Intermediate Representation

GitHub Workflow Status (with event) GitHub Contributors GitHub Discussions GitHub License OpenSSF Scorecard

An MLIR-based toolchain for homomorphic encryption compilers. Read the docs at the HEIR website.

For more information on MLIR, see the MLIR homepage.

Quickstart (Python)

Pip install the heir_py package

pip install heir_py

Then 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.

Building from source

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-opt

Or run an end-to-end test like

bazel test //tests/Examples/openfhe/ckks/halevi_shoup_matvec:all

HEIR depends on LLVM (from source) so a clean build may take 30 minutes depending on your machine. For faster builds, use BuildBuddy. Sign up for an account, create an API key, and add the following to .bazelrc.user in the root of the HEIR workspace:

common --remote_header=x-buildbuddy-api-key=<YOUR_API_KEY>
common --config=remote

This should reduce a clean build time to about 5 minutes.

See the bazel tips page for more example commands and tips on using bazel.

Supported backends and schemes

Backend Library BGV BFV CKKS CGGI
OpenFHE
Lattigo
tfhe-rs
Jaxite

Note some backends do not support all schemes.

Contributing

There are many ways to contribute to HEIR:

Citations

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},
}

Support disclaimer

This is not an officially supported Google product.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

heir_py-2026.6.25.dev0.tar.gz (14.3 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

heir_py-2026.6.25.dev0-cp310-abi3-manylinux_2_34_x86_64.whl (34.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.34+ x86-64

heir_py-2026.6.25.dev0-cp310-abi3-manylinux_2_34_aarch64.whl (32.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.34+ ARM64

heir_py-2026.6.25.dev0-cp310-abi3-macosx_11_0_arm64.whl (35.7 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file heir_py-2026.6.25.dev0.tar.gz.

File metadata

  • Download URL: heir_py-2026.6.25.dev0.tar.gz
  • Upload date:
  • Size: 14.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for heir_py-2026.6.25.dev0.tar.gz
Algorithm Hash digest
SHA256 5bd93ff55a691d3fd6ab2696be1b9dd20df6ddf31361299ceed8d02128a97de1
MD5 3d03a99bca921bb4b511060ee38986b1
BLAKE2b-256 3c0d0e536474249aa84eebb9affb9b6b167c676b296e7336ee80273fb9b911eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for heir_py-2026.6.25.dev0.tar.gz:

Publisher: release.yml on google/heir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heir_py-2026.6.25.dev0-cp310-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for heir_py-2026.6.25.dev0-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7a026f7a14e91072ef48c06e9e98251547b9c1c72abd4830907d1b05352ddc2d
MD5 69f2d7174eaa4bb113466c5cc5b97088
BLAKE2b-256 9278a29c69b6e7cab7f07ca7e6bec3fea8f4859d4792240dbc0cea2910d90b60

See more details on using hashes here.

Provenance

The following attestation bundles were made for heir_py-2026.6.25.dev0-cp310-abi3-manylinux_2_34_x86_64.whl:

Publisher: release.yml on google/heir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heir_py-2026.6.25.dev0-cp310-abi3-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for heir_py-2026.6.25.dev0-cp310-abi3-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 d85fb843c11b7787787568240f4caa818f12b190c820d2d5fcfca13b117af675
MD5 d442fe51b9b84568bc2415f70d46dddd
BLAKE2b-256 3bbf7efb6443cbd9782e6bd57c0f9473096556f0a63fc22c9370fc5432935e59

See more details on using hashes here.

Provenance

The following attestation bundles were made for heir_py-2026.6.25.dev0-cp310-abi3-manylinux_2_34_aarch64.whl:

Publisher: release.yml on google/heir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heir_py-2026.6.25.dev0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for heir_py-2026.6.25.dev0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fd5bcdd5a2b1133b31284f83e2c74c5a5c062bf474ae9d79a78a3b7887e3adcd
MD5 3411538b628bea4b55980cf0f964ff0c
BLAKE2b-256 78cda17c9b7e35f24b63ed1f2fa97575a1b8f5449a241b1e5fefa084d14858a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for heir_py-2026.6.25.dev0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on google/heir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page