I am Tony Narlock
This is my professional website. I’ve been a software developer for over 17 years. If you’re not in the field, what I do might not make much sense to you.
I work at tech startups, building web-based applications. On the frontend, I use React, TypeScript, and Relay (GraphQL), and on the backend, Python and Amazon Web Services.
In my spare time, I plan, develop, and maintain a suite of developer tools. For instance, tmuxp, which constructs tmux sessions from a JSON or YAML file. A few years ago, I also wrote a book about tmux, titled “The Tao of tmux”. Another tool I’ve created is cihai, based on Unicode’s UNIHAN dataset, which supports Chinese, Japanese, and Korean languages.
I actively contribute to open-source software projects. You can find me on GitHub, GitLab, and OpenHub.
My CV documents everything I’ve ever done - professional work, my projects, and open-source contributions (I’m a polyglot; there’s even some C++ in there).
What's going on in my life as a programmer
What am I busy with outside of work?
2025
December 2025
libtmux
libtmux shipped two releases in December:
v0.51.0 enforces deprecations: Legacy API methods (deprecated since v0.16-v0.33) now raise DeprecatedError instead of DeprecationWarning. See the migration reference table for old-to-new method mappings.
v0.52.0 enhances capture_pane() with 5 new parameters exposing tmux capture-pane flags:
escape_sequences(-e): Include ANSI escape sequences for colored outputescape_non_printable(-C): Escape non-printable chars as octal\xxxjoin_wrapped(-J): Join wrapped lines back togetherpreserve_trailing(-N): Preserve trailing spaces at line endstrim_trailing(-T): Trim trailing empty positions (tmux 3.4+)
Trusted Publisher attestations
Three packages now publish with PyPI Trusted Publisher and build attestations:
This replaces long-lived PyPI API tokens with OpenID Connect (OIDC) authentication from GitHub Actions, and enables cryptographic verification that packages were built from their claimed source repository.
November 2025
libtmux
libtmux v0.50.0 ships the long-awaited unified options and hooks API:
- Unified Options API: New
show_option(),show_options(),set_option(), andunset_option()methods on Server, Session, Window, and Pane - Hook Management: Full programmatic control over tmux hooks with indexed arrays and bulk operations via
HooksMixin SparseArray: Internal data structure for tmux's sparse indexed arrays (e.g.,command-alias[0],command-alias[99])- tmux 3.2+ baseline: Dropped support for older tmux versions, enabling cleaner code
See the Options and Hooks guide and release notes.
libvcs
libvcs v0.38.0 introduces typed APIs for traversing git repository entities:
- Managers: New
Git.branches,Git.remotes,Git.tags,Git.stashes,Git.worktrees,Git.notes,Git.submodules, andGit.reflogfor traversing repository entities - Commands: Low-level typed commands targeting specific entities (branches, tags, stash entries, etc.)
QueryList: Allls()methods return chainable, filterable collections- Bug fixes: 20+ fixes to git command parameters
See the Traversing Git Repos guide and release notes.
vcspull
vcspull shipped three releases focused on smoothing the new CLI flows:
- v1.42.0 raises the floor to Python 3.10 and adopts libvcs 0.37 to stay current with upstream sync tooling.
- v1.43.0
adds duplicate-root detection/merging to
vcspull fmt,vcspull add, andvcspull discoverso workspace sections stop clobbering each other. - v1.44.0
makes
vcspull addpath-first (auto-detecting name, remote, and workspace), shortens config paths in logs to~/.vcspull.yaml, and stabilises CLI snapshots for future refactors.
The duplicate detection flow now keeps repository configs consistent end to end:
vcspull fmt merges repeated
workspace blocks, vcspull add
infers metadata while honouring --no-merge, and
vcspull discover surfaces
duplicates before they reach vcspull sync,
vcspull list, or
vcspull status.
October 2025
vcspull
vcspull: Major CLI modernization (#472) for familiarity, aligning with DevOps tool conventions:
- Support for adding repositories
vcspull add(single repo) andvcspull discover(filesystem scan) - Normalized
-f/--filefor repo files across all commands - Added introspection commands:
vcspull list(view repos) andvcspull status(health checks) - Added
--dry-runsupport with Terraform-style plans for preview-before-apply workflows - Added structured output (
--json/--ndjson) for CI/CD automation - Added semantic colors with
NO_COLORsupport - Short flags:
-wfor workspace,-nfor dry-run,-ffor file
Publications
-
The Tao of tmux
Book on tmux terminal multiplexer
Learn tmux, including:
- Session management
- Window and pane navigation
- Scripting and automation
Language Projects
Unix-like Utilities
Web Projects
Featured content
Coding around the web
- My ports for the FreeBSD operating system on portscout
- My issues for FreeBSD in Bugzilla
- Software porting from Linux to BSD on my FreeBSD Wiki Page
- Unofficial tally / roster of open source contributions on OpenHub
- GitHub @tony for recent / current coding
Porting (Linux-to-BSD)
- Elementary Algorithms – Book of Elementary Algorithms and Data structures #16
- pymux – tmux(1) clone in python #34
- aseprite – Cross-platform sprite / pixel art editor #888
- tmux-mem-cpu-load memory, CPU and load averages for tmux status lines #30
- uMario_Jakowski – Super Mario NES clone in SDL2 and C++. Add CMake and get building on FreeBSD and OS X #1
- spdlog - C++11 logger #254
- python-cmake-buildsystem - CMake buildsystem for CPython #133
Scrapyard
Experimental code / patches that never made it upstream:
- kakoune branches: cmake build support, mini, new-cli (#693), observers, rm-server (serverless kakoune), pybind11 and Boost.Python integration
- vis branches: cmake support, C++ support, python integration
- sphinx branches: flexible-builder invocation
- tmux branches: cmake build support
- saltstack + fabric demo: gist
Project templates
Permissively licensed starter templates you can use to bootstrap your projects.
These are mostly outdated
Frontend
- react-typescript-vanilla-starter: Webpack v4
- vue-typescript-vanilla-starter: Vue 2.x, Webpack v4
Cookiecutter
- cookiecutter-pypackage - Bootstrap python packages
- cookiecutter-flask-pythonic - Flask project
Presentations
- Guest Speaker @ Fullstack Academy (YC S12) at 1871 (Feb 2017)
- Guangzhou LUG software freedom day @ Sun Yat-sen University (May 2013)
Industry and Press
- Opensource.com mentions The Tao of tmux (Feb 2017)
- Japanese tech blog mentions The Tao of tmux (Jan 2017)
- Bugsnag Engineering using tmuxp (Nov 2016)
- Pragmatic Coders dev shop on configuring tmux sessions with tmuxp (Dec 2015)
- tmuxp featured on OneThingWell Nov 2013 and June 2014
Code Exploration
- reST, docutils, sphinx, readthedocs (Updated Feb 09, 2015)
Other
- Leather - PSA on why leather is cool
Donate
Like my open source projects and learning resources? Your support is appreciated!
Emboldening virtue, the Junzi
- To be a righteous person (君子 jūn zǐ), as opposed to (小人 xiăorén)
What makes a good gentleman-scholar in Confucius' eyes?
- Be coherent: "How did we get here?", "How do these things connect?"
- Tolerate ambiguity
- Treat matters in proportion to the issue
- Secure attachment