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).

Hello, I’m Tony Narlock

This is my professional website. I’ve been a software developer for over 17 years, currently working from Texas.

I build web-based applications at tech startups. On the frontend, I work with React, TypeScript, and Relay (GraphQL); on the backend, Python and Amazon Web Services.

Outside of work, I maintain a collection of developer tools. tmuxp builds tmux sessions from JSON or YAML configuration. I’ve also written “The Tao of tmux”, a practical guide to the terminal multiplexer. cihai provides programmatic access to Unicode’s UNIHAN dataset for Chinese, Japanese, and Korean characters.

I contribute to open-source projects and you can find my work on GitHub, GitLab, and OpenHub.

My CV has the details — professional work, personal projects, and contributions across various languages and technologies.

What's going on in my life as a programmer

What am I busy with outside of work?

2026

March 2026

vcspull

v1.58.0 adds --sync and --prune flags to vcspull import for full bidirectional config reconciliation, a --prune-untracked flag, and a granular options.pin metadata field to protect specific entries from mutation:

  • --sync: Updates changed URLs and prunes stale entries, fully reconciling config with the remote
  • --prune: Standalone cleanup — removes stale entries without updating URLs
  • --prune-untracked: Extends --sync/--prune to also remove entries lacking import provenance
  • Provenance tracking: metadata.imported_from tags scope pruning — manually added repos are never removed
  • options.pin: Per-repo, per-operation mutation guard (pin: true, pin: {import: true}, allow_overwrite: false)
  • Bug fix: vcspull add, discover, and fmt no longer silently corrupt .json config files

Available on all six import providers. Pruning is config-only — cloned directories on disk are not deleted. Uses a consistent CRDT action model (classifier → enum → apply) across all five config-mutation operations.

February 2026

vcspull

vcspull shipped two feature releases:

v1.55.0 adds vcspull import for bulk-importing repositories from remote hosting services into your vcspull configuration:

  • 6 services: GitHub (gh), GitLab (gl), Codeberg (cb), Gitea, Forgejo, and AWS CodeCommit (cc)
  • 3 modes: user (default), organization, and search
  • Filtering: --language, --topics, --min-stars, --archived, --forks
  • Self-hosted support: --url for GitHub Enterprise, GitLab, Gitea, and Forgejo instances
  • GitLab subgroups: Nested group hierarchies map to workspace roots automatically; --flatten-groups to collapse them
  • SSH clone URLs by default; --https to switch

No new dependencies — HTTP is handled with stdlib urllib.

v1.56.0 adds vcspull worktree for declarative git worktree management. Configure worktrees per-repo in YAML targeting tags, branches, or commits, then list, sync, and prune them. Dirty worktrees are reported as BLOCKED (never force-updated), and --include-worktrees on vcspull sync handles repositories and their worktrees in one pass.

January 2026

tmuxp

tmuxp v1.63.0 modernizes the CLI with semantic colors and new commands:

  • Semantic colors: New --color flag (auto/always/never) with NO_COLOR/FORCE_COLOR support per no-color.org
  • tmuxp search: Find workspace files with field-scoped search (name:, session:, path:, window:, pane:), matching options (-i, -S, -F, -w), and --json/--ndjson output
  • Enhanced tmuxp ls: --tree for grouped display, --full for complete config, --json/--ndjson for automation, local workspace discovery from cwd
  • tmuxp debug-info --json: Structured output for issue reporting
  • Beautiful --help: Usage examples with syntax highlighting
  • PrivatePath: Masks home directory as ~ in output for privacy

Documentation now features enhanced CLI command pages via a new pretty_argparse Sphinx extension with syntax-highlighted usage blocks.

See release notes.

social-embed

social-embed received a major site overhaul:

  • Interactive playgrounds on homepage: Try the web component and library directly from the front page with live code editing
  • Migrated from Starlight to pure Astro: Custom layouts, mobile navigation, and full control over styling
  • New React search modal: Keyboard navigation, Algolia-style breadcrumbs, and title/excerpt highlighting
  • Custom Aside component: Callout/admonition component with multiple styling variants

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