Open-source software built primarily in Go: system tooling, media utilities, and developer infrastructure.
A collection of small, focused, single-purpose tools I build and maintain for real problems I hit in my own
workflow — media library management, self-hosted infrastructure, and everyday CLI utilities. Each project is
deliberately small, well-tested, and documented, with a Makefile for easy builds.
Batch-converts video files to the modern MP4 (H.264/AAC) container using FFmpeg.
Builds HandBrakeCLI from source inside an Alpine container with Intel QSV (--enable-qsv) encoding support.
docker buildx --output type=local (no compose or volume mounts); make build / make install / make clean targets
with HB_REF, OUTPUT_DIR and DOCKERFILE overrides.Converts an archive of MP3 chapters (ZIP/7z/RAR or a plain folder) into a single M4B audiobook.
Organises audio files by their ID3 metadata into an Artist/Album/ folder layout.
.mp3/.mp4/.m4b, moves files into output/Artist/Album/Title,
strips illegal characters for Windows compatibility.Prints detailed technical metadata for media files using FFmpeg libraries (libavformat/avcodec via cgo).
A simple HTTP file server that serves a local directory over the network.
update.sh helper.A web app for managing a local Certificate Authority and issuing internal server certificates.
tar.gz export,
CRL generation, and a multi-language UI (EN/IT/JA).Lightweight Go daemon that keeps a UniFi static route in sync with a dynamic DNS hostname.
A lightweight Go daemon that monitors a folder for files and sends a Telegram alert when matching files are found.
A Go CLI took that mounts, unmounts, creates and expands LUKS-encrypted devices and file-backed containers.
luksOpen/luksClose for encrypted sources, direct mount for plain ones), passphrase or key-file unlocking, container creation with luksFormat + ext4, container expansion (truncate + resize2fs), and clear validation of sources, mount points, and key files.A fast, self-hosted web-based file browser with a dark theme, built in Go with zero external runtime dependencies.
-c copy) streamed with live progress, per-video interval presets,
thumbnail cache with batch generation, rename/delete/move (single or bulk), protected paths, favourite folder
bookmarks, per-user path jails with bcrypt login, per-user UID/GID chown, and a mobile-responsive dark UI — all in
a single binary with embedded assets.Batch-renames files and folders using a chain of regex rules defined in YAML.
apply_to (files/folders/both), and a summary output.Randomly selects and moves N files from one directory to another.
-ext), and fast os.Rename with
cross-filesystem fallback.A Docker-based development container for Go and OpenCode development, with VPN connectivity.
golang:latest image with git, wireguard-tools, ffmpeg, chromium, gh CLI, and
OpenCode; mounts SSH keys, git config, and OpenCode config; grants VPN networking via /dev/net/tun and
NET_ADMIN.Builds a static musl binary of opencode for Alpine Linux using Docker buildx.
linux x64 (musl) target
is produced, scratch stage that extracts just the binary via --output type=local, and make build / make install /
make clean targets with OUTPUT_DIR, OPENCODE_REF and OPENCODE_VERSION overrides.A tile-based dungeon maze game with a web interface — roll the dice, traverse a randomly generated grid of corridor tiles, and race to catch the goal before the other players.
A web port of KShisen, the Shisen-Sho Mahjongg game of the KDE Games project — it runs in the browser, needs no server and no installation, and works on a desktop as well as on a phone.
In-depth technical write-ups — long-form, run-an-example-first tutorials on Go systems programming, networking, and security. Each title links to the article on Zenn, with a GitHub icon next to the title linking to the companion repo where one exists — every repo pairs the full article with complete, runnable sample code.
Goes below net.Conn — encoding custom binary protocols over UDP/TCP, reading raw Ethernet frames with
x/net/ipv4, and hand-crafting IP/ICMP packets (including checksums) with gopacket.
Makes the case for WebAssembly as a security tool (not just a performance one): sandboxing untrusted code, isolating memory, and running the same Go validator compiled to Wasm on both client and server.
Explains how struct tags work under the hood via reflect, then builds a working reflection-based validate tag
library for API request validation.
Builds a Go ACME client with go-acme/lego that obtains and auto-renews (wildcard) Let’s Encrypt certificates
using Cloudflare DNS-01 validation, with a daily expiry-check background loop.
Covers why HTTP/3/QUIC matters (0-RTT handshakes, no head-of-line blocking, connection migration) and stands up
production http3 servers and clients with quic-go.
Implements UDP multicast discovery (239.0.0.0/8) for nodes to find each other on a LAN, then TCP for reliable
messaging — complete, runnable, dependency-free example.
A history of PGP / OpenPGP and a practical guide using the maintained ProtonMail/go-crypto package — key-pair
generation, encryption, and signature verification across runnable examples/ modules.
Shows why flag toggling must be real-time (kill switches, progressive rollouts, targeting, A/B tests) and builds a
thread-safe in-memory store with streaming sync — from simple atomic.Value to production-grade setups.
Walks the same problem (reading users and fetching profile data) at three maturity levels, demonstrating how error handling, package structure, concurrency, and maintainability improve with experience.
Drives Chrome via the Chrome DevTools Protocol from pure Go — no Selenium or WebDriver — covering contexts, actions/tasks, scraping JavaScript-heavy sites, screenshots, PDFs, and end-to-end tests.
A primer on cgo, then builds an MP4 inspector that uses FFmpeg’s C libraries (libavformat/avcodec/avutil) to list video, audio, and subtitle streams plus chapters.
Go has no @Override or [Serializable] — it has compiler directives. Explains what actually makes a //go:
comment a directive rather than a plain comment, then covers //go:generate, //go:build, //go:embed,
//go:noinline, //go:noescape, //go:linkname and //go:nosplit, each with runnable examples.
Go’s built-in fuzzing (since 1.18) with no external dependencies — *testing.F seed corpora and f.Fuzz
callbacks, worked examples fuzzing a JSON parser, a URL parser, a math function and byte slices, a real bug the
fuzzer found in the author’s own code, and how to run, bound and triage fuzz targets.
Walks the passes that make naive-looking Go fast — escape analysis, inlining, bounds-check elimination, dead code and constant folding, function specialization and devirtualization — and the code patterns that silently defeat them, with a before/after example and a practical checklist.
Injects a version, Git commit hash and build time into a binary at compile time with
go build -ldflags "-X" — without changing a single line of code — plus the Makefile plumbing that automates it.
The standard behind passkeys, security keys and Windows Hello: WebAuthn vs CTAP2, the registration (attestation)
and authentication (assertion) ceremonies, what’s actually inside the data, why it resists phishing, and a full
relying-party server built in Go with go-webauthn — begin/finish for both ceremonies and the key security
properties to get right.
Screen readers never see the DOM — they consume the accessibility tree. Explains the DOM → a11y tree → OS API → speech pipeline, why DOM order and semantics matter more than visual appearance, how accessible names are computed, and the most common errors and their fixes. —
Maintained by @giulianozor · All projects are available at github.com/giulianozor · Articles at github.com/gz-zenn