{"id":29869615,"url":"https://github.com/antsif-a/wgrpc","last_synced_at":"2026-05-06T17:35:43.100Z","repository":{"id":306993245,"uuid":"1027825718","full_name":"antsif-a/wgrpc","owner":"antsif-a","description":"gRPC server for WireGuard","archived":false,"fork":false,"pushed_at":"2026-02-27T05:28:03.000Z","size":28,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-27T12:13:20.746Z","etag":null,"topics":["grpc","wireguard"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antsif-a.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-07-28T15:34:47.000Z","updated_at":"2026-02-27T05:28:08.000Z","dependencies_parsed_at":"2025-07-28T22:21:33.969Z","dependency_job_id":"c5a2e1c4-456f-455b-9f65-87ee6ec1c02e","html_url":"https://github.com/antsif-a/wgrpc","commit_stats":null,"previous_names":["antsif-a/wgrpc"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/antsif-a/wgrpc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antsif-a%2Fwgrpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antsif-a%2Fwgrpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antsif-a%2Fwgrpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antsif-a%2Fwgrpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antsif-a","download_url":"https://codeload.github.com/antsif-a/wgrpc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antsif-a%2Fwgrpc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32704692,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"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":["grpc","wireguard"],"created_at":"2025-07-30T17:00:33.599Z","updated_at":"2026-05-06T17:35:43.095Z","avatar_url":"https://github.com/antsif-a.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=center\u003e\n\u003cimg alt=\"изображение\" src=\"https://github.com/user-attachments/assets/1b69e871-dbcc-40bf-b4d0-7e818c24f162\" /\u003e\n\u003c/p\u003e\n\u003ch1 align=center\u003ewgrpc — gRPC server for WireGuard\u003c/h1\u003e\n=====\n\nThis is a lightweight gRPC service that can create, read, configure and delete [WireGuard](https://www.wireguard.com) devices, written in C++ with performance and security in mind.\n\nBuild\n-----\n\n```sh\ncmake -Bbuild .\ncmake --build build\n```\nA binary will be avaliable at `./build/wgrpc`.\n\nUsage\n-----\n\n\n\u003e The server requires `CAP_NET_ADMIN` capability to manage network devices. You can either run the binary as root or manually attach this capability, see [capabilities(7)](https://www.man7.org/linux/man-pages/man7/capabilities.7.html).\n\n```\nUsage: wgrpc [options]\n\nOptions:\n  --help                Show help\n  --address ip (=[::])  Set address\n  --port port (=50051)  Set port\n```\n\nThis server supports [gRPC Reflection](https://grpc.io/docs/guides/reflection/), so you can interact with server using tools like [gRPCurl](https://github.com/fullstorydev/grpcurl) or [grpc-cli](https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md):\n```\n$ grpc_cli ls localhost:50051 proto.WireGuardService\nCreateDevice\nConfigureDevice\nGetDevices\nGetDevice\nDeleteDevice\nGeneratePrivateKey\nGeneratePublicKey\nGeneratePresharedKey\n```\n```\n$ grpc_cli call localhost:50051 proto.WireGuardService.GeneratePrivateKey\nreading request message from stdin...\nconnecting to localhost:50051\nkey: \"oN7o8iA3E1XvPOSs+W5X7Q5vTjdvOGlBM0UxWHZQT1M=\"\nRpc succeeded with OK status\n```\n\n### WireGuardService\n\n| Method Name | Request Type | Response Type | Description |\n| --- | --- | --- | --- |\n| CreateDevice | [CreateDevice.Request](#proto.CreateDevice.Request) | [EmptyResponse](#proto.EmptyResponse) | Creates a device |\n| ConfigureDevice | [ConfigureDevice.Request](#proto.ConfigureDevice.Request) | [EmptyResponse](#proto.EmptyResponse) | Configures a device by name |\n| GetDevices | [EmptyRequest](#proto.EmptyRequest) | [GetDevices.Response](#proto.GetDevices.Response) | Returns current devices |\n| GetDevice | [GetDevice.Request](#proto.GetDevice.Request) | [GetDevice.Response](#proto.GetDevice.Response) | Returns a device by name |\n| DeleteDevice | [DeleteDevice.Request](#proto.DeleteDevice.Request) | [EmptyResponse](#proto.EmptyResponse) | Deletes a device by name |\n| GeneratePrivateKey | [EmptyRequest](#proto.EmptyRequest) | [GeneratePrivateKey.Response](#proto.GeneratePrivateKey.Response) | Generates a new private key |\n| GeneratePublicKey | [GeneratePublicKey.Request](#proto.GeneratePublicKey.Request) | [GeneratePublicKey.Response](#proto.GeneratePublicKey.Response) | Generates a new public key from a provided private key |\n| GeneratePresharedKey | [EmptyRequest](#proto.EmptyRequest) | [GeneratePresharedKey.Response](#proto.GeneratePresharedKey.Response) | Generates a new preshared key |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantsif-a%2Fwgrpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantsif-a%2Fwgrpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantsif-a%2Fwgrpc/lists"}