{"id":13639879,"url":"https://github.com/cmarcelo/go-urbit","last_synced_at":"2026-01-14T14:01:55.778Z","repository":{"id":47462163,"uuid":"302249165","full_name":"cmarcelo/go-urbit","owner":"cmarcelo","description":null,"archived":false,"fork":false,"pushed_at":"2021-08-08T20:48:36.000Z","size":41,"stargazers_count":7,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-20T01:33:14.727Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/cmarcelo.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}},"created_at":"2020-10-08T06:18:24.000Z","updated_at":"2025-04-17T14:31:17.000Z","dependencies_parsed_at":"2022-08-27T00:32:24.630Z","dependency_job_id":null,"html_url":"https://github.com/cmarcelo/go-urbit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cmarcelo/go-urbit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmarcelo%2Fgo-urbit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmarcelo%2Fgo-urbit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmarcelo%2Fgo-urbit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmarcelo%2Fgo-urbit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cmarcelo","download_url":"https://codeload.github.com/cmarcelo/go-urbit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmarcelo%2Fgo-urbit/sbom","scorecard":{"id":293920,"data":{"date":"2025-08-11","repo":{"name":"github.com/cmarcelo/go-urbit","commit":"17ee9180a4d582e92edcbfa8b66924af0afd65e8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/18 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T18:59:06.319Z","repository_id":47462163,"created_at":"2025-08-17T18:59:06.319Z","updated_at":"2025-08-17T18:59:06.319Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28422403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"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":[],"created_at":"2024-08-02T01:01:05.745Z","updated_at":"2026-01-14T14:01:55.753Z","avatar_url":"https://github.com/cmarcelo.png","language":"Go","funding_links":[],"categories":["Developer Tools"],"sub_categories":["HTTP APIs"],"readme":"# Urbit HTTP API implementation in Go\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/cmarcelo/go-urbit)](https://pkg.go.dev/github.com/cmarcelo/go-urbit)\n\nThis module provides functionality to communicate with Urbit\nships. See [Urbit home page](https://urbit.org) for more details about\nit.\n\nNOTE: the packages in this module are still in experimental stage, and\nthe API may change as it gets more developed -- the major version is\nstill 0.\n\n\n## Basic usage\n\nConnect with an Urbit ship using\n\n```\nship, err := urbit.Dial(address, passcode, nil)\n```\n\nNote that the code can be obtained with the command `|code` in Dojo\ninside the Urbit environment. The returned value is a Client that can\nbe used to send requests and receive events.\n\n```\n// Send a Poke\nship.Poke(\"chat-hook\", jsonMessage)\n\n// Subscribe to a path inside an app. The ID in result can be used to\n// identify events containing updates for this subscription.\nresult, err := ship.Subscribe(\"chat-store\", \"/keys\")\n\n// ...\n\n// Consume events.\nfor ev := range ship.Events() {\n\tswitch (ev.Type) {\n\tcase \"diff\":\n\t\tif (ev.ID == result.ID) {\n\t\t\t// ev.Data contains the data\n\t\t}\n\t}\n}\n```\n\nIt is important to consume the `Events` channel, because the Client\nwill not try to buffer individual events, so processing only happens\nwhen that channel is consumed. Depending on the program, either a\nseparate goroutine or including the processing the in the program's\nmainloop will be the typical solutions.\n\nThe next step after being able to talk, is to know what to talk. Most\napps running inside Urbit are able to talk via JSON. Their own\nprotocols are currently only documented in the source code (see `/sur`\nin Urbit). It is also helpful to see how requests are created and\nresponses are parsed in Landscape (Urbit's reference web client).\n\nFor Go, these definitions can be mapped into types and serialization\nhelpers, see the [chat\npackage](https://github.com/cmarcelo/go-urbit/tree/main/chat) for\nexample.\n\n\n## Examples\n\nA good way to learn how to use the module is to look at the commented\n[examples](https://github.com/cmarcelo/go-urbit/tree/main/examples). Run\neach of them with\n\n```\ngo run EXAMPLE.go\n```\n\nBy default the examples will try to connect with the default address\nand passcode used running local development ships (\"fake zod\"). They\ncan also be specified in the command line\n\n```\ngo run EXAMPLE.go --addr ADDRESS --code CODE\n```\n\neach example has a few more options, see them with\n\n\n```\ngo run EXAMPLE.go --help\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmarcelo%2Fgo-urbit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmarcelo%2Fgo-urbit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmarcelo%2Fgo-urbit/lists"}