{"id":13493236,"url":"https://github.com/uber/tchannel-go","last_synced_at":"2025-06-11T17:40:13.169Z","repository":{"id":39864722,"uuid":"42740141","full_name":"uber/tchannel-go","owner":"uber","description":"Go implementation of a multiplexing and framing protocol for RPC calls","archived":false,"fork":false,"pushed_at":"2025-01-08T17:37:32.000Z","size":5552,"stargazers_count":501,"open_issues_count":54,"forks_count":86,"subscribers_count":2470,"default_branch":"dev","last_synced_at":"2025-03-28T11:39:54.714Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://uber.github.io/tchannel/","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/uber.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2015-09-18T18:28:15.000Z","updated_at":"2025-03-26T19:52:36.000Z","dependencies_parsed_at":"2023-10-14T15:28:49.011Z","dependency_job_id":"e39e65d6-53f8-4050-9973-fb0f1214a401","html_url":"https://github.com/uber/tchannel-go","commit_stats":null,"previous_names":[],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/uber/tchannel-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber%2Ftchannel-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber%2Ftchannel-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber%2Ftchannel-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber%2Ftchannel-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uber","download_url":"https://codeload.github.com/uber/tchannel-go/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uber%2Ftchannel-go/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259308162,"owners_count":22837974,"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":[],"created_at":"2024-07-31T19:01:13.425Z","updated_at":"2025-06-11T17:40:13.116Z","avatar_url":"https://github.com/uber.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# TChannel [![GoDoc][doc-img]][doc] [![Build Status][ci-img]][ci] [![Coverage Status][cov-img]][cov]\n\n[TChannel][tchan-spec] is a multiplexing and framing protocol for RPC calls.\ntchannel-go is a Go implementation of the protocol, including client libraries\nfor [Hyperbahn][hyperbahn].\n\nIf you'd like to start by writing a small Thrift and TChannel service, check\nout [this guide](guide/Thrift_Hyperbahn.md). For a less opinionated setup, see\nthe [contribution guidelines](CONTRIBUTING.md).\n\n## Overview\n\nTChannel is a network protocol that supports:\n\n * A request/response model,\n * Multiplexing multiple requests across the same TCP socket,\n * Out-of-order responses,\n * Streaming requests and responses,\n * Checksummed frames,\n * Transport of arbitrary payloads,\n * Easy implementation in many languages, and\n * Redis-like performance.\n\nThis protocol is intended to run on datacenter networks for inter-process\ncommunication.\n\n## Protocol\n\nTChannel frames have a fixed-length header and 3 variable-length fields. The\nunderlying protocol does not assign meaning to these fields, but the included\nclient/server implementation uses the first field to represent a unique\nendpoint or function name in an RPC model.  The next two fields can be used for\narbitrary data. Some suggested way to use the 3 fields are:\n\n* URI path + HTTP method and headers as JSON + body, or\n* Function name + headers + thrift/protobuf.\n\nNote, however, that the only encoding supported by TChannel is UTF-8.  If you\nwant JSON, you'll need to stringify and parse outside of TChannel.\n\nThis design supports efficient routing and forwarding: routers need to parse\nthe first or second field, but can forward the third field without parsing.\n\nThere is no notion of client and server in this system. Every TChannel instance\nis capable of making and receiving requests, and thus requires a unique port on\nwhich to listen. This requirement may change in the future.\n\nSee the [protocol specification][tchan-proto-spec] for more details.\n\n## Examples\n\n - [ping](examples/ping): A simple ping/pong example using raw TChannel.\n - [thrift](examples/thrift): A Thrift server/client example.\n - [keyvalue](examples/keyvalue): A keyvalue Thrift service with separate server and client binaries.\n\n\u003chr\u003e\nThis project is released under the [MIT License](LICENSE.md).\n\n[doc-img]: https://godoc.org/github.com/uber/tchannel-go?status.svg\n[doc]: https://godoc.org/github.com/uber/tchannel-go\n[ci-img]: https://github.com/uber/tchannel-go/actions/workflows/tests.yaml/badge.svg?branch=master\n[ci]: https://github.com/uber/tchannel-go/actions/workflows/tests.yaml\n[cov-img]: https://coveralls.io/repos/uber/tchannel-go/badge.svg?branch=master\u0026service=github\n[cov]: https://coveralls.io/github/uber/tchannel-go?branch=master\n[tchan-spec]: http://tchannel.readthedocs.org/en/latest/\n[tchan-proto-spec]: http://tchannel.readthedocs.org/en/latest/protocol/\n[hyperbahn]: https://github.com/uber/hyperbahn\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuber%2Ftchannel-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuber%2Ftchannel-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuber%2Ftchannel-go/lists"}