{
  "path": "/projects/pkgs",
  "site": "at://did:plc:ofrbh253gwicbkc5nktqepol/site.standard.publication/3mfyq5mpohw25",
  "tags": [
    "atproto",
    "pkgs",
    "tooling",
    "typescript"
  ],
  "$type": "site.standard.document",
  "title": "@ewanc26/pkgs",
  "description": "Ewan's personal package monorepo — the canonical home for @ewanc26/tid, @ewanc26/atproto, @ewanc26/ui, and @ewanc26/utils.",
  "publishedAt": "2026-03-07T00:00:00.000Z",
  "textContent": "@ewanc26/pkgs is a pnpm workspace monorepo containing all of Ewan's publishable npm packages. It was created by extracting the packages/ subdirectories from their original host repositories (malachite and website) and consolidating them into one place, with full git history preserved via git subtree.\n\nPackages\n\n| Package | Version | Description |\n|---------|---------|-------------|\n| @ewanc26/tid | 1.x | Zero-dependency AT Protocol TID generation |\n| @ewanc26/atproto | 0.x | AT Protocol service layer (profiles, posts, Standard.site, music status) |\n| @ewanc26/ui | 0.x | Svelte 5 UI component library (cards, layout, stores, themes) |\n| @ewanc26/utils | 0.x | Shared utilities (dates, numbers, URLs, validators, RSS) |\n\nWhy a monorepo?\n\nThe packages share overlapping concerns — @ewanc26/ui depends on @ewanc26/atproto for its card components, and both consume types from @ewanc26/utils. Having them colocated means:\n\n- Cross-package changes can land in a single PR\n- workspace:* references keep internal deps in sync without publishing intermediary versions\n- One place to update shared tooling (TypeScript config, build scripts, licence)\n\nInstallation\n\nDevelopment\n\nHow history was migrated\n\nEach package was extracted from its source repository using git subtree split, which rewrites the commit history of a subdirectory into a standalone branch. That branch was then merged into pkgs with git subtree add, so git log packages/tid in this repo shows the real history going back to when the package was first created in malachite — not just a single \"initial commit\".\n\nThe source repos retain their packages/ subdirectories for reference, but the canonical source of truth for all packages is this monorepo.\n\nLicence\n\nAGPL-3.0-only.",
  "canonicalUrl": "https://docs.ewancroft.uk/projects/pkgs"
}