# Rust configuration This document provides basic instructions to configure the Rust toolchain and features for **TFHE-rs.** **TFHE-rs** requires a nightly Rust toolchain to build the C API and utilize advanced SIMD instructions. However, for other uses, a stable toolchain (version 1.84 or later) is sufficient. Follow the following instructions to install the necessary Rust toolchain: ```shell # If you don't need the C API or the advanced still unstable SIMD instructions use this rustup toolchain install stable # Otherwise install a nightly toolchain rustup toolchain install nightly ``` ## Setting the toolchain You can set the toolchain using either of the following methods. Manually specify the toolchain for each cargo command: ```shell # By default the +stable should not be needed, but we add it here for completeness cargo +stable build --release cargo +stable test --release # Or cargo +nightly build --release cargo +nightly test --release ``` Override the toolchain for the current project: ```shell # This should not be necessary by default, but if you want to make sure your configuration is # correct you can still set the overridden toolchain to stable rustup override set stable # cargo will use the `stable` toolchain. cargo build --release # Or rustup override set nightly # cargo will use the `nightly` toolchain. cargo build --release ``` To verify the default toolchain used by Cargo, execute: ```shell rustup show ``` ## Choosing your features **TFHE-rs** provides various cargo features to customize the types and features used. ### Homomorphic types This crate provides 4 kinds of data types. Each kind is enabled by activating the corresponding feature in the TOML line and has multiple types: | Kind | Features | Type (s) | | --------- | ---------------- | --------------------------- | | Booleans | `boolean` | Booleans | | ShortInts | `shortint` | Short integers | | Integers | `integer` | Arbitrary-sized integers | | Integers+ | `extended-types` | Non-standard sized integers | | Strings | `strings` | ASCII strings | The `Integers+` kind refers to types which have non-standard bit-width like `FheUint24` for example. Having more granular types can allow to improve performance. The feature is not enabled by default to avoid very long compile times if users don't need the extended-types.