{"id":20057471,"url":"https://github.com/encoredev/emissary","last_synced_at":"2025-05-05T14:31:10.223Z","repository":{"id":41890154,"uuid":"468711728","full_name":"encoredev/emissary","owner":"encoredev","description":"Emissary is a management application which runs along side your app in your cloud","archived":false,"fork":false,"pushed_at":"2024-04-19T12:26:32.000Z","size":193,"stargazers_count":5,"open_issues_count":4,"forks_count":1,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-30T21:05:57.152Z","etag":null,"topics":["encore","go","golang"],"latest_commit_sha":null,"homepage":"https://encore.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/encoredev.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":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-03-11T10:47:56.000Z","updated_at":"2025-04-24T16:02:28.000Z","dependencies_parsed_at":"2024-01-11T11:13:35.167Z","dependency_job_id":"4fb51454-9bc6-4a16-b4b6-8bdf0dafaad7","html_url":"https://github.com/encoredev/emissary","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/encoredev%2Femissary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/encoredev%2Femissary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/encoredev%2Femissary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/encoredev%2Femissary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/encoredev","download_url":"https://codeload.github.com/encoredev/emissary/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252514898,"owners_count":21760457,"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":["encore","go","golang"],"created_at":"2024-11-13T12:59:06.777Z","updated_at":"2025-05-05T14:31:09.961Z","avatar_url":"https://github.com/encoredev.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://encore.dev\" alt=\"encore\"\u003e\u003cimg width=\"189px\" src=\"https://encore.dev/assets/img/logo.svg\"\u003e\u003c/a\u003e\n  \u003ch3\u003e\u003ca href=\"https://encore.dev\"\u003eEncore – The Backend Development Engine\u003c/a\u003e\u003c/h3\u003e\n\u003c/div\u003e\n\n# Emissary\n\nWhen you deploy an [Encore application to your own cloud](https://encore.dev/docs/deploy/own-cloud) Emissary is deployed\nalongside. It provides the Encore platform a way to access resources with your clouds private network in an authenticated\nmanner.\n\nIt's primary use right now is to allow the Encore platform a way to tunnel to your \n[SQL database](https://encore.dev/docs/develop/databases) to perform the database migrations to your application and to\nallow [access to the database from the Encore CLI](https://encore.dev/docs/develop/databases#connecting-to-databases)\n                                                                                                                          \n\n## How it works\n\nEmissary is split into two modules:\n- [the `server` module](./server) which is the binary we deploy to your cloud.\n- [the `library` module (this folder)](.) which serves as the client library and is used by our platform to establish connections.\n                                                                                                                                       \nThe library provides a `emissary.Dialer` which provides a `Dial` and a `DialContext` method. These can be provided to most\nGo networking enabled code as an underlying `Dial` function. When that other Go code tries to open a socket, it will use\nthe `emissary.Dialer` to establish the socket, which in-turn will be transparently routed through the Emissary server.\n\nThe Emissary server upon receiving the request, with authenticate the request using a shared secret key. Once\nauthenticated, the dialer can then request the server forwards the connection onto one of a predefined list of\nallowed remote resources within the private network.\n\nAt the bottom most level, Emissary is simply a Socks 5 client/server however we wrap the socks 5 connection in a\ntransport layer, which allows us to run Emissary in various locations to adapt to requirements in the target cloud.\n                                                                     \n```\n                      ┌─────────────────────────────────────────────────────────────────────────┐\n                      │Go `net.Conn`                                                            │\n┌────────────────┐    │  ┌────────────────┐     ┌─────────────────────┐     ┌────────────────┐  │    ┌────────────────┐\n│                │    │  │                │     │Transport Layer      │     │                │  │    │                │\n│ Go             │    │  │ Emissary       │     │ ┌─────────────────┐ │     │ Emissary       │  │    │ Target         │\n│                ├───►│  │                ├────►│ │Socks 5 Protocol │ ├────►│                │  ├───►│ Remote         │\n│ Client         │    │  │ Dialer         │     │ └─────────────────┘ │     │ Server         │  │    │ Resource       │\n│                │    │  │                │     │                     │     │                │  │    │                │\n└────────────────┘    │  └────────────────┘     └─────────────────────┘     └────────────────┘  │    └────────────────┘\n                      │                                                                         │\n                      └─────────────────────────────────────────────────────────────────────────┘\n```\n                \nCurrently, the only supported transport layer is a `websocket`; this transport layer allows Emissary to run behind HTTP\naware load balancers or in environments which only allow HTTP traffic in. In such environments we expect TLS termination\nto have occurred at the edge before the code executes such as AWS Lambda functions.\n\nTo learn how to configure an Emissary server see [example.env](./server/example.env). The server will load the configuration\nfrom either environmental variables or an `.env` file located within the working directory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fencoredev%2Femissary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fencoredev%2Femissary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fencoredev%2Femissary/lists"}