{"id":20388331,"url":"https://github.com/bahner/go-ma","last_synced_at":"2026-02-10T22:01:59.699Z","repository":{"id":196591430,"uuid":"696448283","full_name":"bahner/go-ma","owner":"bahner","description":"Attempt at implementing 間 as thought of in Kay's 1997 OOPSLA talk.","archived":false,"fork":false,"pushed_at":"2025-01-24T02:30:26.000Z","size":685,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-24T00:40:56.902Z","etag":null,"topics":["did","libp2p","libp2p-pubsub","ma","moo","space"],"latest_commit_sha":null,"homepage":"https://www.youtube.com/watch?v=oKg1hTOQXoY\u0026t=2268s","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bahner.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}},"created_at":"2023-09-25T19:04:46.000Z","updated_at":"2025-01-24T02:30:30.000Z","dependencies_parsed_at":"2023-10-01T19:54:28.420Z","dependency_job_id":"39be92a1-d6a4-497a-9c68-0245f01bd5ac","html_url":"https://github.com/bahner/go-ma","commit_stats":null,"previous_names":["bahner/go-ma"],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/bahner/go-ma","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahner%2Fgo-ma","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahner%2Fgo-ma/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahner%2Fgo-ma/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahner%2Fgo-ma/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bahner","download_url":"https://codeload.github.com/bahner/go-ma/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahner%2Fgo-ma/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29319238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T20:44:44.282Z","status":"ssl_error","status_checked_at":"2026-02-10T20:44:43.393Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["did","libp2p","libp2p-pubsub","ma","moo","space"],"created_at":"2024-11-15T03:08:51.493Z","updated_at":"2026-02-10T22:01:59.678Z","avatar_url":"https://github.com/bahner.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Go [間] reference implementation\n===\n\nProvided are the tools and and structs to interact with [SPACE] through [間]. However this library can be used for any purpose. It is not tied to [SPACE] by design.\n\nDevelopment specs will reside in \u003chttps://github.com/bahner/ma\u003e. But the specs are mostly written as an afterthought. This code is the spec.\n\nTo understand the need for 間 I commend [Alan Kay's talk at OOPSLA 1997][kayma] to you. It is brilliant, thought provoking, inspiring and highly entertaining.\n\nA success criterium for this project would be if he looked at the code and described it as: *Mostly harmless*.\n\nThe envelope contains the encrypted message and the key. The message is a DID Document. The key is the key to unlock the message. The DID Document is signed by the sender. And is structured, so the receiver can parse it for it's intended purpose.\n\nGo language\n---\n\nI intended to create the prototype entirely in Elixir, but [libp2p] in Elixir is not as mature as in Go.\n\nI have never written a single line of Go before, so this is a learning experience for me. I wrote the required [IPFS][exipfs], [IPNS][exipns] and [IPLD][exipld] libraries for Elixir. But a libp2p implementation is not feasible in the foreseeable future. At least for one person. So I decided to do it in Go.\n\nThese structs and functions are the result of that decision. They will be consumed by another project - [go-space] - which is an erlang node that will be used to communicate with the Go 間 tools and integrate with the MOO that I am building in Elixir.\n\ndid\n---\n\nThe did sub-package contains the structs and functions to build and work with DID documents. I did look at other did-implementations, but they were too complicated for me, so I decided to write my own.\n\nThese packages do not provide for publication or retrieval of the documents. Live interactions with these entities should be consumed by other software using this library. It is intended to be as lightweight, clean and stable as possible.\n\nI will not add unneeded functionality to this package at the moment. It started as more of a full\nimplementation of the DID spec, but I have decided to keep it as simple as possible.\n\nIf need be it should be relatively easy to extend, as it's been endowed with a version number.\n\nMessage\n---\n\nThe message struct is also meant to be as stable as possible. It is the struct\nthat is used to create messages to be sent on 間. The envelope consists of a an encrypted payload and the key to unlock it.\n\nAs noted above the code is the spec for now, but we'll get to that. RSN.\n\n2023-11-25: bahner\n\n[exipfs]: \u003chttps://hex.pm/packages/ex_ipfs\u003e \"Elixir IPFS\"\n[exipld]: \u003chttps://hex.pm/packages/ex_ipfs_ipld\u003e \"Elixir IPLD\"\n[exipns]: \u003chttps://hex.pm/packages/ex_ipfs_ipns\u003e \"Elixir IPNS\"\n[go-space]: \u003chttps://github-com/bahner/go-space\u003e \"Go SPACE\"\n[kayma]: \u003chttps://www.youtube.com/watch?v=oKg1hTOQXoY\u0026t=2268s\u003e \"The space between objects.\"\n[libp2p]: \u003chttps://libp2p.io\u003e \"libp2p\"\n[SPACE]: \u003chttps://github.com/bahner/space\u003e \"SPACE\"\n[間]: \u003chttps://github.com/bahner/ma\u003e \"ma specs\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbahner%2Fgo-ma","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbahner%2Fgo-ma","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbahner%2Fgo-ma/lists"}