{"id":13832919,"url":"https://github.com/nostrability/nostrability","last_synced_at":"2026-04-04T15:34:08.459Z","repository":{"id":218978054,"uuid":"723726881","full_name":"nostrability/nostrability","owner":"nostrability","description":"Left curve nostr broken stuff and interoperability tracker + json schema validation","archived":false,"fork":false,"pushed_at":"2026-03-26T19:40:09.000Z","size":499,"stargazers_count":79,"open_issues_count":244,"forks_count":0,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-03-27T07:21:37.383Z","etag":null,"topics":["blossom","cashu","interop","interoperability","left-curve","lightning-network","nostr","nwc"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nostrability.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-26T15:29:57.000Z","updated_at":"2026-03-26T19:40:10.000Z","dependencies_parsed_at":"2024-08-04T11:11:47.752Z","dependency_job_id":null,"html_url":"https://github.com/nostrability/nostrability","commit_stats":null,"previous_names":["alltheseas/nostrability"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/nostrability/nostrability","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nostrability%2Fnostrability","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nostrability%2Fnostrability/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nostrability%2Fnostrability/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nostrability%2Fnostrability/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nostrability","download_url":"https://codeload.github.com/nostrability/nostrability/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nostrability%2Fnostrability/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31403959,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blossom","cashu","interop","interoperability","left-curve","lightning-network","nostr","nwc"],"created_at":"2024-08-04T11:00:33.862Z","updated_at":"2026-04-04T15:34:08.439Z","avatar_url":"https://github.com/nostrability.png","language":"HTML","funding_links":[],"categories":["Other links","Others"],"sub_categories":["Client reviews and/or comparisons"],"readme":"# nostrability\n\nNostr will have a shot at winning because of seamless interoperation between any combination of social media clients, and other stuff.\n\n![nostr apps as tetris blocks](https://image.nostr.build/be982bc07274ef9873dbe36819d04565db5b700507adc09d00e463bc4a8669f6.png)\n\n## What is nostrability\n\nThe practical documentation of how various [nostr](https://github.com/nostr-protocol) apps and relays play together.\n\nTwo or more nostr apps and/or relays must be involved to invoke a nostrability report.\\\n**Negative interoperability** documents the friction between two or more nostr apps interacting.\\\n**Positive interoperability** advocates that certain apps adopt certain NIPs/implementation approaches, so that apps appear compatible.\n\n### Interactive tracker\n\nExplore the full interoperability matrix at **[nostrability.github.io/nostrability](https://nostrability.github.io/nostrability/)** — an interactive dashboard with app-vs-NIP compatibility grids, search, filters, and status indicators.\n\n## In meme form (negative interoperability)\n\n![image](https://github.com/alltheseas/nostrability/assets/64376233/0f94c4e4-0179-490f-9c68-8e9f9761ec8c)\n\nmemelord credit to [corndalorian](https://njump.me/nevent1qqsdwrlvkkhh8wcl05a7lu6w4h5kvfjc66kwst3gdezms8094cxqe7qzyruwd3jrgtc7q5jgqccwylsszmwwxh7r5c2wvpp5lm625fgrx2x2j24d7ly)\n\n## How nostrability works\n\n### Manual testing and crowdsourcing\n\nNostrability assesses the degree of friction of interoperability between nostr's many moving parts. We provide a simple crowdsourcing [template](https://github.com/nostrability/nostrability/issues) for documenting poor or lack of interoperability between nostr apps A and B, nostr app C and nostr relay D, and so on.\n\nDevs are welcome to, and may find using nostrability useful as a platform to request comment from other devs on unvalidated concepts.\n\n### Positive interoperability trackers\n\nWe maintain **85+ tracker issues** that monitor NIP adoption across nostr apps. Each tracker documents which apps support a given NIP and how well they interoperate. Examples:\n\n- [DMs (NIP-17)](https://github.com/nostrability/nostrability/issues/169) — [Zaps (NIP-57)](https://github.com/nostrability/nostrability/issues/156) — [Long-form (NIP-23)](https://github.com/nostrability/nostrability/issues/97)\n- [Relay list metadata (NIP-65)](https://github.com/nostrability/nostrability/issues/180) — [NWC (NIP-47)](https://github.com/nostrability/nostrability/issues/77) — [Lists (NIP-51)](https://github.com/nostrability/nostrability/issues/82)\n- [Reactions (NIP-25)](https://github.com/nostrability/nostrability/issues/257) — [Highlights (NIP-84)](https://github.com/nostrability/nostrability/issues/61) — [AI/MCP on Nostr](https://github.com/nostrability/nostrability/issues/278)\n\nBrowse all: [positive-interop label](https://github.com/nostrability/nostrability/issues?q=label%3Apositive-interop)\n\n### Event kind label taxonomy\n\nIssues are systematically tagged with **78 `kind-XXXX` labels** (color-coded by event type) and **35+ `nip-XX` labels**, making it possible to find all interoperability issues related to a specific event kind or NIP at a glance.\n\n| Color | Event type | Example |\n|-------|-----------|---------|\n| Orange | Regular kinds (0-9999) | `kind-1`, `kind-7`, `kind-9735` |\n| Green | Replaceable kinds (10000-19999) | `kind-10002`, `kind-10019` |\n| Teal | Parameterized replaceable (30000+) | `kind-30023`, `kind-30311` |\n\n### Automated testing — schemata\n\n[**Schemata**](https://github.com/nostrability/schemata) is a set of language-agnostic JSON schemas for validating nostr events against their NIP and kind definitions. App devs can integrate relevant schemas into their dev/build/CI pipeline.\n\nSchemas can also be used to pull events of specified kinds from relays and perform bulk \"in the wild\" validation. Events that do not conform are documented (example [finding](https://github.com/nostrability/nostrability/issues/253#issuecomment-3362106733), and associated dev [response \u0026 fix](https://github.com/nostrability/nostrability/issues/253#issuecomment-3364775585)).\n\n### Automated testing — Sherlock\n\n[**Sherlock**](https://github.com/nostrability/sherlock) is a passive schema validator that continuously scans relays, validates events against schemata JSON Schemas, and attributes violations to apps via NIP-89 client tags. It runs 3x/day via CI and publishes findings as:\n\n- **[Interactive dashboard](https://nostrability.github.io/sherlock/)** — by kind, by app, and error pattern views\n- **[Machine-readable JSON](https://github.com/nostrability/sherlock/blob/main/data/findings.json)** — git-tracked for trend analysis\n- **Nostr notes** — daily reports published by the [nostrability bot](https://njump.me/npub1g5qtwz2nh9q0mnw555kv787kh6lysds95522gzptre3qpvz9p20s83m80d)\n\n## Non-objective\n\nNostrability does not aim to get all apps to implement all [NIPs](https://github.com/nostr-protocol/nips).\n\n## How to contribute\n\n- **Report broken interop**: [Open an issue](https://github.com/nostrability/nostrability/issues/new) describing which apps/relays are involved and what breaks\n- **Update a tracker**: Comment on an existing [positive-interop tracker](https://github.com/nostrability/nostrability/issues?q=label%3Apositive-interop) with evidence of app support\n- **Add schemas**: Contribute to [nostrability/schemata](https://github.com/nostrability/schemata) with validation schemas for new or existing NIPs\n\n## Motivation \u0026 reference\n\n- Nostr by [fiatjaf](https://njump.me/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6): https://fiatjaf.com/nostr.html\n- How nostr wins by [Pablo F](https://njump.me/npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft): https://youtu.be/qTixqS-W1yo\n- Nostr — [FOSDEM 2025, Wouter Constant](https://www.youtube.com/watch?v=Tbt3jL1Ms0w\u0026t=23s)\n- Nostr's broken interoperability — [Pablo F](https://njump.me/npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft): https://youtu.be/v0H13dPceJ0\n- Nostrability overview (~13 min): https://youtu.be/I3Qld_HXQuM — [slides](https://slides.com/alltheseas/nostrability)\n\n## Contact\n\n[npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5](https://njump.me/npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnostrability%2Fnostrability","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnostrability%2Fnostrability","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnostrability%2Fnostrability/lists"}