{"id":16086546,"url":"https://github.com/gammazero/nexus","last_synced_at":"2025-04-07T21:13:37.337Z","repository":{"id":22647352,"uuid":"96932974","full_name":"gammazero/nexus","owner":"gammazero","description":"Full-feature WAMP v2 router and client written in Go","archived":false,"fork":false,"pushed_at":"2024-12-11T23:32:56.000Z","size":1899,"stargazers_count":268,"open_issues_count":26,"forks_count":61,"subscribers_count":18,"default_branch":"v3","last_synced_at":"2025-03-31T20:08:52.128Z","etag":null,"topics":["go","golang","messaging","wamp","wamp-client","wamp-protocol","wamp-router","websockets"],"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/gammazero.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2017-07-11T20:09:16.000Z","updated_at":"2025-03-01T19:43:10.000Z","dependencies_parsed_at":"2023-11-29T17:46:48.595Z","dependency_job_id":"91f04146-6d0d-4e45-99d0-e9833e30e13c","html_url":"https://github.com/gammazero/nexus","commit_stats":{"total_commits":462,"total_committers":24,"mean_commits":19.25,"dds":0.4025974025974026,"last_synced_commit":"063e48a266a7bce4e9f4c8b165f87645782b3e29"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gammazero%2Fnexus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gammazero%2Fnexus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gammazero%2Fnexus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gammazero%2Fnexus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gammazero","download_url":"https://codeload.github.com/gammazero/nexus/tar.gz/refs/heads/v3","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247730069,"owners_count":20986404,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["go","golang","messaging","wamp","wamp-client","wamp-protocol","wamp-router","websockets"],"created_at":"2024-10-09T13:13:34.366Z","updated_at":"2025-04-07T21:13:37.317Z","avatar_url":"https://github.com/gammazero.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"doc/n-logo2.png\"\u003e\n\n# WAMP v2 router library, client library and router service\n\n[![Build Status](https://travis-ci.org/gammazero/nexus.svg)](https://travis-ci.org/gammazero/nexus)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![GoDoc](https://godoc.org/github.com/gammazero/nexus?status.svg)](https://godoc.org/github.com/gammazero/nexus)\n\n**nexus** is a [WAMP](http://wamp-proto.org/) v2 router library, client library, and a router service, that implements\nmost of the features defined in the WAMP-protocol advanced profile.  The nexus project is written in\n[Go](http://golang.org/) and designed for highly concurrent asynchronous I/O.  The nexus router provides extended\nfunctionality.  The router and client interoperate with other WAMP implementations.\n\n## Documentation\n\nSee the [**nexus project Wiki**](https://github.com/gammazero/nexus/wiki) for documentation, examples, and\noperational details.\n\n[![GoDoc](https://godoc.org/github.com/gammazero/nexus?status.svg)](https://godoc.org/github.com/gammazero/nexus) for\nAPI documentation.\n\n## What is WAMP and nexus\n\nThe Web Application Messaging Protocol (WAMP) is an open standard WebSocket subprotocol that provides two application\nmessaging patterns in one unified protocol:\n[Remote Procedure Calls](http://wamp-proto.org/faq/index.html#rpc) and\n[Publish \u0026 Subscribe](http://wamp-proto.org/faq/index.html#pubsub).  WAMP is also referred to as WAMP-proto it\ndistinguish it from [other uses](https://en.wikipedia.org/wiki/WAMP_(disambiguation) of the acronym.\n\nUsing WAMP you can build distributed systems out of application components which are loosely coupled and communicate\nin (soft) real-time.\n\nNexus is a software package that provides a WAMP router library, client library, and stand-alone WAMP router service.\nThis nexus package provides a messaging system for building distributed applications and services.  Endpoints using\nwebsockets, TCP sockets, Unix sockets, and in-process connections may all communicate with each other via pub/sub\nand routed RPC messaging.\n\n - The router library can be used to build custom WAMP routers or to embed a WAMP router in an application.\n - The client library can be used to build clients that connect to any WAMP server, or to communicate in-process\n   with a WAMP router embedded in the same application.\n - The router service can be run as-is to provide WAMP routing.\n\n## Installation\n\n### Install nexusd router service from source\n\n```\ngo get -d github.com/gammazero/nexus/nexusd\ncd ${GOPATH}/src/github.com/gammazero/nexus/nexusd\nmake install\n```\n\nRun `nexusd -help` to see usage information.  Although `nexusd` can be run using only command line flags,\na [configuration file](https://raw.githubusercontent.com/gammazero/nexus/v3/nexusd/etc/nexus.json) offers much\nmore configurability.\n\n### Create configuration file and run nexusd service\n\n```\ncp ${GOPATH}/src/github.com/gammazero/nexus/nexusd/etc/nexus.json ./\nvi nexus.json\nnexusd -c nexus.json\n```\n\n### Install examples to run and test with\n\n```\ngit clone git@github.com:gammazero/nexus.git\ncd nexus/examples\n```\n\n## Building routers and clients with nexus\n\nThe nexus router library is used to build a WAMP router or embed one in your service.  The nexus client library is\nused to build WAMP clients into you goloang applications. To use either of these libraries, import the v3 version of\nthe appropriate packages.  Version v3 is the only currently supported version.\n\n```go\nimport (\n\t\"github.com/gammazero/nexus/v3/client\"\n\t\"github.com/gammazero/nexus/v3/wamp\"\n)\n```\n\n## Run nexusd from a container\n\nPull the nexusd container image built with the latest code version and run the container:\n\n```\ndocker pull ghcr.io/gammazero/nexusd:latest\ndocker run ghcr.io/gammazero/nexusd:latest\n```\n\nNow it just works. By default, the router accepts connections on port `8080` and allows anonymous communication with\nclients using `realm1`. You can change the values or get help by passing options to the container process:\n\n```\ndocker run ghcr.io/gammazero/nexusd:latest --ws 0.0.0.0:8888 --realm autobahn\ndocker run ghcr.io/gammazero/nexusd:latest --help\n```\n\nAlternatively, you can mount the nexusd configuration file to the container, and get a more customizable and secure\nenvironment. See the nexusd configuration reference for details. Finally, you can also run the container process as\nan unprivileged user.\n\n\n## Examples\n\nLook at the examples to see how to create simple clients and servers.  Follow the\n[README.md](https://github.com/gammazero/nexus/blob/v3/examples/README.md) in the `nexus/examples` directory.\nExamples of using advanced profile features are also available in the\n[wiki documentation](https://github.com/gammazero/nexus/wiki).\n\nhttps://github.com/gammazero/nexus/tree/v3/examples\n\nThe examples include interoperability examples to demonstrate nexus working with different WAMP implementations.\nEach of these has its own README.md that describes how to set up the environment and run the examples.\n\nhttps://github.com/gammazero/nexus/tree/v3/examples/interop\n\nThe nexusd service is also an example stand-alone WAMP router.  All the router options are configurable in nexusd\nusing a configuration file, and one is provided in the `nexusd/etc/` directory.  This can be used as starting point\nto write your own WAMP router service.\n\nhttps://github.com/gammazero/nexus/tree/v3/nexusd\n\n## Contributing\n\nPlease read the [Contributing](https://github.com/gammazero/nexus/blob/v3/CONTRIBUTING.md#contributing-to-nexus)\nguide if you are interested in becoming a contributor to this project.\n\nPlease report any problems, or request changes and new functionality by opening\nan [issue](https://github.com/gammazero/nexus/issues).\n\n## Nexus Features\n\n- **Concurrent Asynchronous I/O** Nexus supports large numbers of clients concurrently sending and receiving messages,\n  and never blocks on I/O, even if a client becomes unresponsive.  See\n  [Router Concurrency](https://github.com/gammazero/nexus/wiki/Router-Concurrency) and\n  [Client Concurrency](https://github.com/gammazero/nexus/wiki/Client-Concurrency) for details.\n- **WAMP Advanced Profile Features**  This project implements most of the advanced profile features in WAMP v2.\n  See [current feature support](https://github.com/gammazero/nexus#advanced-profile-feature-support) provided by nexus.\n  Nexus also offers extended functionality for retrieving session information and for message filtering, giving clients\n  more ability to decide where to send messages.\n- **Flexibility** Multiple transports and serialization options are supported, and more are being developed to maximize\n  interoperability. Currently, nexus provides websocket, rawsocket (tcp and unix), and local (in-process) transports.\n  [JSON](https://en.wikipedia.org/wiki/JSON), [MessagePack](http://msgpack.org/index.html), and\n  [CBOR](https://tools.ietf.org/html/rfc7049) serialization is available over websockets and rawsockets.\n- **Security** TLS is available over websockets and rawsockets with client and server APIs that allow configuration\n  of TLS.  The nexus router library also provides interfaces for integration of client authentication and authorization\n  logic.\n\n### Status\n\nThe currently maintained version of this module is 3.x.  Earlier major versions are no longer supported.\n\n## Advanced Profile Feature Support\n\n### RPC Features\n\n| Feature                      | Supported |\n|------------------------------|-----------|\n| progressive_call_results     | Yes       |\n| progressive_call_invocations | Yes       |\n| call_timeout                 | Yes       |\n| call_canceling               | Yes       |\n| caller_identification        | Yes       |\n| call_trustlevels             | No        |\n| registration_meta_events     | Yes       |\n| registration_meta_procedures | Yes       |\n| pattern_based_registration   | Yes       |\n| shared_registration          | Yes       |\n| sharded_registration         | No        |\n| registration_revocation      | No        |\n| procedure_reflection         | No        |\n| payload_passthru_mode        | Yes       |\n\n### PubSub Features\n\n| Feature                       | Supported |\n|-------------------------------|-----------|\n| subscriber_blackwhite_listing | Yes       |\n| publisher_exclusion           | Yes       |\n| publisher_identification      | Yes       |\n| publication_trustlevels       | No        |\n| subscription_meta_events      | Yes       |\n| subscription_meta_procedures  | Yes       |\n| pattern_based_subscription    | Yes       |\n| sharded_subscription          | No        |\n| event_history                 | Yes       |\n| topic_reflection              | No        |\n| testament_meta_api            | Yes       |\n| payload_passthru_mode         | Yes       |\n\n### Other Advanced Features\n\n| Feature                           | Supported  |\n|-----------------------------------|------------|\n| rawsocket (TCP \u0026 Unix) transport  | Yes        |\n| session meta events               | Yes        |\n| session meta procedures           | Yes        |\n| TLS for websockets                | Yes        |\n| TLS for rawsockets                | Yes        |\n| challenge-response authentication | Yes        |\n| cookie authentication             | Yes        |\n| ticket authentication             | Yes        |\n| batched WS transport              | No         |\n| longpoll transport                | No         |\n| websocket compression             | Yes        |\n\n## Extended Functionality\n\nNexus provides [extended functionality](https://github.com/gammazero/nexus/wiki/Extended-Functionality) around\nsubscriber black/white listing and in the information available via the session meta API.  This enhances the\nability of clients to make decisions about message recipients.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgammazero%2Fnexus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgammazero%2Fnexus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgammazero%2Fnexus/lists"}