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 output
  • escape_non_printable (-C): Escape non-printable chars as octal \xxx
  • join_wrapped (-J): Join wrapped lines back together
  • preserve_trailing (-N): Preserve trailing spaces at line ends
  • trim_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(), and unset_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:

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, and vcspull discover so workspace sections stop clobbering each other.
  • v1.44.0 makes vcspull add path-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) and vcspull discover (filesystem scan)
  • Normalized -f/--file for repo files across all commands
  • Added introspection commands: vcspull list (view repos) and vcspull status (health checks)
  • Added --dry-run support with Terraform-style plans for preview-before-apply workflows
  • Added structured output (--json/--ndjson) for CI/CD automation
  • Added semantic colors with NO_COLOR support
  • Short flags: -w for workspace, -n for dry-run, -f for file

See release notes for v1.39.0, v1.39.1, and v1.40.0.

See more

Publications

Language Projects

Unix-like Utilities

Web Projects

Featured content

Coding around the web

Porting (Linux-to-BSD)

#893

#136

#147

  • pyston - An open-source Python implementation using JIT techniques #1072, #1073,

#1085

  • libpypa - Python parser implemented in pure C++ #50

Scrapyard

Experimental code / patches that never made it upstream:

Project templates

Permissively licensed starter templates you can use to bootstrap your projects.

These are mostly outdated

Frontend
Cookiecutter

Presentations

Industry and Press

Code Exploration

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