Description
Go Client for Apache Guacamole Protocol.
Why?
Apache Guacamole was created with the goal of making a dedicated client unnecessary. So why create a client?!
The idea is that if you need to control a remote machine from your Go code, you can leverage the Guacamole protocol and the `guacd` server as a bridge. This way you can use any protocol supported by Guacamole (currently RDP and VNC, with X11 coming in the future) to do screen capture and remote control of networked servers/desktop machines.
Bring alternatives and similar packages
Based on the "Networking" category.
Alternatively, view Bring alternatives based on common mentions on social networks and blogs.
-
fasthttp
Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http -
Netmaker
Netmaker makes networks with WireGuard. Netmaker automates fast, secure, and distributed virtual networks. -
gnet
🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go. -
mqttPaho
The Paho Go Client provides an MQTT client library for connection to MQTT brokers via TCP, TLS or WebSockets. -
fortio
Fortio load testing library, command line tool, advanced echo server and web UI in go (golang). Allows to specify a set query-per-second load and record latency histograms and other useful stats. -
nbio
Pure Go 1000k+ connections solution, support tls/http1.x/websocket and basically compatible with net/http, with high-performance and low memory cost, non-blocking, event-driven, easy-to-use. -
gev
🚀Gev is a lightweight, fast non-blocking TCP network library / websocket server based on Reactor mode. Support custom protocols to quickly and easily build high-performance servers. -
gmqtt
Gmqtt is a flexible, high-performance MQTT broker library that fully implements the MQTT protocol V3.x and V5 in golang -
easytcp
:sparkles: :rocket: EasyTCP is a light-weight TCP framework written in Go (Golang), built with message router. EasyTCP helps you build a TCP server easily fast and less painful. -
peerdiscovery
Pure-Go library for cross-platform local peer discovery using UDP multicast :woman: :repeat: :woman: -
raw
DISCONTINUED. Package raw enables reading and writing data at the device driver level for a network interface. MIT Licensed. -
ethernet
Package ethernet implements marshaling and unmarshaling of IEEE 802.3 Ethernet II frames and IEEE 802.1Q VLAN tags. MIT Licensed.
CodeRabbit: AI Code Reviews for Developers

Do you think we are missing an alternative of Bring or a related project?
Popular Comparisons
README
Bring
Go client library for Apache Guacamole Protocol.
Quick start (tl;dr)
Install the library in your project:
go get github.com/deluan/bring
Create a Client with the NewClient() function. This creates a session with the specified
guacd
serverStart the client with
go client.Start()
Get screen updates with
client.Screen()
Send keystrokes with
client.SendKey()
Send mouse updates with
client.SendMouse()
See the [sample app](sample/main.go) for a working example
Documentation
The API is provided by the the Client struct. The documentation is a work in progress, but the API is very simple and you can take a look at all features available in the [sample app](sample) provided. Here are the steps to run the app:
1) You'll need a working guacd
server in your machine. The easiest way is using docker
and docker-compose. Just call docker-compose up -d
in the root of this project. It
starts the guacd
server and a sample headless linux with a VNC server
2) Run the sample app with make run
. It will connect to the linux container started by docker.
Take a look at the Makefile to learn how to run it in different scenarios.
Why?
Apache Guacamole was created with the goal of making a dedicated client unnecessary. So why create a client?!
The idea is that if you need to control a remote machine from your Go code, you can
leverage the Guacamole protocol and the guacd
server as a bridge. This way you can
use any protocol supported by Guacamole (currently RDP and VNC, with X11 coming in
the future) to do screen capture and remote control of networked servers/desktop
machines from within your Go app.
My use case was to automate some tasks in a VirtualBox VM, but there was no Go support for the VirtualBox XPCOM API on Macs (my host platform), nor a working RDP client implementation in Go. Instead of writing a new RDP client, why not leverage the awesome Guacamole project and get support for multiple protocols?