logoalt Hacker News

Starship: A minimal, fast, and customizable prompt for any shell

421 pointsby benoitgyesterday at 11:11 AM188 commentsview on HN

Comments

hiAndrewQuinnyesterday at 12:36 PM

I like maximalist prompts, and indeed Starship is what Shell Bling Ubuntu [1] installs on a new dev machine. But they're not everyone's cup of tea.

If I wanted to recommend to someone the min-maxed, highest density thing they could add to their prompt, it would simply be the time your current prompt appeared + the amount of time the last command you ran took.

These two pieces of information together make it very easy for you (or your local sysadmin (or an LLM looking over your digital shoulder)) to piece together a log of exactly what happened when. This kind of psuedo-non-repudiation can be invaluable for debugging sessions when you least expect it.

This was a tip I distilled from Michael W. Lucas's Networking for System Administrators a few years ago, which remains my preferred recommendation for any developers looking to learn just enough about networking to not feel totally lost when talking to an actual network engineer.

Bonus nerd points if you measure time in seconds since the UNIX epoch. Very easy and fast to run time delta calculations if you do that:

    [0 1719242840] $ echo "foo"
    [0 1719242905] $ echo "fell asleep before hitting enter" && sleep 5
    [5 1719242910] $
[1]: https://github.com/hiAndrewQuinn/shell-bling-ubuntu
show 6 replies
m000yesterday at 4:10 PM

I would be very curious to see an age demographic chart of people using e.g. Starship.

Personally, over time, I have stopped caring too much about prompt customization. I concluded that, no matter how carefully you curate your prompt, 90% of the information shown will be irrelevant 90% of the time*. After a while, your brain will start perceiving this as visual clutter and filter it out, to the point you may even forget the information is there, right in front of your eyes.

And for the things that matter, you probably need more details than any prompt can show you. E.g. are there changes in your git branch? Ok there are, good to know, but which files have changed? Just knowing that there are changes is not really actionable information. You need to run additional commands to get actionable details.

* the numbers are completely arbitrary, but you get the picture

show 5 replies
yankcrimeyesterday at 2:46 PM

Ignore the haters - I too am a fan of minimalism in my terminal since I don't appreciate unnecessary clutter or decoration, but context is king and Starship can be configured as such.

By default my prompt is a shows me the current directory, the time, and a single character '%'. If I set something in my environment for which I need to be contextually aware - i.e if I have KUBECONFIG or OS_CLOUD - then the prompt is updated with the detail. Similar for languages - it'll automatically show me the version of Go or Python or whatever based on a few factors, all of which I can control.

The reason I love Starship is that it's made all this very, very easy to configure - instead of having to wade through arcane Zsh configuration or additional plugins, Starship makes it easy. It also adds negligible overhead to initialisation, especially when done so via evalcache [0]

[0] https://github.com/mroth/evalcache

bullmanyesterday at 3:03 PM

Fan of starship here. wanted to drop a few comments based on what I seen so far

Love the performance. Written in Rust and compiled to binary, it's _much_ faster than either python-based powerline, the bash-shell-based ohmybash and zshell-based ohmyzsh and spaceship.

You can use it for zsh, bash, sh, fish. but you can also use it for both MS Windows CMD and Powershell. I don't believe any other prompt tools can do all at the same time. And a single config file can control all of them on your system.

The default config is just that - a default. Too much information? you can change it. dont like icons? you can remove them.

At almost 100 modules to choose from, it's customization options are nearly limitless

JimDabellyesterday at 12:15 PM

I don’t understand why they market this as “minimal”. It’s got loads of features, and every time I see somebody use it they have a huge prompt with loads of bells and whistles.

My shell prompt is:

    : ▶
You don’t need an entire shell prompt customisation framework to be minimal.
show 4 replies
Aeolunyesterday at 12:52 PM

I really like this one for just being a single install and then no more fiddling. I don’t have time for any of that shit, but I do want to know whether my current shell is on node 20 or 22, rust stable or nightly. Getting all of that without extra effort is great.

Tmpodyesterday at 2:54 PM

I tried starship a few years ago and found it too "extra" and sluggish. I'm sure it may have improved in this time, but I ended up sticking with the excellent Hydro[0], only for fish though.

It's very minimal while having useful features: - exit codes, even for pipelines - git branch, status (displayed as a dot if your tree is dirty) and ahead/behind counts - command execution time (if above some configurable threshold) - truncated/minified $CWD, always maintaining the git root's name (I sometimes like it, sometimes don't; fortunately, it's very easy to change) - current vi-like mode (I don't use that)

It's very fast and async (prompt repaints don't block your input or running commands), and totals 132 lines of fish (according to cloc[1]). It's also very customisable through variables, which can be declared as universal to instantly change on all sessions you have open.

If you're on fish and like this feature set, definitely give it a shot, or at least look at the code as a base for a bespoke prompt :P

[0]: https://github.com/jorgebucaran/hydro [1]: https://github.com/AlDanial/cloc

b0a04glyesterday at 12:32 PM

every time your shell takes 100ms to render git status that you didn’t even need, you're paying invisible tax on flow. terminals should be reactive memory tools, not passive decoration. we optimize for code runtime but not for our own typing latency

show 7 replies
xavdidtoday at 6:35 AM

I've been a happy starship user for a few years at this point (after a long time with oh-my-zsh). For me, it's killer feature is the `starship.toml` file. Gone are the days of arcane bash escape sequences to style the prompt. It's a well-documented shape and easy to reason about. So no matter if you got maximalist or minimalist for your, it's easy to tweak. That rocks.

microflashyesterday at 7:36 PM

I'm surprised by people conflating customizability with maximalism. Yes, the default configuration is a bit too much but you can turn the knobs to reign it in. I work on multiple AWS environments, different application runtimes, and so on. Having some context in the prompt has been very helpful for me. I maybe biased though since I've used Starship for years paired with Nushell.

PeterWhittakeryesterday at 7:25 PM

What am I missing? I went to the site, but I can find nothing to suggest why I might want to use this. Are there examples that I've missed, likely owing to having been heads down chasing a pernicious heisenbug all day?

Given that I do like my shiny prompt, which shows me:

  The result of the last command (in green, red, or purple)
  user@host:currentDirectory
  current branch, if in a repo
with the last line showing summary git status, if in a repo, and background jobs, I suspect I might be their market, but I cannot see a why anywhere.

(Green: Last command good, e.g., exit 0) (Red: Last command non-zero exit, with a special indicator if it was interrupted) (Purple: Last command suspended, and few other things)

show 1 reply
kuonyesterday at 1:19 PM

It looks nice.

I usually like simple prompt, but there is one feature I really like, it's the timestamp. It helps me remember when I did something and how long it tooks.

iloveitalyyesterday at 4:23 PM

I've been using it for awhile and love it:

https://github.com/iloveitaly/dotfiles/blob/master/.config/s...

faizmokhyesterday at 12:23 PM

Tried it. Not a fan. I find it unnecessarily fancy.

show 1 reply
nh2yesterday at 10:11 PM

With or without starship, one problem I have with zsh prompts is that when I press Enter, there is still a visible delay where for a fraction of a second, the cursor moves to the beginning of the next line.

This makes a nasty "flashing" effect.

If I keep Enter pressed, the cursor is permanently visible at offset 0 in the lowest line.

If the prompt is ultra-fast (e.g. plain root shell prompt on zsh), it happens less (e.g. only 50% of cases), but as soon as the prompt does anything, it's very visible.

I observe this with many terminals (gnome-terminal, wezterm, kitty, alacritty, xterm).

The only terminal I tried that doesn't have this problem is urxvt, where it looks perfect.

Video repro: https://nh2.me/flashing-cursors-on-newline.mp4

Why, and is there a way around it for those other terminals?

dannyfritz07today at 2:02 AM

If you want to use Starship, but disable nerdfont and the language features leaving things like git, duration, error, etc., use this config: https://github.com/dannyfritz/dotfiles/blob/e53d410364bf6e2f...

usmanityyesterday at 9:05 PM

I started using Pure prompt since I'm only ever using zsh and it seemed to cut down a lot on the setup required, I do have to spend like 15-20 mins on a new computer to get everything working as expected but once it gets going, it feels like the best mix of customization and speed.

jamesponddotcoyesterday at 2:04 PM

I live in the terminal, so I wrote my own prompt ages ago when I started learning Go[1][2], and before that I had a simple prompt in bash.

I like to keep things very simple and fast, so the directory and the git branch is all I need. I wonder if people really use all that information or if they set it up thinking they need it, but then never do.

[1]: https://git.sr.ht/~jamesponddotco/gosh

[2]: I should probably update that now that I know a “bit” more Go.

show 1 reply
eevahryesterday at 12:32 PM

My personal favourite: PS1="%~ $ "

show 1 reply
exiguusyesterday at 9:15 PM

I have several use-cases / problems I solve with my prompt:

- See current git branch (to not mistakenly work or commit into the wrong branch)

- See git has changes (to stash them before switching branches)

- See the current language/engine version (like go v1.24.2, because i use tools like gvm, sdk, nvm or rustup to switch version in projects and i want feedback that i have the correct/expected language version enabled)

- See that i am on my local or a remote machine and k8s context

That's mostly it. Of course, I can do this by writing my own prompt, but I found out that Starship does this for me, basically out of the box, on any machine and terminal, in a very nice-looking way. Also, I am not a fan of fancy-looking prompts, so visually, Starship fits best for me.

joeyagrecotoday at 2:24 AM

I've used Starship for a few years with a pretty minimal config.

https://github.com/joeyagreco/dotfiles/blob/main/.config/sta...

thibranyesterday at 9:31 PM

Too bad that we still use text based shells in the year 2025. We should have come up with a graphical shell that is as powerful and flexible two decades ago.

show 1 reply
dirkgyesterday at 10:09 PM

I've always liked powerlevel10k, or its equivalent tide for fish shell, which I much prefer over bash/zsh. Its fast, async, has everything you need, and is much easier to configure.

I've always wondered why someone doesn't just bundle a nice looking shell prompt with common nerd fonts and make it the default in a single package you can install.

baruchelyesterday at 5:06 PM

Can't find the URL again for a funny (and probably universal) custom prompt: you had to do some

    curl <url> | sh
then you could see on your terminal thousands of various tests related to your installation, then several megabytes being downloaded with progress bars, etc.

At the very end of the whole process, the whole stuff would vanish into writing PS1="$ " at the end of your ~/.bashrc

Of course, the very same prompt was used whatever your install could be. I think it was some joke making fun of all these crazy and heavy custom prompts all around.

oweileryesterday at 2:14 PM

I use Starship without any customizations and its good enough for my every day use.

bbkaneyesterday at 2:14 PM

I ended up writing my own zsh prompt a few years ago and it's worked like a charm for my simple needs: https://github.com/bbkane/dotfiles/blob/master/zsh/dot-zshrc...

ends up looking like this: https://github.com/bbkane/dotfiles/blob/master/zsh/README_im...

hu3yesterday at 12:57 PM

I'm a long time user of https://github.com/ohmybash/oh-my-bash

It would be nice to have a comparison and reasons to change from popular tools.

show 1 reply
perplexyesterday at 12:46 PM

Happy user of spaceship prompt for zsh: https://spaceship-prompt.sh, and, among other things, it runs repo status asynchronously.

grep_nameyesterday at 3:56 PM

Interesting. I've been using the pie theme fish for years, and have various problems with it, but have not found something in OMF which is better for me. I also don't like the OMF dependency in my configs.

Maybe it's finally time for me to sit down and write my own shell prompt once and for all. I wonder if I can make it context-aware of fish's editing vs normal mode when vi mode is enabled

Henchman21yesterday at 2:49 PM

Genuine question for all the people putting timestamps in your prompts: do you never look at your command history and see that they’re all timestamped?

show 3 replies
bodge5000yesterday at 2:41 PM

I know Starship isn't zsh specific but I guess its tangentially related, does anyone know what the default zsh config is on MacOS? I got quite used to it, and now I'm on linux I'd like to replicate it. The closest I've got is using the eastwood theme on oh-my-zsh but it's not quite the same (I dont even think MacOS using oh-my-zsh out the box, but its got all the nice git stuff)

show 1 reply
maztaimyesterday at 12:27 PM

I found https://ohmyposh.dev/ works for me. There’s something about transient prompts that (at the time?) was a problem for starship. There are several other alternatives I’ve tried with meh results.

show 1 reply
voidUpdateyesterday at 12:14 PM

Does the speed of your shell matter? Surely the speed of the programs that you're running through your shell matter more. I've never been let down by how fast bash can tell a program to start running

EDIT: oh, i misunderstood, its just the prompt at the start of your shell... I dont think ive ever been annoyed at how fast that renders either

show 5 replies
taudeyesterday at 3:59 PM

I used to use Starship awhile ago, switched to powerlevel10k. Trying to figure out if there's any thing there for me to want to try starship again? I remember powerlevel10K was really easy to get going.....

smurfsmurfyesterday at 2:29 PM

Looks good, though unfortunately I really can't stand icons in my terminal. It looks pretty, but it smudges meaning and, if you suffer from chronic migraine like me, it makes it incredibly hard to scan.

show 1 reply
sockboyyesterday at 2:08 PM

I like how minimal prompts keep focus, but adding just the right context like AWS profile or last command status really saves time and mistakes. Starship hits a good balance here.

show 1 reply
Quitschquatyesterday at 12:25 PM

Too much bloat. If I want minimal, I’ll use a PS1 with 4 characters in it

lend000yesterday at 3:47 PM

I'm trying to understand what they are demonstrating with the "false; true" commands in the little video loop. Can someone chime in?

show 1 reply
spapas82yesterday at 5:01 PM

Well done for supporting windows cmd (through clink) ; most shell tools don't take care about us windows cmd users !

pixl97yesterday at 8:06 PM

Warning: Improper use of Starship may cause it to explode in your test harness.

baboyesterday at 2:24 PM

Produced a 151 characters long prompt in my current development directory. This is really a starship, but I'm a pedestrian.

skrebbelyesterday at 5:20 PM

I'm impressed at how seriously they take "for any shell". It even works with cmd.exe!

woileyesterday at 6:23 PM

starship has been excellent, and gives me the right context all the time. Like I'm running inside a nix shell, the python venv is enabled or the git branch.

Configuring it with home-manager was as simple as:

programs.starship.enable = true;

albybisyyesterday at 12:31 PM

i prefer powerlevel10K

asklyesterday at 3:16 PM

Looks pretty nice, but the name seems unfortunate. (unless it crashes on every launch)

spiantinoyesterday at 4:12 PM

Starship + Ghostty has been an awesome (and fast) experience.

BSDobelixyesterday at 1:38 PM

Atuin and Starship the same Day on place 1? Next zellij :)

show 2 replies
t1234syesterday at 4:24 PM

Is piping curl output to sh ever a good idea?

shmerltoday at 1:47 AM

Making a specific font a requirement is a bit too restrictive.

🔗 View 5 more comments