Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

This tool has been deprecated. Please upgrade to neopo.

Build Status Join the chat at

po - The Future of po-util: Refactored, Modular, and Cross-Compatible


When I first created po-util, it was a single script,, that could be "installed" on Mac and Linux. It soon became very cumbersome, and I chose to split po-util into two repositories, po-util and homebrew-po. Maintaining the two repositories was tedious, as I had to do double the work every time I wanted to release a feature or make a fix.

My solution was to reunite the Mac and Linux versions back into a single repository, breaking the script into several modular files.

┌── bin/po
├── share/po-common
├── share/po-linux
└── share/po-mac
  • po is the main file, and the script that gets executed when a user runs po at the command line.
  • po-common is sourced by po, and contains all OS independent functions.
  • po-linux and po-mac contain the OS dependent settings and functions.

Regardless of OS:

  • po is installed at /usr/local/bin/po
  • po-common is installed at /usr/local/share/po-common

On Linux:

  • po-linux is installed at /usr/local/share/po-linux

On Mac:

  • po-mac is installed at /usr/local/share/po-mac


Universal Installer:

$ bash <(curl -sL


None at the moment. Just make sure to use the Universal Installer.


Is this really the future of po-util?

Yes. All future development will be on po. The legacy po-util repositories will remain supported, but future work will be focused on po.