Iceberg: a color scheme that keeps its palette in one file
:antarctica: Bluish color scheme for Vim and Neovim
At a glance
- What is it?
- Eight years after the VimConf 2017 talk that explained the reasoning, Iceberg is still maintained, still precompiled from a template engine, and still the reason a lot of Vim users never touch a highlight group by hand.
- Who is it for?
- Iceberg is a small project that solved a problem most people do not know they have, which is that Vim highlight groups are not designed and never will be, so a usable theme has to ship finished opinions instead. What makes it durable is the compilation step: edit one palette file, rebuild, and every highlight group across Vim, Neovim, an airline status bar, a tmux pane and a dozen terminal emulators moves together.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Activity is slowing. The repository last received commits 6 months ago.
- What is it written in?
- Mainly Vim Script, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 28, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Five design goals, stated as a list
The README opens with a features list that reads more like a design brief than a changelog. The first two items are Simple and Fast, and both are specific: no configuration required and easy to use, and pre-compiled to reduce loading time. A Vim theme is loaded on almost every startup, so the second point is not a nicety, it is the difference between a theme you can tolerate and one you have removed from your config by the third month.
The remaining three are capability statements: dark and light background support, 256-colors terminal support, and terminal colors support. That last one matters more than it sounds. Vim runs inside other people's color systems, and if a scheme ignores the terminal's own palette you get text that does not match the window chrome around it. Iceberg treats 256 colors and the terminal's 16 ANSI slots as requirements rather than nice-to-haves.
The distribution is standard for a Vim color scheme: a `colors/` directory holding the compiled files Vim actually loads, a `src/` directory holding the source, and `autoload/` for the generated output and the palette definitions. There is a `LICENSE.txt`, a `CHANGES.txt`, an `.editorconfig` and a `.github/` directory. Notably there are no tags and no releases published for this project, so `CHANGES.txt` is the only version history most users will ever see.
Why a template engine at all
The README has a section for people who want to build their own scheme on top of this work, and it starts by telling you to install a separate project. That project is `cocopon/pgmnt.vim`, described as a template engine for Vim color scheme. So the editing workflow is not to hand-edit a `colors/` file, it is to edit source and regenerate.
Palettes live at `autoload/iceberg/palette/dark.vim` and the light equivalent. Highlight groups and links live in `src/iceberg.vim`. After editing either, the README gives this sequence, run from the source directory:
:e src/iceberg.vim
:cd %:h
:source %The compiled files land in the `autoload` directory. One instruction in the README matters more than the rest of the procedure: if you change a palette you must `:source` that palette file before the compile step, or your changes will not be reflected. That is the kind of detail most theme documentation omits, and omitting it is how a beginner spends an evening wondering why their edit did nothing.
The design consequence is worth stating plainly. A theme with hundreds of linked highlight groups has a color problem at its core: the same accent should mean the same thing in a function name, a string delimiter and a diagnostic, but a hand-written file invents near-identical values in thirty places. Generating those links from a small set of named palette entries is what makes the dark and light variants agree with each other.
A long compatibility list, maintained on purpose
The plugin support section names ALE, CtrlP, Denite, EasyMotion, git-gutter, git-messenger.vim, Signify, Sneak, Startify, Syntastic, vim-plug and vim-zenspace. The syntax section names typescript-vim, vim-elixir, vim-flow, vim-graphql, vim-javascript and vim-markdown. Both lists end with etc., which is honest about the fact that this is a moving target.
The list is more interesting as a maintenance record than as a feature list. Several of those plugins have been replaced or reimplemented since the scheme was written, and the fact that the names are still there, in a repository pushed to as recently as March 2026, suggests somebody is keeping the links current rather than letting the list fossilize.
The status line gets first-class treatment. There is a dedicated airline theme and colorscheme, a lightline colorscheme, and later, in the other environments section, an alternative dark theme for lightline and airline contributed by someone else, along with a bumblebee-status port. A color scheme that only handles a buffer is a half solution, because the status line, the tabline, the file tree and the terminal beneath the editor all need to agree for the result to look intentional.
The palette now runs well past the editor
The largest section of the README is titled For other environments, and it is a catalogue of ports. Editors and IDEs include Visual Studio Code, Atom, Xcode, AppCode, Emacs and CotEditor, several of them written by the author and several contributed by other people. Terminal emulators include Terminal.app, Hyper, st, kitty in both dark and light variants, alacritty, iTerm2 and Warp.
Two entries in that list are the practical ones for most users. One points at terminal.sexy, which generates color configuration for a long list of emulators including GNOME Terminal and iTerm2, and the other is an Xresources file described as the import and export mechanism for whichever emulator you use. Terminal color schemes are stored in wildly different formats and in different places, and a single Xresources file is often the shortest path to a matching shell.
Also listed are a tmux port, a Slack sidebar theme, and a note that .Xresources can be used both to import a palette into an emulator and to export one out of it. Taken together this is the argument for a coherent color scheme as a working environment rather than as a file in a plugin directory: the same blue that highlights a function in the editor is the blue of your shell prompt, your terminal's default foreground, and your window tabs.
The homepage at cocopon.github.io/iceberg.vim carries the official documentation and a separate page for the macOS Terminal.app setup, and the scheme is also published on vim.org as script 4820 for anyone who installs through Vim's own package tooling.
The talk that explains the reasoning
There is a Philosophy section, and it points outward to a talk. The creator presented at VimConf 2017, the international Vim conference, on the topic of creating a color scheme, and the slides from that session are linked from the README. A scheme with a written argument behind it is unusual, and the existence of the talk is probably the reason Iceberg holds up over time.
The choice to name the palette after ice and build a bluish scheme around it is a decision about mood, and mood is the part of a theme that is genuinely hard to argue about in review. Reading a diff of highlight group links tells you whether colors changed and nothing about whether they are now pleasant to stare at for a full day. Having the reasoning written down in advance, in slides, gives anyone extending the palette a shared starting point.
Steady maintenance, no releases, a small queue
The numbers describe a project in maintenance rather than in development. Iceberg has 2,387 stars and 135 forks, which is a high star count against a modest fork count and reflects what the project is: something people install and read, not something people modify. Fifteen open issues against 2,387 stars is a very light queue, and the last push to the repository was on 2026-03-15.
Written in Vim script, MIT licensed, and marked as not archived, this is a project that will still be there next year and will still look the same, which for a color scheme is the point. Themes that chase each new plugin release accumulate special cases and end up looking worse over time. A theme that compiles from a fixed palette into a fixed set of links ages quietly.
The gaps are worth naming too. There is no tagged release, so there is no version to pin, and the README does not document a minimum Vim version or a Neovim-specific path beyond the general statement that the scheme works in both. Support for a newly popular plugin has to be added by whoever notices it needs adding, and the maintainer appears to be one person with a day job. For a color scheme, that is a reasonable trade, and the sixteen-year-old structure of the idea has survived it.
Editorial conclusion
Iceberg is a small project that solved a problem most people do not know they have, which is that Vim highlight groups are not designed and never will be, so a usable theme has to ship finished opinions instead. What makes it durable is the compilation step: edit one palette file, rebuild, and every highlight group across Vim, Neovim, an airline status bar, a tmux pane and a dozen terminal emulators moves together. The project carries 2,387 stars and only 15 open issues, has been pushed as recently as 2026-03-15, and publishes no tagged releases at all, which tells you to read `CHANGES.txt` rather than expect a version number. If you want a color scheme with an argued-for point of view, this is the one most people end up on.
Frequently asked questions
What is the best Vim color scheme?
There is no objective answer, and the Vim community treats that question as a matter of taste rather than benchmarking. Iceberg is one of the most commonly recommended answers because it ships dark and light variants, supports 256-color terminals and the terminal's own ANSI colors, needs no configuration, and has matching ports for airline, lightline, tmux and a long list of terminal emulators.
How do I make my own colorscheme based on Iceberg?
Install cocopon/pgmnt.vim, a template engine for Vim color schemes, then edit the palette at `autoload/iceberg/palette/dark.vim` or the light variant, and edit highlight groups in `src/iceberg.vim`. Source the palette file you changed, then compile the source so the generated files land in the autoload directory.
How do I use Iceberg colors in my terminal emulator?
Use the Xresources file linked from the README as the import and export path for your emulator, or take the palette from terminal.sexy, which generates configuration files for 16 ANSI colors across many terminals including GNOME Terminal and iTerm2. Dedicated ports also exist for kitty in both dark and light, alacritty, iTerm2, Warp, st, Hyper, Terminal.app and tmux.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/cocopon-iceberg-vim)