# Oh My Posh: A Cross-Shell Prompt Renderer in Go

> Oh My Posh is a Go prompt theme engine that renders the same prompt in PowerShell, bash, zsh, fish and nushell. Its value is in the segment model and the shared config, not in the default look.

**JanDeDobbeleer/oh-my-posh** — The most customisable and low-latency cross platform/shell prompt renderer

- Repository: https://github.com/JanDeDobbeleer/oh-my-posh
- Website: https://ohmyposh.dev
- Stars: 23,522 · Forks: 2,791
- Language: Go
- License: MIT
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/jandedobbeleer-oh-my-posh

## What Oh My Posh solves, and for whom

Every shell has its own way of building a prompt. PowerShell has a function you overwrite, bash has PS1, zsh has its own prompt expansion rules, fish has a function, nushell has a config block. If you move between two or more of these, you maintain the same prompt logic several times and it drifts. Oh My Posh replaces that per-shell work with a single binary and a single theme file. The README describes it as a "cross platform, highly customizable and extensible prompt theme engine", and the repository topics list bash, cmd, fish, nushell, powershell and zsh alongside prompt and shell-prompt. The intended user is someone who lives in a terminal across operating systems or across shells, and who wants git status, execution time, language versions and path information rendered consistently. It is not aimed at someone who wants a good-looking prompt in one shell with no configuration. That person gets a better return from the plugin system already shipped with their shell.

## The mechanism: one binary, per-shell init, JSON themes

The architecture is deliberately thin. Oh My Posh is a Go program that reads a configuration file, gathers context (current directory, git state, exit code of the last command, environment), and writes a formatted string to standard output. Each supported shell gets a small init snippet that calls the binary and assigns the result to that shell's prompt mechanism. The rendering logic lives in Go, not in shell script, so the same theme produces the same segments everywhere. The README lists the capabilities this enables: secondary prompt, right prompt and transient prompt. Transient prompt is the one worth understanding before you adopt: it lets the prompt collapse to something minimal once you have submitted a command, which keeps scrollback readable. The repository layout shows themes/ at the top level, which is where the shipped themes live, and a website/ directory that backs ohmyposh.dev. Configuration is a document with blocks for the prompt, the segments inside it, and the styling of each segment. That structure is what the README means by "easily configurable" and "The most configurable prompt utility". The trade-off is real: the more expressive the segment model, the more of your setup lives in a file you have to maintain, and the more a theme you copy from someone else is a starting point rather than a finished product.

## Installing Oh My Posh and getting a first prompt

The README points to ohmyposh.dev for documentation rather than restating install steps, and the repository ships packages/ and build/ directories that back the platform packages. The README does not list package manager commands, package names or versions, so the documentation site is the place to get the exact install command for your platform. What the README does give is the shape of the setup: you install the binary, then you initialise your shell so that it calls Oh My Posh to render the prompt. The README describes the project as shell and platform agnostic, and the repository topics name bash, cmd, fish, nushell, powershell and zsh as the shells it targets, so the init step differs per shell even though the binary is the same. Because the README does not reproduce the init lines, this article does not either. Copy them from the documentation site for your shell rather than from a blog post, since an outdated init line is the usual reason a prompt fails to change after installation. The themes/ directory at the top of the repository is where the shipped themes are defined, and the documentation site is where the gallery and the configuration reference live. Once the init line is in place and the shell has been restarted, the prompt should be rendered by Oh My Posh instead of by the shell itself.

## Where Oh My Posh gets in the way

The dependency on a patched font is the first wall most users hit. Oh My Posh themes use Nerd Font glyphs for git branches, language icons and separators, and the repository topics include nerd-fonts. If your terminal is set to a stock font, those glyphs render as boxes or question marks, and the prompt looks broken even though the configuration is correct. That is a font problem, not a config problem, and no amount of theme editing fixes it. The second cost is configuration surface. A JSON theme with a dozen segments, conditional templates and per-segment colour rules is a small program. When a segment shows the wrong value, you are debugging template syntax rather than reading shell code you wrote, and the error messages come from the renderer, not from your shell. The third limitation is that a prompt is not a shell framework. Oh My Posh renders text. It does not provide aliases, completion, history search or plugin management, so anyone migrating from a shell framework expecting those to come along will be disappointed. Finally, if you use exactly one shell and are happy with it, adding a Go binary and a JSON file to the startup path is pure overhead. The shell's own prompt system already runs in-process; Oh My Posh runs an external program on every prompt, and the README's claim of being fast is a design goal, not a promise that it beats an in-shell prompt on your hardware.

## Oh My Posh compared with Starship and oh-my-zsh

The README credits Starship for "doing great things", and the two projects are the closest comparison. Starship is also a cross-shell prompt, configured in its own format, and it is the tool most people weigh against Oh My Posh. The difference in approach is in the configuration model and the segment vocabulary: Oh My Posh uses a JSON theme document with an explicit prompt/segment/block structure and a large set of built-in segments, while Starship uses a flatter configuration file with module sections. Both render the same categories of information. If you have already invested in a Starship config, moving to Oh My Posh means rewriting it, not converting it. The second comparison, oh-my-zsh, is a different kind of tool entirely. It is a zsh framework that bundles themes, plugins and helpers, and it only works in zsh. Oh My Posh is a renderer that works in several shells but supplies none of the framework features. The README thanks Robby Russell for creating oh-my-zsh, which marks the lineage without implying overlap. The practical rule: pick oh-my-zsh if you want one shell with batteries included, and pick Oh My Posh if the prompt is the part you care about and you want it to follow you across shells.

## Maintenance, releases and the MIT licence

The repository is not archived, and the most recent push recorded for it is 2026-09-18. The release cadence is visible in the tags: v31.3.0 on 2026-09-13, v31.2.1 on 2026-09-08, v31.2.0 on 2026-09-07. Frequent minor releases across a major version number above thirty tell you two things. First, the project is moving. Second, upgrading is a real activity rather than a once-a-year event, and because the configuration is a JSON document with a defined schema, a theme written against an older release may need attention after a major bump. The practical upgrade cost is low if you keep your theme in version control and read the release notes before bumping, and higher if you copied a theme from a gallery and never looked at it again. The licence is MIT, which is permissive and short. In broad terms that permits use, modification and redistribution provided the copyright notice and licence text are kept, and it comes with no warranty. If you are redistributing a theme or bundling the binary into a product, read COPYING in the repository rather than relying on a summary, and take legal advice if the stakes are commercial. Nothing in the licence obliges you to publish your own theme.

## Conclusion

Adopt Oh My Posh if you work across several shells and want one theme file to follow you, and if you are willing to edit JSON by hand. Skip it if you only ever use one shell and want the prompt to come from that shell's own plugin ecosystem, or if you will not install a Nerd Font, since the default themes assume one. Before committing, verify three things on your machine: that the init line for your shell is present in its startup file, that the prompt renders as expected after a restart, and that your terminal font actually renders the glyphs your chosen theme uses.

## FAQ

### What does Oh My Posh mean?

The name is a play on oh-my-zsh, the zsh framework the README credits Robby Russell for creating. The project itself started as the offspring of oh-my-posh2, a PowerShell-only prompt, before being rewritten as a cross-platform theme engine.

### What is Oh My Posh in PowerShell?

It is a prompt theme engine that PowerShell calls to render the prompt. You add an init line to your profile, and the Go binary returns the prompt string that PowerShell displays.

### What is the difference between Oh My Posh and Oh My Zsh?

Oh My Zsh is a zsh framework that bundles themes, plugins and helpers and works only in zsh. Oh My Posh is a prompt renderer that works across bash, cmd, fish, nushell, PowerShell and zsh, but it supplies no aliases, completion or plugin management.

### What is the default theme for Oh My Posh?

The README does not name a default theme. Themes are selected by passing a config to the init call, and the shipped themes live in the themes/ directory of the repository.

### How do I install Oh My Posh on Windows Terminal?

The README does not give install commands and points to ohmyposh.dev for documentation, so get the command for your platform there. Windows Terminal itself only needs to be pointed at a Nerd Font, or the theme glyphs will not render.

### How do I update Oh My Posh?

The README does not document an update command. Releases are tagged on GitHub, with v31.3.0 published on 2026-09-13, so the upgrade path depends on the package channel you installed from.

## Sources

- [JanDeDobbeleer/oh-my-posh on GitHub](https://github.com/JanDeDobbeleer/oh-my-posh)
- [License: MIT](https://github.com/JanDeDobbeleer/oh-my-posh/blob/main/LICENSE)
- [Project website](https://ohmyposh.dev)
- [README](https://github.com/JanDeDobbeleer/oh-my-posh/blob/main/README.md)
- [Releases](https://github.com/JanDeDobbeleer/oh-my-posh/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/jandedobbeleer-oh-my-posh
