Open-source project
parallaxsecond/parsec avatar
parallaxsecond/parsec

Parsec puts one API in front of whatever hardware root of trust you have

Platform AbstRaction for SECurity service

518 stars76 forksRustApache-2.0

At a glance

What is it?
Parsec is a Rust project that exposes hardware security and cryptographic services through a single platform-agnostic API, with the service brokering access to the underlying hardware and client libraries in many languages. It suits an organisation that needs key management without binding its applications to a particular trust technology, and it expects you to run a service on your own infrastructure.
Who is it for?
Parsec fits an organisation that wants key management and cryptographic operations decoupled from the hardware underneath, since the service brokers access to the platform's root of trust and the client libraries exist in several languages. It does not fit a small project that would be better served by a library linked directly into the application, because Parsec is a running service with its own lifecycle, configuration and trust requirements.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 175 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What the abstraction is for

PARSEC stands for Platform Abstraction for SECurity, and it is an open-source initiative to provide a common API to hardware security and cryptographic services in a platform-agnostic way.

The README is direct about what the abstraction buys you. This abstraction layer keeps workloads decoupled from physical platform details, enabling cloud-native delivery flows within the data center and at the edge.

There are two stated reasons to use it. The first is a portable interface to your platform's Root of Trust, so you can manage keys and perform cryptographic operations without knowledge of the hardware. The second is a simple and portable way to access the best available security of your platform in your preferred programming language.

Those two reasons are related but not identical, and the second one is the more unusual. Most root-of-trust APIs are bound to a vendor SDK and a vendor language, and the usual answer to a multi-vendor estate is a wrapper you write yourself and maintain forever. Parsec's claim is that the client libraries exist in enough languages that you do not have to write that wrapper.

The four value propositions the README gives are worth quoting because they are the design brief. Abstraction is a common API that is truly agnostic and based on modern cryptographic principles. Mediation is security as a microservice, brokering access to the hardware and providing isolated key stores in a multi-tenant environment. Ergonomics is a client library ecosystem that brings the API to the fingertips of developers in any programming language, with the aim of making it easy to consume and hard to get wrong. And openness is an open-source project inviting contributions to enhance the ecosystem both within the service and among its client libraries.

The mediation point is the security architecture, and it is the one with real consequences. The application does not talk to the hardware. It talks to a service, and the service decides what each caller may do. That is what makes isolated key stores in a multi-tenant environment possible, and it is also what makes the service a component you have to secure, monitor and keep running.

The repository, and how the service is built

The service is written in Rust, and the package on crates.io is parsec-service at version 1.5.0, described as a language-agnostic API to secure services in a platform-agnostic way.

The Cargo.toml shows the shape of the thing, and the dependency list is essentially a catalogue of the trust technologies Parsec can broker. There is psa-crypto for the PSA Certified API, tss-esapi for the TPM, cryptoki for PKCS#11, rust-cryptoauthlib for CryptoAuth, spiffe for workload identity, and picky-asn1 with the x509 and der modules for the certificate handling.

Every one of those is optional, which is the point. The binary is built with the backends you need and none of the ones you do not, and the crypto libraries are pulled in with features toggled off by default.

The supporting dependencies tell you what the service itself is made of. serde and toml for the configuration format, clap for the command line, rusqlite with the bundled feature for the SQLite store, prost for the gRPC interface, bincode for the wire format between the service and its native integrations, and zeroize with its derive macro for clearing key material from memory.

That last one matters in a security project. The zeroize crate is the standard answer to the problem that a compiler is free to leave a secret sitting in freed memory, and having it as a direct dependency with the derive feature suggests the code is clearing secrets deliberately rather than relying on Rust's ownership rules alone.

Other entries are operational. sd-notify is the systemd readiness protocol, so the daemon can tell systemd when it has finished starting, and signal-hook handles the shutdown signal. The bin entry is named parsec and lives at src/bin/main.rs.

The edition is 2024 and the minimum supported Rust version is 1.85.0.

Getting started, and the paths that exist

The getting started section is thin in the README and points elsewhere, which is reasonable for a project with a book.

If you are running on x86 Linux, the README points at a dedicated guide for that platform to get started with Parsec quickly. For examples of how to access Parsec as a client application, it points at the Rust client documentation on docs.rs, specifically the BasicClient page.

Then there are three audience-specific guides in the book: the user guide for building, installing, testing and using Parsec, the client developer guide, and the service developer guide.

That three-way split is a good sign about how the project is structured, because it matches the architecture. A user deploys the service. A client developer writes or uses a client library. A service developer extends the service with a new backend or a new trust technology.

The quickstart/ directory in the repository supports the same idea with runnable pieces. There is a config.toml for the service configuration, a construct-build-details.sh script, a package.sh, a quickstart.Dockerfile, and separate README files for the Docker and tarball routes.

The documentation itself lives in a Parsec book at parallaxsecond.github.io/parsec-book, with the online documentation and the whitepaper Security for the Infrastructure Edge linked from the README.

The project is collaborative and has a maintainers list

PARSEC is a collaborative project, and the README makes that structural rather than aspirational.

The current list of the individuals and organizations who maintain the project is in a MAINTAINERS.toml file at the repository root, and who is using and contributing to PARSEC is in a PARTNERS.md file. Those two files answer the question a project with an abstract, multi-vendor scope needs answered, which is who is actually behind it.

The community is organised separately. The README points at a Parsec Community in a Slack channel with biweekly meetings, and the community repository at github.com/parallaxsecond/community for how to join.

The contributing path is documented too, with the Contribution Guidelines in the book describing the contribution process and the open issues on a GitHub project board as the place to find ideas.

There is a SECURITY.md for reporting vulnerabilities, which matters more than usual for a project whose whole purpose is being trusted with keys.

The repository also carries the development infrastructure you would expect at this stage of a project: a CI setup with a .circleci/ directory, a ci.sh script, a fuzz.sh and a fuzz/ directory for fuzzing, e2e_tests/, a deny.toml for cargo-deny license and advisory checking, a config.toml for the service configuration, a systemd-daemon/ directory for the packaging, a build.rs, and trusted-services-vendor/ for the vendored native services.

The licence is Apache-2.0, and the README states that contributions are accepted under the same licence, with the copyright line reading 2019 Contributors to the Parsec project.

The Rust client, and what a service boundary costs you

The Rust client is the reference implementation and the one the README points to for examples, and the BasicClient struct documentation on docs.rs is the entry point.

The shape of the client is worth understanding because it determines what your application code looks like. Your application opens a client, and the client talks to the service. The service in turn talks to the hardware through a native integration, and it owns the keys.

That means key material never enters your process. The operation happens inside the service boundary, and what crosses the wire is a request and a result. For a key that must never be extractable, that is the property you are paying for.

The cost is that the operation now has a network hop, a service that can be down, an authorisation decision that lives somewhere other than in your code, and a second thing to deploy and patch. If your application needs to sign a hundred requests a second, or if the signing must happen with no dependency on anything else running, the service model is a liability rather than a feature.

The ecosystem direction is the opposite of that risk. The Ergonomics claim is that the API reaches developers in any programming language, and the mediation claim is about isolated key stores in a multi-tenant environment, which only makes sense if several callers share one service. The design assumes a shared, long-lived service that many applications depend on.

Where Parsec is the wrong choice

Four cases argue against it.

The first is a single application that needs a handful of keys. If one service needs to sign its own tokens and holds one symmetric key, then a service, a configuration file, a native integration and an authorisation layer are a great deal of infrastructure for one operation. The vendor SDK for your hardware does that job in a few hundred lines.

The second is if you need the key in your process. Some workloads genuinely need the secret material, for example to derive a key on every request from a stored seed. The whole point of the root of trust is that the key does not leave the hardware, so Parsec cannot serve a workload that needs the raw key.

The third is if you are not on a supported platform. The README gives a getting started guide for x86 Linux and points at the community for the rest. The dependency list shows the backends that exist, but a platform with none of them means a custom integration and a much larger project than the one you came for.

The alternative in the same direction is to link the vendor's SDK directly into your application, or to use a cloud key management service. The difference in approach is that Parsec keeps the key in the hardware and moves the API to a service, whereas the cloud KMS moves both, and the direct SDK keeps everything in one process but binds you to one vendor. The trade is the usual one, and Parsec's position is the middle: hardware-backed keys with a portable interface, at the cost of running a service you own. For a multi-application organisation with mixed hardware and a mandate to avoid vendor lock-in, that is a coherent answer. For one application on one vendor's platform, it is heavier than the problem.

Editorial conclusion

Parsec fits an organisation that wants key management and cryptographic operations decoupled from the hardware underneath, since the service brokers access to the platform's root of trust and the client libraries exist in several languages. It does not fit a small project that would be better served by a library linked directly into the application, because Parsec is a running service with its own lifecycle, configuration and trust requirements. Read the Parsec book, start from the x86 Linux guide if that is your platform, use the Rust client documentation as your reference, and check the MAINTAINERS.toml and PARTNERS.md files to see who is actually behind the project before you depend on it for anything long-lived.

Frequently asked questions

What is Parsec?

PARSEC stands for Platform Abstraction for SECurity and is an open-source initiative to provide a common API to hardware security and cryptographic services in a platform-agnostic way. The abstraction keeps workloads decoupled from physical platform details, which the README says enables cloud-native delivery flows in the data center and at the edge.

What does the Parsec service actually do?

It brokers access to the hardware. The README describes mediation as security as a microservice, brokering access to the hardware and providing isolated key stores in a multi-tenant environment, so applications talk to the service rather than to the root of trust directly.

Which hardware security backends does Parsec support?

The Cargo.toml shows the optional backends, with psa-crypto for the PSA Certified API, tss-esapi for the TPM, cryptoki for PKCS#11, rust-cryptoauthlib for CryptoAuth and spiffe for workload identity. Each is optional, so a build includes only the backends you need.

How do I start using Parsec?

If you are on x86 Linux, follow the getting started guide linked from the README. The Parsec book has separate user, client developer and service developer guides, the Rust client documentation on docs.rs shows the BasicClient entry point, and the quickstart/ directory in the repository holds a config.toml, packaging scripts and a Dockerfile.

Who maintains Parsec and what licence is it under?

It is a collaborative project, with the individuals and organisations who maintain it listed in MAINTAINERS.toml and the organisations using and contributing to it in PARTNERS.md. The software is provided under Apache-2.0 and contributions are accepted under the same licence, with the copyright line reading 2019 Contributors to the Parsec project.

Official sources

  1. License: Apache-2.0
  2. parallaxsecond/parsec on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/parallaxsecond-parsec.svg)](https://hysenlabs.com/projects/parallaxsecond-parsec)

Was this useful?