{"id":20687009,"url":"https://github.com/reiver/go-xrpc","last_synced_at":"2026-04-21T14:36:11.749Z","repository":{"id":254945761,"uuid":"847531445","full_name":"reiver/go-xrpc","owner":"reiver","description":"Package xrpc provides an implementation of BlueSky's AT-Protocol's XRPC, for the Go programming language.","archived":false,"fork":false,"pushed_at":"2025-04-30T17:28:54.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-30T18:33:54.157Z","etag":null,"topics":["at-protocol","atproto","bluesky","xrpc"],"latest_commit_sha":null,"homepage":"","language":"Go","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/reiver.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":"2024-08-26T03:31:18.000Z","updated_at":"2025-04-30T17:28:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"858a806d-f2f1-4e23-b245-09913ca860f6","html_url":"https://github.com/reiver/go-xrpc","commit_stats":null,"previous_names":["reiver/go-xrpc"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/reiver/go-xrpc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Fgo-xrpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Fgo-xrpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Fgo-xrpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Fgo-xrpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reiver","download_url":"https://codeload.github.com/reiver/go-xrpc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Fgo-xrpc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32096192,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T11:25:29.218Z","status":"ssl_error","status_checked_at":"2026-04-21T11:25:28.499Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["at-protocol","atproto","bluesky","xrpc"],"created_at":"2024-11-16T22:55:26.566Z","updated_at":"2026-04-21T14:36:11.716Z","avatar_url":"https://github.com/reiver.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-xrpc\n\nPackage **xrpc** provides an implementation of the **XRPC** protocol used by **BlueSky** and its **AT-Protocol**, for the Go programming language.\n\n## Documention\n\nOnline documentation, which includes examples, can be found at: http://godoc.org/github.com/reiver/go-xrpc\n\n[![GoDoc](https://godoc.org/github.com/reiver/go-xrpc?status.svg)](https://godoc.org/github.com/reiver/go-xrpc)\n\n# Explanation\n\nXRPC is a client-server protocol.\nThis package implements both the client-side and the server-side of the protocol.\n\nXRPC has 3 requests types:\n\n* `executve` (called `procedure` in the XRPC documentation),\n* `query`, and\n* `subscribe`.\n\nThis package provides functions for making each of these requests:\n\n* `xrpc.Execute()`\n* `xrpc.Query()`\n* `xrpc.Subscribe()`\n\n(See _examples_ to see how to use each.)\n\nAn XRPC URL needs to be passed to each of these functions.\nFor example:\n\n```golang\nconst url string = \"xrpc://public.api.bsky.app/app.bsky.actor.getProfile?actor=reiver.bsky.social\"\n\nerr := xrpc.Query(dst, url)\n```\n\nThis package (introduces and) supports 2 types of XRPC URLs:\n\n* `xrpc`, and\n* `xrpc-unencrypted`.\n\nFor example:\n\n* `xrpc://public.api.bsky.app/app.bsky.actor.getProfile?actor=reiver.bsky.social`\n* `xrpc-unencrypted://localhost/app.bsky.actor.getProfile?actor=reiver.bsky.social`\n\n## Examples\n\nHere is an example of making a 'query' XRPC request:\n\n```golang\nimport \"github.com/reiver/go-xrpc\"\n\n// ...\n\nvar response map[string]any = map[string]any{}\n\nurl := \"xrpc://public.api.bsky.app/app.bsky.actor.getProfile?actor=reiver.bsky.social\"\n\nerr := xrpc.Query(\u0026response, url)\n```\n\n## XRPC URL Resolution\n\nThis package introduces two URL schemes:\n\n* `xrpc`, and\n* `xrpc-unencrypted`.\n\nFor example:\n\n* `xrpc://public.api.bsky.app/app.bsky.actor.getProfile?actor=reiver.bsky.social`\n* `xrpc-unencrypted://localhost/app.bsky.actor.getProfile?actor=reiver.bsky.social`\n\nBehind-the-scenes the scenes, these XRPC URL schemes are resolved to HTTPS, HTTP, WSS, and WS URLs.\n\nMOST DEVELOPERS WHO ARE JUST MAKING XRPC CLIENT REQUESTS DO NOT HAVE TO WORRY ABOUT THE DETAILS OF THE RESOLUTION.\nIN THE SAME WAY THAT MOST DEVELOPERS DO NOT HAVE TO WORRY ABOUT HOW HTTP URLS ARE RESOLVED TO TCP.\n\nHow an XRPC URL gets resolved to an HTTPS, HTTP, WSS, or WS URL, depends on the XRPC request type.\n\nHere are some examples:\n\n| XRPC URL                                          | XRPC Request Type | Resolved URL                                 |\n|---------------------------------------------------|-------------------|---------------------------------------------:|\n| `xrpc://example.com/app.cherry.fooBar`            | `execute`         | `https://example.com/xrpc/app.cherry.fooBar` |\n| `xrpc://example.com/app.cherry.fooBar`            | `query`           | `https://example.com/xrpc/app.cherry.fooBar` |\n| `xrpc://example.com/app.cherry.fooBar`            | `subscribe`       |   `wss://example.com/xrpc/app.cherry.fooBar` |\n| `xrpc-unencrypted://localhost/link.banana.bazQux` | `execute`         |   `http://localhost/xrpc/link.banana.bazQux` |\n| `xrpc-unencrypted://localhost/link.banana.bazQux` | `query`           |   `http://localhost/xrpc/link.banana.bazQux` |\n| `xrpc-unencrypted://localhost/link.banana.bazQux` | `subscribe`       |     `ws://localhost/xrpc/link.banana.bazQux` |\n\nThese 2 XRPC URLs are passed to the `xrpc.Execute()`, `xrpc.Query()`, and `xrpc.Subscribe()` functions.\n\n## Import\n\nTo import package **xrpc** use `import` code like the follownig:\n```\nimport \"github.com/reiver/go-xrpc\"\n```\n\n## Installation\n\nTo install package **xrpc** do the following:\n```\nGOPROXY=direct go get https://github.com/reiver/go-xrpc\n```\n\n## Author\n\nPackage **xrpc** was written by [Charles Iliya Krempeaux](http://reiver.link)\n\n## See Also\n\n* https://github.com/reiver/go-athandle\n* https://github.com/reiver/go-atproto\n* https://github.com/reiver/go-aturi\n* https://github.com/reiver/go-bsky\n* https://github.com/reiver/go-did\n* https://github.com/reiver/go-didplc\n* https://github.com/reiver/go-nsid\n* https://github.com/reiver/go-xrpc\n* https://github.com/reiver/go-xrpcuri\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freiver%2Fgo-xrpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freiver%2Fgo-xrpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freiver%2Fgo-xrpc/lists"}