Hà Nội, Việt Nam · on GitHub since 2014

Cuong Giang

Software writer.

I write tools for developers: keyboard-driven terminal apps in Go, a Go web framework for Inertia.js, a native Mac SSH client, and packages for Laravel and Rails. All of it is open source, and nearly all of it installs with one command.

This page works like omassh: j k to move, enter to open, ? for every key.

Selected work

2019 – 2026

01gossh client2019 – 2026

omassh on GitHub

A keyboard-driven SSH client for the terminal: Termius’s data model, lazygit’s interaction model, running on top of real OpenSSH.

Keep hosts in groups that share a user, a key and a jump host. Connect with a keystroke, full screen or in a pane beside the list. Browse files, keep tunnels up after you quit, and run a script across a whole group — all through the ssh already on your machine.

It began in 2019 as zzh, a connection manager, and took its present shape under a new name.

brew install --cask cuonggt/tap/omassh
Every connection is your own ssh, so ~/.ssh/config, ProxyJump and the agent apply exactly as they do on the command line.

02goweb framework2026early

tug on GitHub

A web framework for Go apps whose frontend is Inertia.js: React, Vue or Svelte pages rendered with props straight from Go handlers, no API in between, and the whole app shipped as one binary.

Background jobs on a schedule, server-side rendering, migrations in plain SQL, uploads on disk or in S3, mail, and events broadcast to every open page. tug gen types the frontend against the Go — props, routes and forms — and tug new -auth starts an app with accounts, passkeys, API tokens and two-factor logins.

The name: a tugboat is small, and moves ships many times its size.

go install github.com/cuonggt/tug/cmd/tug@latest

posts.go

type PostsIndexProps struct {
    Posts []Post                   `json:"posts"`
    Stats inertia.DeferProp[Stats] `json:"stats"`
}

var PostsIndex = tug.Page[PostsIndexProps]("Posts/Index")

func index(c *tug.Ctx) error {
    return PostsIndex.Render(c, PostsIndexProps{
        Posts: store.List(),
        // fetched after the page shows
        Stats: inertia.Defer(store.Count),
    })
}

terminal

# a new app, in ./blog
$ tug new blog
$ cd blog

# http://localhost:8080, rebuilt
# and reloaded as it changes
$ tug dev
A page and the handler that renders it. The props go straight to a React page in resources/js/pages/Posts/Index.tsx.

03rubyrails scaffolding2024

kaze on GitHub

Authentication scaffolding for a new Rails application, in the spirit of Laravel Breeze: the routes, controllers and views for signing people in, generated into the app as code you own.

Login, registration, password reset and email verification, and a settings area where someone can change their name, their password and the appearance, or close the account. Three stacks built to one design — Hotwire with ERB, or React or Vue over Inertia — so the choice is about the frontend, not about which features you get.

gem install kaze
Two Kaze screens side by side: a login form with email and password in light mode, and the profile settings page in dark mode.
Signing in on the left, the settings area on the right. The Hotwire, React and Vue stacks are all built to this one design.

04swiftmacos app2026early

shellhand on GitHub

A native macOS SSH client: the host list, tabs on real ssh, and files over SFTP, in a window rather than a terminal.

A host takes its own value first, then the nearest group above it that sets one, so production need not look like staging. Every session is /usr/bin/ssh on a pty, so your config, your jump hosts and your agent behave as they do on the command line. Files open in a window of their own, this Mac on the left and the host on the right.

omassh’s idea, in a window. Swift all the way down, and it wants macOS 26.

brew install --cask cuonggt/tap/shellhand

05shellmacos setup2024

omakma on GitHub

An opinionated setup for macOS, heavily inspired by Omakub. One command turns a fresh Mac into a fully configured, modern web development system.

Ghostty, Alacritty and iTerm2; Neovim with LazyVim; tmux and Zellij; lazygit, fzf, ripgrep, bat, eza and zoxide; Node, Go, Python, Ruby, PHP and Rust; MySQL, PostgreSQL and Redis if you want them. Afterwards, omakma opens a menu for themes, fonts and the rest.

bash < <(curl -sL https://raw.githubusercontent.com/cuonggt/omakma/master/boot.sh)
Preview an omakma theme
Seven themes, switched together across Alacritty, Ghostty, Zellij, Neovim, VS Code and Sublime Text. The colours are omakma’s own; Default is Tokyo Night.

More projects

Rails, Laravel, Go, Swift

laravel-dibi

An elegant GUI database management tool for your Laravel applications. Browse the database on a local or dev server at /dibi, without installing another app.

composer require cuonggt/laravel-dibi

phpvue2018

Dibi showing the rows of a users table, with a raw SQL filter above the grid and the list of tables on the left.

rove

A terminal console for the Linux servers you already reach over SSH. It reads ~/.ssh/config and never asks for a private key: processes, disks, services and listeners, without remembering the command for each.

brew install --cask cuonggt/tap/rove

goserver console2026

envoy-cli

Run the tasks you run on your remote servers, deploys and the rest, from a YAML Envoyfile and a single binary.

gocli2023

reji-stripe

An expressive, fluent interface to Stripe’s subscription billing services for your Rails applications.

rubygem2020

binance-connector-php

A simple connector to the Binance public API: market data, trading and websockets, from PHP.

phplibrary2022

Earlier

2016 – 2019

About

I’m Cuong Giang, a software developer in Hà Nội. I’ve kept my work on GitHub since 2014 and have published open source since 2016: Ruby gems for Rails at first, then Laravel packages, then Go, and lately some Swift.

A lot of what I build carries a good idea somewhere new. Laravel Cashier’s billing and Laravel Breeze’s starter kits, for Rails. Laravel’s Envoy, as one Go binary. Omakub’s opinions, for the Mac. Inertia.js, for Go.

The rest lives between a laptop and a server: SSH clients, deploy tools, and a console for a fleet of Linux machines.

Based in
Hà Nội, Việt Nam
On GitHub
since 2014
Open source
since 2016
Writes
Go, Swift, PHP, Ruby, JavaScript, Shell
Setup
omakma
Elsewhere
GitHub · X · Gists

Keyboard

j k
Next and previous project
enter o
Open the selected project
y
Copy its install command
g G
Top and bottom of the page
t
Light or dark theme
?
This list
esc
Close, or clear the selection

Turn them off if they get in the way of a screen reader or voice control. The buttons in the header always work.