Go Desktop Agent Part 1: Architecture and Problem Space

In this first part of our Go Desktop Agent series, we’ll explore the architectural decisions and the real-world problems this agent solves.

The Problem: Reaching Users Where They Are

System administrators, DevOps engineers, and IT professionals often face a critical challenge: how do you reliably notify users about important system events when they’re focused on their work? Email gets buried, Slack messages get missed, and web dashboards require active monitoring. What’s needed is a system that can break through the noise and deliver timely, actionable notifications directly to the desktop.

Read more →

Building Windows Services with Go: A Starting Point

A Generic Go Windows Service Template

I’m pleased to share go-windows-service.

What is go-windows-service?

The go-windows-service project is a template implementation that demonstrates how to create a proper Windows service using Go’s golang.org/x/sys/windows/svc package. Rather than being a feature-complete application, it’s designed as a reference implementation that you can clone, customize, and extend for your specific needs.

Why Use This Template?

Creating Windows services in Go can be tricky if you’re not familiar with the Windows service architecture. And let’s be honest, the Windows service API documentation sometimes feels like it was written during the Windows NT era and nobody bothered to update it since. This template handles all the boilerplate code for you - service control handlers, proper signal handling, event log integration, and all that fun stuff.

Instead of spending three days figuring out why your service won’t start (spoiler: it’s always the event log permissions), you can focus on implementing your actual business logic.

Read more →

Introducing the Go Desktop Agent Series

A New Series on Building Cross-Platform Desktop Applications with Go

I’m excited to announce a new series of blog posts focused on building a multiplatform desktop notification agent using Go. This series will walk you through the architecture, implementation details, and design decisions behind the Go Desktop Agent project. It is meant to be inspirational, and used as a starting point to build your own.

What is the Go Desktop Agent?

The Go Desktop Agent is a cross-platform desktop notification system that uses Redis pub/sub for message delivery and reply handling. It runs as a background service with a system tray presence, allowing applications to send desktop notifications across Windows, macOS, and Linux platforms. We worked on this idea at a client but we used Python libraries and AWS services as backend. Java also came up as an idea, but I also really liked the idea of trying this with Go.

Key Features

The agent provides several powerful features:

  • Cross-platform desktop notifications - Works seamlessly..(well almost, or at least better than expected!) on Windows, macOS, and Linux
  • System tray integration - Gopher-branded icon with interactive menu, which is not my best creation (sorry!)
  • Redis pub/sub messaging - Scalable message delivery using Redis
  • Interactive notifications - True OK/Cancel dialog buttons with response handling
  • Reply channel mechanism - Machine-specific response channels based on hostname
  • Zero configuration - Works out of the box with sensible defaults
  • Platform-specific native dialogs - Uses native UI components on each platform

Read more →

New version of the Terraform-provider-leostream

Introducing Terraform Provider for Leostream v0.1.3

We are excited to announce the release of version 0.1.3 of the Terraform Provider for Leostream. This release brings enhancements and stability improvements that enable you to efficiently manage your Leostream environments with Infrastructure as Code (IaC). Whether you’re provisioning resources, managing configurations, or automating your workflows, this provider empowers you to integrate Leostream seamlessly into your Terraform-powered deployments.

Read more →

Next step: Terraform-provider-leostream

Another Leostream project has been released! This time it is a Terraform provider for Leostream. This provider allows you to manage Leostream resources using Terraform. It makes use of the Leostream Golang client library that we created.

Read more →

Introducing the Leostream Admin CLI as well!

I have also been working on a command-line interface (CLI) tool that can be used to manage Leostream resources. It makes use of the Leostream Golang client library that I have created.

It was created to help with issues like:

  • looping through pools to update the pool settings
  • seeing the status of the pools
  • checking which desktops are in a pool
  • taking a backup of Leostream
  • restore a backup of Leostream
  • checking the status of an individual desktop

You can find the code on my company GitLab instance.

Quick start:

% go install gitlab.hocmodo.nl/community/leostream-admin-cli@latest
% export GOPATH=$HOME/go
% export PATH=$PATH:$GOPATH/bin
% leostream-admin-cli --help

Read more →

Introducing the Leostream Golang client

I have been working on a Leostream client in Golang.

More information about Leostream can be found on Wikipedia:

It is basically a broker for connecting users to remote desktops and applications. These desktops can be running in a variety of environments, including cloud, on-premises, and hybrid environments.

The client I created is a wrapper around the Leostream REST API. It is still in development but I have already implemented some basic functionality. The client is available on my company GitLab instance.

Read more →