https://github.com/fedi-e2ee/pkd-server-php
PHP Implementation of the Public Key Directory Server
https://github.com/fedi-e2ee/pkd-server-php
Last synced: about 2 months ago
JSON representation
PHP Implementation of the Public Key Directory Server
- Host: GitHub
- URL: https://github.com/fedi-e2ee/pkd-server-php
- Owner: fedi-e2ee
- License: isc
- Created: 2025-11-29T03:47:01.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-01-18T05:54:00.000Z (2 months ago)
- Last Synced: 2026-01-18T15:38:06.459Z (2 months ago)
- Language: PHP
- Size: 333 KB
- Stars: 14
- Watchers: 3
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Fediverse Public Key Directory Server Reference Implementation
[](https://github.com/fedi-e2ee/pkd-server-php/actions/workflows/ci.yml)
[](https://github.com/fedi-e2ee/pkd-server-php/actions/workflows/psalm.yml)
[](https://github.com/fedi-e2ee/pkd-server-php/actions/workflows/phpstan.yml)
[](https://github.com/fedi-e2ee/pkd-server-php/actions/workflows/semgrep.yml)
[](https://github.com/fedi-e2ee/pkd-server-php/actions/workflows/style.yml)
[](https://github.com/fedi-e2ee/pkd-server-php/actions/workflows/fuzz.yml)
[](https://github.com/fedi-e2ee/pkd-server-php/actions/workflows/infection.yml)
[](https://packagist.org/packages/fedi-e2ee/pkd-server)
[](https://packagist.org/packages/fedi-e2ee/pkd-server)
[](https://github.com/fedi-e2ee/pkd-server-php/actions/workflows/docs-ref.yml)
This is the reference implementation for the server-side component of the
[Public Key Directory specification](https://github.com/fedi-e2ee/public-key-directory-specification),
written in PHP.
**[Project Website: publickey.directory](https://publickey.directory)**
## What is this, and why does it exist?
The hardest part of designing end-to-end encryption for the Fediverse, as with most cryptography undertakings, is key
management. In short: How do you know which public key belongs to a stranger you want to chat with privately? And how
do you know you weren't deceived?
Our solution is to use **Key Transparency**, which involves publishing all public key enrollments and revocations to an
append-only ledger based on Merkle trees. This allows for a verifiable, auditable log of all key-related events,
providing a strong foundation for trust.
This project, and the accompanying specification, are the result of an open-source effort to solve this problem.
You can read more about the project's origins and design philosophy on Soatok's blog, *Dhole Moments*:
* [Towards Federated Key Transparency](https://soatok.blog/2024/06/06/towards-federated-key-transparency/)
* [Key Transparency and the Right to be Forgotten](https://soatok.blog/2024/11/21/key-transparency-and-the-right-to-be-forgotten/)
## Installation
Use [Composer](https://getcomposer.org/):
```terminal
composer require fedi-e2ee/pkd-server
```
## Documentation
For detailed information on how to deploy and configure the server, please see the
[online documentation](./docs/README.md).
## License
This project is licensed under the [ISC License](LICENSE).