{"id":16812534,"url":"https://github.com/deluan/bring","last_synced_at":"2025-09-23T23:35:54.553Z","repository":{"id":42692528,"uuid":"210942350","full_name":"deluan/bring","owner":"deluan","description":"Remote control library for the Apache Guacamole protocol (RDP/VNC)","archived":false,"fork":false,"pushed_at":"2025-03-24T10:27:03.000Z","size":160,"stargazers_count":80,"open_issues_count":4,"forks_count":10,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-30T10:09:01.160Z","etag":null,"topics":["apache-guacamole","guacamole","guacamole-client","guacamole-protocol","rdp","rdp-client","remote-control","remote-desktop","screen-capture","vnc","vnc-client"],"latest_commit_sha":null,"homepage":"https://github.com/deluan/bring#bring","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/deluan.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}},"created_at":"2019-09-25T21:19:00.000Z","updated_at":"2025-02-10T14:12:34.000Z","dependencies_parsed_at":"2024-10-26T21:14:04.833Z","dependency_job_id":"8579ca41-7004-4dd4-9783-e84565a8136c","html_url":"https://github.com/deluan/bring","commit_stats":{"total_commits":109,"total_committers":4,"mean_commits":27.25,"dds":"0.22018348623853212","last_synced_commit":"e620e0bb36effb2ae01f42984a7c82119b1ee576"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deluan%2Fbring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deluan%2Fbring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deluan%2Fbring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deluan%2Fbring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deluan","download_url":"https://codeload.github.com/deluan/bring/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247471521,"owners_count":20944158,"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":["apache-guacamole","guacamole","guacamole-client","guacamole-protocol","rdp","rdp-client","remote-control","remote-desktop","screen-capture","vnc","vnc-client"],"created_at":"2024-10-13T10:22:15.768Z","updated_at":"2025-09-23T23:35:54.511Z","avatar_url":"https://github.com/deluan.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bring\n[![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/deluan/bring?label=latest)](https://github.com/deluan/bring/releases)\n[![Documentation](https://img.shields.io/badge/godoc-reference-5272B4.svg?style=flat)](https://godoc.org/github.com/deluan/bring) \n[![Build Status](https://github.com/deluan/bring/workflows/CI/badge.svg)](https://github.com/deluan/bring/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/deluan/bring)](https://goreportcard.com/report/github.com/deluan/bring)\n[![Maintainability](https://api.codeclimate.com/v1/badges/d35171fdba1795a6f74d/maintainability)](https://codeclimate.com/github/deluan/bring/maintainability)\n\nGo client library for [Apache Guacamole](http://guacamole.apache.org) Protocol.\n\n## Quick start (tl;dr)\n\n1. Install the library in your project: \n        \n       go get github.com/deluan/bring\n\n2. Create a [Client](https://godoc.org/github.com/deluan/bring#Client) with the [NewClient()](https://godoc.org/github.com/deluan/bring#NewClient) function. \nThis creates a session with the specified `guacd` server\n3. Start the client with `go client.Start()`\n4. Get screen updates with `client.Screen()`\n5. Send keystrokes with `client.SendKey()`\n6. Send mouse updates with `client.SendMouse()`  \n \nSee the [sample app](sample/main.go) for a working example\n\n## Documentation\n\nThe API is provided by the [Client](https://godoc.org/github.com/deluan/bring#Client) struct. \nThe [documentation](https://godoc.org/github.com/deluan/bring) is a work in progress, \nbut the API is very simple and you can take a look at all features available in the \n[sample app](sample) provided. Here are the steps to run the app:\n\n1) You'll need a working `guacd` server in your machine. The easiest way is using docker \nand docker-compose. Just call `docker-compose up -d` in the root of this project. It \nstarts the `guacd` server and a sample headless linux with a VNC server\n\n2) Run the sample app with `make run`. It will connect to the linux container started by docker.\n\nTake a look at the Makefile to learn how to run it in different scenarios.\n\n## Why?\n\nApache Guacamole was created with the goal of making a dedicated client unnecessary. \nSo why create a client?!\n\nThe idea is that if you need to control a remote machine from your Go code, you can \nleverage the Guacamole protocol and the `guacd` server as a bridge. This way you can \nuse any protocol supported by Guacamole (currently RDP and VNC, with X11 coming in \nthe future) to do screen capture and remote control of networked servers/desktop \nmachines from within your Go app.\n\nMy use case was to automate some tasks in a VirtualBox VM, but there was no Go support \nfor the VirtualBox XPCOM API on Macs (my host platform), nor a working RDP client \nimplementation in Go. Instead of writing a new RDP client, why not leverage the awesome \nGuacamole project and get support for multiple protocols?\n\n## References:\n- [The Guacamole protocol](http://guacamole.apache.org/doc/gug/guacamole-protocol.html)\n- [Guacamole protocol reference](http://guacamole.apache.org/doc/gug/protocol-reference.html#rect-instruction)\n- [Apache Guacamole Client implementation](https://github.com/apache/guacamole-client/tree/master/guacamole-common-js)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeluan%2Fbring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeluan%2Fbring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeluan%2Fbring/lists"}