···11# perlsky
2233+An AT Protocol Personal Data Server written in Perl 5 that has been extensively tested and aims for accuracy and parity with the official PDS. Nonetheless, **use it at your own risk**.
44+55+
66+37## Why
4859Look, it started as a joke and then quickly got out of hand.
610711## What
81299-An AT Protocol Personal Data Server written in Perl 5. It runs self-contained on SQLite and filesystem blob storage, loads the official `com.atproto.*` lexicons at runtime, and is meant to be pleasant to hack on if you like Perl. It has been extensively tested and aims for accuracy and parity with the official PDS. It is ready to use in Production for at least smaller servers.
10131114## Quick start
1215···48514952### Differential validation
50535151-`perlsky` can be tested side-by-side against the official `@atproto/pds` to verify matching behavior on accounts, repos, moderation, sync, firehose, and `importRepo`:
5454+`perlsky` can be tested side-by-side against the official `@atproto/pds` to verify matching behavior on accounts, repos, moderation, sync, firehose, and `importRepo`. This isn't bulletproof but it still helped to shake out a lot of subtle and not-so-subtle bugs:
52555356```sh
5457script/differential-validate
···63666467The harness installs the reference runtime into `.tools/reference-runtime` with Node 20 via `fnm`.
65686666-### Browser smoke — [atproto-smoke](https://github.com/aliceisjustplaying/atproto-smoke)
6969+### Browser smoke — [atproto-smoke](https://tangled.org/alice.mosphere.at/atproto-smoke)
67706868-End-to-end smoke tests drive real `bsky.app` sessions against a running `perlsky` instance — posting, following, lists, notifications, settings, and more. The browser runtime is a standalone project, [atproto-smoke](https://github.com/aliceisjustplaying/atproto-smoke), designed to work with any AT Protocol PDS. `perlsky` provides a thin adapter script on top of it.
7171+End-to-end smoke tests drive real `bsky.app` sessions against a running `perlsky` instance — posting, following, lists, notifications, settings, and more. The browser runtime is a standalone project, [atproto-smoke](https://tangled.org/alice.mosphere.at/atproto-smoke), designed to work with any AT Protocol PDS. `perlsky` provides a thin adapter script on top of it.
69727073```sh
7174# clone atproto-smoke next to perlsky (one-time)
7272-git clone https://github.com/aliceisjustplaying/atproto-smoke.git ../atproto-smoke
7575+git clone https://tangled.org/alice.mosphere.at/atproto-smoke.git ../atproto-smoke
7376cd ../atproto-smoke && npm install && cd -
74777578# bootstrap a reusable smoke account pair, then run