PackageTrack
Sign in Get early access

r-efi

UEFI Reference Specification Protocol Constants and Definitions

7.1.0 294M downloads/mo #369 most downloaded on crates.io r-efi/r-efi

What this package is like to depend on

Last release 13 days ago

10 Aug 2026

Ships fairly regularly

a new release about every 5 months

Nearly every release is documented

notes for 22 of 22 stable releases

Nothing withdrawn

no release was ever pulled

8 years old

22 releases · first in 2018

3 releases in the last 12 months

see the full history below

Release timeline

22 releases · Dec 2018 to Aug 2026
2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 22
  1. 7.1.0 10 Aug 2026
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 7.1.0:
    
        * Add the UEFI USB IO protocol.
    
        * Add parts of the UEFI PI SMBIOS protocol.
    
        * Add `r_efi::industry` as a new module that will carry external
          definitions relevant to UEFI development. This mirrors parts of the
          `IndustryStandard` section of EDK2. However, unlike EDK2, there is no
          intention in ever carrying full external standards. Instead, those
          definitions should be moved into external SDKs or protocol crates, if
          needed.
    
        Contributions from: David Rheinsberg, John Schock, Kat Perez
    
        - Dußlingen, 2026-08-10
    
    Open source →
    Release notes
    • Add the UEFI USB IO protocol.

        * Add parts of the UEFI PI SMBIOS protocol.
      
        * Add `r_efi::industry` as a new module that will carry external
          definitions relevant to UEFI development. This mirrors parts of the
          `IndustryStandard` section of EDK2. However, unlike EDK2, there is no
          intention in ever carrying full external standards. Instead, those
          definitions should be moved into external SDKs or protocol crates, if
          needed.
      
        Contributions from: David Rheinsberg, John Schock, Kat Perez
      
        - Dußlingen, 2026-08-10
      
    Open source →
  2. 7.0.0 23 Jun 2026
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 7.0.0:
    
    Breaking Changes:
    
        * MemoryAttributesTable is updated to v2, available since UEFI 2.10.
          This re-uses the previous `reserved` member as a `flags` member and
          thus constitutes a breaking change.
    
          Consumers of this structure can likely update without any changes.
          Producers can clear the field to zero and retain table-version 1, or
          use the new table-version 2 and fill in the flags properly.
    
    Other Changes:
    
        * `Display` is now implemented for `Status`, printing their string
          description rather than integer representation, using the same
          descriptions as EDK2. Unknown status codes are printed in hex. A
          new `Status::description()` method can be used to get the same
          value without relying on `Display`.
    
        * Add `EFI_DEBUG_IMAGE_INFO_TABLE` and related definitions.
    
        * Add `LOAD_OPTION` and related definitions.
    
        * Add `r_efi::gpt` with an initial set of GPT-related definitions. This
          is a new high-level module and will eventually contain all GPT
          definitions.
    
        * New protocols: partition-info
    
        Contributions from: Chris Fernald, David Rheinsberg,
                            Enric Balletbo i Serra, Kat Perez,
                            Oliver Smith-Denny
    
        - Dußlingen, 2026-06-23
    
    Open source →
    Release notes

    Breaking Changes:

        * MemoryAttributesTable is updated to v2, available since UEFI 2.10.
          This re-uses the previous `reserved` member as a `flags` member and
          thus constitutes a breaking change.
    
          Consumers of this structure can likely update without any changes.
          Producers can clear the field to zero and retain table-version 1, or
          use the new table-version 2 and fill in the flags properly.
    
    Other Changes:
    
        * `Display` is now implemented for `Status`, printing their string
          description rather than integer representation, using the same
          descriptions as EDK2. Unknown status codes are printed in hex. A
          new `Status::description()` method can be used to get the same
          value without relying on `Display`.
    
        * Add `EFI_DEBUG_IMAGE_INFO_TABLE` and related definitions.
    
        * Add `LOAD_OPTION` and related definitions.
    
        * Add `r_efi::gpt` with an initial set of GPT-related definitions. This
          is a new high-level module and will eventually contain all GPT
          definitions.
    
        * New protocols: partition-info
    
        Contributions from: Chris Fernald, David Rheinsberg,
                            Enric Balletbo i Serra, Kat Perez,
                            Oliver Smith-Denny
    
        - Dußlingen, 2026-06-23
    
    Open source →
  3. 6.0.0 03 Feb 2026
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 6.0.0:
    
        * Change all function prototypes to use `unsafe fn`. This is a major
          change, but reflects what all downstream users have already assumed.
    
        * Drop the obsolete `efiapi` and `examples` feature flags. The former
          was unused, and the latter is an alias for `native`.
    
        * The `eficall!{}` macro is now fully inline in all of r-efi. It is
          still provided for external users, but will no longer be used by
          r-efi. All users are recommended to use `extern "efiapi"` directly.
    
        Contributions from: Alan Egerton, David Rheinsberg
    
        - Dußlingen, 2026-02-03
    
    Open source →
    Release notes
    • Change all function prototypes to use unsafe fn. This is a major change, but reflects what all downstream users have already assumed.

        * Drop the obsolete `efiapi` and `examples` feature flags. The former
          was unused, and the latter is an alias for `native`.
      
        * The `eficall!{}` macro is now fully inline in all of r-efi. It is
          still provided for external users, but will no longer be used by
          r-efi. All users are recommended to use `extern "efiapi"` directly.
      
        Contributions from: Alan Egerton, David Rheinsberg
      
        - Dußlingen, 2026-02-03
      
    Open source →
  4. 5.3.0 17 Jun 2025
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 5.3.0:
    
        * Remove the optional dependency on `compiler-builtins`, which was
          needed to build r-efi as part of rustc. This is no longer necessary.
    
        Contributions from: David Rheinsberg, Trevor Gross
    
        - Dußlingen, 2025-06-17
    
    Open source →
    Release notes
    • Remove the optional dependency on compiler-builtins, which was needed to build r-efi as part of rustc. This is no longer necessary.

        Contributions from: David Rheinsberg, Trevor Gross
      
        - Dußlingen, 2025-06-17
      
    Open source →
  5. 5.2.0 24 Dec 2024
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 5.2.0:
    
        * Add the memory attribute protocol.
    
        Contributions from: David Rheinsberg, Oliver Smith-Denny
    
        - Dußlingen, 2024-12-22
    
    Open source →
    Release notes
    • Add the memory attribute protocol.

        Contributions from: David Rheinsberg, Oliver Smith-Denny
      
        - Dußlingen, 2024-12-22
      
    Open source →
  6. 5.1.0 01 Sep 2024
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 5.1.0:
    
        * Mark `Guid::as_bytes` and `Guid::from_bytes` as `const fn`, aligning
          them with the other methods on `Guid`. This helps creating constant
          GUIDs via macros or other external helpers.
    
        Contributions from: Christopher Zurcher, David Rheinsberg
    
        - Dußlingen, 2024-09-01
    
    Open source →
    Release notes
    • Mark Guid::as_bytes and Guid::from_bytes as const fn, aligning them with the other methods on Guid. This helps creating constant GUIDs via macros or other external helpers.

        Contributions from: Christopher Zurcher, David Rheinsberg
      
        - Dußlingen, 2024-09-01
      
    Open source →
  7. 5.0.0 30 Jul 2024
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 5.0.0:
    
        * Change the type of the `unload` function-pointer of the Loaded Image
          Protocol to `Option<Unload>`, given that it can be `NULL` to indicate
          that the image cannot be unloaded.
          This is a major API break, but any users very likely need to adjust
          anyway to avoid NULL-derefs.
    
        Contributions from: David Rheinsberg, John Schock
    
        - Dußlingen, 2024-07-30
    
    Open source →
    Release notes
    • Change the type of the unload function-pointer of the Loaded Image Protocol to Option<Unload>, given that it can be NULL to indicate that the image cannot be unloaded. This is a major API break, but any users very likely need to adjust anyway to avoid NULL-derefs.

        Contributions from: David Rheinsberg, John Schock
      
        - Dußlingen, 2024-07-30
      
    Open source →
  8. 4.5.0 23 May 2024
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 4.5.0:
    
        * Implement or derive more standard traits for UEFI base types. In
          particular, implement `[Partial]Eq`, `Hash`, `[Partial]Ord` for
          `Boolean`, `Status`, `Guid`, and network address types.
    
        * Fix the signature of `BootUninstallMultipleProtocolInterfaces` to
          match the UEFI specification. Note that it uses var-args and is thus
          not fully usable from stable Rust.
    
        Contributions from: Ayush Singh, David Rheinsberg, John Schock
    
        - Dußlingen, 2024-05-23
    
    Open source →
    Release notes
    • Implement or derive more standard traits for UEFI base types. In particular, implement [Partial]Eq, Hash, [Partial]Ord for Boolean, Status, Guid, and network address types.

        * Fix the signature of `BootUninstallMultipleProtocolInterfaces` to
          match the UEFI specification. Note that it uses var-args and is thus
          not fully usable from stable Rust.
      
        Contributions from: Ayush Singh, David Rheinsberg, John Schock
      
        - Dußlingen, 2024-05-23
      
    Open source →
  9. 4.4.0 27 Mar 2024
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 4.4.0:
    
        * Add definitions for `UNACCEPTED_MEMORY_TYPE`, media device subtypes
          for device paths, before-EBS and after-RTB event groups, missing
          memory attributes.
    
        * Add memory masks for common memory attribute classes. The symbol
          names are takend from EDK2, yet their purpose is defined in the
          specification.
    
        * New protocols: platform_driver_override, bus_specific_driver_override,
          driver_family_override, load_file, load_file2, pci-io
    
        Contributions from: David Rheinsberg, Dmitry Mostovenko, John Schock,
                            Michael Kubacki
    
        - Dußlingen, 2024-03-27
    
    Open source →
    Release notes
    • Add definitions for UNACCEPTED_MEMORY_TYPE, media device subtypes for device paths, before-EBS and after-RTB event groups, missing memory attributes.

        * Add memory masks for common memory attribute classes. The symbol
          names are takend from EDK2, yet their purpose is defined in the
          specification.
      
        * New protocols: platform_driver_override, bus_specific_driver_override,
          driver_family_override, load_file, load_file2, pci-io
      
        Contributions from: David Rheinsberg, Dmitry Mostovenko, John Schock,
                            Michael Kubacki
      
        - Dußlingen, 2024-03-27
      
    Open source →
  10. 4.3.0 18 Oct 2023
    Release notes
    # r-efi - UEFI Reference Specification Protocol Constants and Definitions
    
    ## CHANGES WITH 4.3.0:
    
        * Change alignment of `Guid` to 4 (was 8 before). This deviates from
          the specification, but aligns with EDK2. This should fix alignment
          mismatches when combining r-efi with EDK2, or other UEFI
          implementations.
    
        * `Guid` gained a new constructor `from_bytes()` to allow creating
          GUID-abstractions from foreign types based on the standardized
          memory representation.
    
        * Add all configuration-table GUIDs mentioned in the spec. These are
          often rooted in external specifications, but are strongly related
          to UEFI.
    
        * Add configuration-table definitions for RT_PROPERTIES and
          CONFORMANCE_PROFILES.
    
        * New protocols: hii_package_list, absolute_pointer
    
        Contributions from: David Rheinsberg, John Schock, Michael Kubacki,
                            Nicholas Bishop
    
        - Dußlingen, 2023-10-18
    
    Open source →
    Release notes
    • Change alignment of Guid to 4 (was 8 before). This deviates from the specification, but aligns with EDK2. This should fix alignment mismatches when combining r-efi with EDK2, or other UEFI implementations.

        * `Guid` gained a new constructor `from_bytes()` to allow creating
          GUID-abstractions from foreign types based on the standardized
          memory representation.
      
        * Add all configuration-table GUIDs mentioned in the spec. These are
          often rooted in external specifications, but are strongly related
          to UEFI.
      
        * Add configuration-table definitions for RT_PROPERTIES and
          CONFORMANCE_PROFILES.
      
        * New protocols: hii_package_list, absolute_pointer
      
        Contributions from: David Rheinsberg, John Schock, Michael Kubacki,
                            Nicholas Bishop
      
        - Dußlingen, 2023-10-18
      
    Open source →
  11. 4.2.0 20 Mar 2023
    Release notes
    • Bump required compiler version to: rust-1.68

        * New Protocols: debugport, debug-support, driver-diagnostics2,
                         mp-services, shell, shell-dynamic-command,
                         shell-parameters, udp-4, udp-6
      
        * Use const-generics instead of ZSTs to represent dynamic trailing
          members in C structs.
      
        * The `examples` feature has been renamed to `native` (a backwards
          compatible feature is left in place).
      
        * Add support for riscv64.
      
        * Use the official rust `efiapi` calling convention. This was
          stabilized with rust-1.68.
      
        Contributions from: Ayush Singh, David Rheinsberg, Rob Bradford
      
        - Dußlingen, 2023-03-20
      
    Open source →
  12. 4.1.0 23 Aug 2022
    Release notes
    • New Protocols: device-path-{from,to}-text, ip4, ip6, managed-network, rng, service-binding, tcp4, tcp6, timestamp

        * `ImageEntryPoint` is now correctly annotated as `eficall`.
      
        * `Time` now derives `Default`.
      
        * Fix nullable function pointers to use `Option<fn ...>`.
      
        * Function prototypes now have an explicit type definition and can be
          used independent of their protocol definition.
      
        * The new `rust-dep-of-std` feature option allows pulling in r-efi
          into the rust standard library. It prepares the crate workspace to
          be suitable for the standard library. It has no use outside of this.
      
        * Adopt the MIT license as 3rd licensing option to allow for
          integration into the rust compiler and ecosystem.
      
        Contributions from: Ayush Singh, David Rheinsberg, Joe Richey
      
        - Tübingen, 2022-08-23
      
    Open source →
  13. 4.0.0 23 Jun 2021
    Release notes
    • Convert all enums to constants with type-aliases. This is an API break, but it is needed for spec-compliance. With the old enums, one couldn't encode all the possible values defined by the spec. Especially, the vendor-reserved ranges were unable to be encoded in a safe manner. Also see commit 401a91901e860 for a detailed discussion. API users likely need to convert their CamelCase enum usage to the new UPPER_CASE constants.

        * Convert all incomplete types to empty arrays. This affects all
          structures that use trailing unbound arrays. These are actually ABI
          incompatible with UEFI, since rust represents raw-pointers to such
          types as fat-pointers. Such arrays have now been converted to empty
          arrays, which should still allow accessing the memory location and
          retaining structure properties, but avoids fat-pointers.
          This is an API break, so you might have to adjust your accessors of
          those trailing structure members.
      
        * Implement `Clone` and `Copy` for most basic structures. Since these
          are used as plain carriers, no higher clone/copy logic is needed. It
          should be clear from the project-description, that only basic UEFI
          compatibility is provided.
      
        * Add the console-control vendor protocol. This protocol allows
          controlling console properties. It is not part of the UEFI
          specification, but rather defined by the TianoCore project.
      
        * Add a new example showing how to use the GOP functions to query the
          active graphics device.
      
        Contributions from: David Rheinsberg, GGRei, Hiroki Tokunaga,
                            Richard Wiedenhöft
      
        - Tübingen, 2021-06-23
      
    Open source →
  14. 3.2.0 23 Oct 2020
    Release notes
    • Add new protocols: DiskIo, DiskIo2, BlockIo, DriverBinding

        * Extend the Device-Path payload structure and add the HardDriveMedia
          payload.
      
        * Add HII definitions: A new top-level module `hii` with all the basic
          HII constants, as well as a handful of HII protocols (hii_database,
          hii_font, hii_string)
      
        * Document new `-Zbuild-std` based cross-compilation, serving as
          official rust alternative to cargo-xbuild.
      
        Contributions from: Alex James, Bret Barkelew, David Rheinsberg,
                            Michael Kubacki
      
        - Tübingen, 2020-10-23
      
    Open source →
  15. 3.1.0 10 Sep 2020
    Release notes
    • Add the basic networking types to r_efi::base. This includes MAC and IP address types.

        * Add the EFI_SIMPLE_NETWORK_PROTOCOL definitions and all required
          constants to make basic networking available.
      
        * Add a new uefi-cross example, which is copied from upstream rustc
          sources, so we can test local modifications to it.
      
        Contributions from: Alex James, David Rheinsberg
      
        - Tübingen, 2020-09-10
      
    Open source →
  16. 3.0.0 24 Apr 2020
    Release notes
    • Fix a missing parameter in BootServices::locate_device_path(). The prototype incorrectly had 2 arguments, while the official version takes 3. The final handle argument was missing. This is an API break in r-efi. It should have a limited impact, since the function was mostly useless without a handle. Thanks to Michael Kubacki for catching this!

        * Adjust the `device_path` parameter in a bunch of `BootServices`
          calls. This used to take a `*mut c_void` parameter, since the device
          path protocol was not implemented.
          Since we have to bump the major version anyway, we use this to also
          fix these argument-types to the correct device-path protocol type,
          which has been implemented some time ago.
      
        Contributions from: David Rheinsberg, Michael Kubacki
      
        - Tübingen, 2020-04-24
      
    Open source →
  17. 2.2.0 16 Apr 2020
    Release notes
    • Provide as_usize() accessor for efi::Status types. This allows accessing the raw underlying value of a status object.

        * The project moved to its new home at: github.com/r-efi/r-efi
      
        Contributions from: David Rheinsberg, Joe Richey
      
        - Tübingen, 2020-04-16
      
    Open source →
  18. 2.1.0 20 Mar 2019
    Release notes
    • Add the graphics-output-protocol.

        * Expose reserved fields in open structures, otherwise they cannot be
          instantiated from outside the crate itself.
      
        Contributions from: David Herrmann, Richard Wiedenhöft, Rob Bradford
      
        - Tübingen, 2019-03-20
      
    Open source →
  19. 2.0.0 01 Mar 2019
    Release notes
    • Add a set of UEFI protocols, including simple-text-input, file-protocol, simple-file-system, device-path, and more.

        * Fix signature of `BootServices::allocate_pages`.
      
        Contributions from: David Rheinsberg, Richard Wiedenhöft, Tom Gundersen
      
        - Tübingen, 2019-03-01
      
    Open source →
  20. 1.0.0 14 Feb 2019
    Release notes
    • Enhance the basic UEFI type integration with the rust ecosystem. Add Debug, Eq, Ord, ... derivations, provide converters to/from the core library, and document the internal workings.

        * Fix `Boolean` to use `newtype(u8)` to make it ABI compatible to UEFI.
          This now accepts any byte value that UEFI accetps without any
          conversion required.
      
        Contributions from: Boris-Chengbiao Zhou, David Rheinsberg, Tom
                            Gundersen
      
        - Tübingen, 2019-02-14
      
    Open source →
  21. 0.1.1 10 Dec 2018
    Release notes
    • Feature gate examples to make cargo test work on non-UEFI systems like CI.

        Contributions from: David Herrmann
      
        - Tübingen, 2018-12-10
      
    Open source →
  22. 0.1.0 10 Dec 2018
    Release notes
    • Initial release of r-efi.

        Contributions from: David Herrmann
      
        - Tübingen, 2018-12-10
      
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive