Anatomy of a Light Theme: Tallinn

On the shortest day of the year the sun over Tallinn climbs about seven degrees above the horizon and then gives up. It rises after nine, sets before half past three, and for the six hours in between it never gets higher than a fist held out at arm's length. The light that reaches the Old Town comes in sideways, low across the roofs, and most of what lights the streets is not the sun at all but the sky, reflected off snow and pale stone. Everything takes a little of its blue.

That is the light Codigrate's Tallinn theme is built in. The city under it is a Hanseatic town that has kept its walls, its towers and its red tile roofs well enough to sit on the UNESCO World Heritage list since 1997, most of it raised from the grey limestone the city stands on. What follows takes the theme apart color by color. It is the sixth city in this series after Miami, Istanbul, Paris, Rio de Janeiro and Tokyo, and the second light city after Rio, cold where Rio was tropical.

A Town Of Limestone, Tile And Sky

The theme's own description is a short one: crisp light and Baltic calm, airy porcelain backgrounds with cool Nordic blues, deep ink accents and a few lavender and rose highlights for warmth. Its palette names read like a walk from the harbor up to Toompea: Baltic Morning, Winter Sky, Limestone Blue, Cobalt Spire, Old Town Indigo, Pink Facade, Terracotta Roof, Weathered Brick.

Most of the theme is the sky. The backgrounds, the interface text, the keywords, the caret and the line numbers all sit near the same blue, around 217 degrees, and differ in how light they are. A deep cobalt #3F4494 runs through the interface as the accent, with a periwinkle #7179CC beside it. The town sits on top of that blue: the cobalt of the spires #425EB8, an amethyst #81549C, a harbor blue #377CC1, a spruce green #1E7857 and the red of old brick #B6564B.

The Harmony: A Cold Sky And Its Red Roofs

On a wheel, Tallinn's cool colors make one long arc. The greens of the courtyards and the spruce sit near 138 and 158 degrees, the harbor blue of members near 210, the cobalt keywords near 226, the accent near 236 and the amethyst strings out at 278. That is an analogous spread, wide enough to tell tokens apart and close enough that the whole file reads as one cold morning.

The warm colors do not sit straight across from the blue. The exact opposite of 217 degrees is near 37, and only one color in the theme stands there, the old brass of annotations at 32. The rest of the warmth sits about thirty degrees to one side of it: the brick of parameters at 6, the weathered brick of tags at 5, the rust of global variables at 9, the pink facade and terracotta of the open tab at 0. That is a split complementary layout. A pure opposite of a Baltic blue would be an orange, which the Old Town does not have. Red tile under snow is what it has, and the theme takes the red.

Backgrounds, Lit By Snow

A light theme lives on its whites, and Tallinn's are not white. Three of them share one hue near 217 degrees, and only the lightness moves:

  • Editor #EDF2FA, Baltic morning, the porcelain blue the code is written on and the brightest of the set.
  • Window #D0DCEF, a winter sky for the tool windows, tabs and panels.
  • Surface #A9B9DA, a limestone blue for the outer frame the whole window sits in.

Input fields sit on a pure white #FFFFFF, one step brighter than the editor, so the place you type is always the front of the window, fresh snow on old snow. The gutter is a paler wash #E1E9F6 and the current line lifts to #D9E5F4. Selection stays in the sky: selected text turns #B7C3E3, a hovered row #B8D0F3, and a selected row in the project tree #BECCEC edged in #7A96D0.

The one break is the open tab. The active editor tab sits on a pink facade #ECC2C2 with a terracotta underline #C17777, the color of the merchant houses around the Town Hall Square. In a frame made entirely of cold blue, that single warm tab tells you where you are before you read its name, the way a red roof is the first thing you find from the walls. Search matches stay warm too: a dusty rose #D8BEBE in the interface, and in the editor a candlelit parchment #F1E4D3 with the matched text in a dark amber #855C27.

One Foreground, Several Voices

The text is not black either. Code is written in a midnight Baltic ink #0F244F, a blue so deep it only shows its color next to a true black, at about 13.5:1 against the editor. The interface text around it is a deep cobalt #184092 at about 8.5:1, the same hue lifted a step, so labels and hints come from the same ink as the code.

Comments step back into a slate grey #80899C at around 3:1, set in italics, the color of limestone in shadow. It keeps the blue hue but loses nearly all of its color, which is enough to read as a note in the margin rather than part of the program. That is the ladder from the readability post: the code you act on reads first, the notes about it second.

The gutter is cut from the same stone. The caret is a steel blue #4D6FA2, the line numbers a pale slate #7988A0, and the number on the current line darkens to #1D3E74, so your place on the left edge is marked by depth, not by a new color.

Syntax: Spires, Courtyards And Brick

Open a file and the town fills in, from the sky down to the roofs:

  • Keywords in cobalt spire #425EB8, set in bold. They are the most frequent colored words in any file, and the weight does the work a louder color would do in another theme, so the shape of each line shows without shouting.
  • Strings, numbers and escapes in amethyst #81549C, the one violet in the theme and the clearest step away from the blue.
  • Methods and fields in harbor blue #377CC1, and JavaScript member functions in a lighter tone of it #3F8CC3.
  • Local variables in spruce green #1E7857, and static members in a softer courtyard green #548A64, the trees of the Old Town gardens in winter.
  • Parameters in brick #B6564B, and HTML and XML tags in weathered brick #B1544B, set in bold, the roofs and the walls.
  • Global variables in a rust #91473A, annotations in old brass #8E6433, and attributes in a slate blue #6584AC.

Class names, function names, types and constants stay a near black ink #131B25 at about 15:1, the darkest color in the theme. Leaving the names uncolored keeps a Tallinn file quiet. The eye reads the structure first, keyword, name, value, and the greens, violets and bricks only appear where a value, a member or an input is waiting to be found.

Explore Our Themes

Reading It Back

Taken apart, Tallinn is a cold sky over a red town. The whites share one Baltic blue so the code has a calm page to sit on. The language itself is drawn in cobalt and set in bold, the values in amethyst, the members in harbor blue and the variables in the greens of the courtyards, and the red of the roofs is kept for the parameters and tags you look for. One pink tab marks where you are, the comments fade into limestone grey, and the names stay a dark ink so nothing fights the structure.

It suits a bright room on a short winter day, which is also when the real city looks most like this, the sun low over the Gulf of Finland and the snow on the roofs taking the color of the sky. Tallinn installs free on JetBrains, VS Code, Cursor, Sublime Text, Chrome, Slack, Ghostty, iTerm2, macOS Terminal and Rhino, all from its theme page.

Frequently Asked Questions

What is the Tallinn theme?

Tallinn is one of Codigrate's light city themes, built around the Estonian capital on a winter morning: pale limestone walls, red tile roofs under snow and a low Baltic sun. The editor is a cool porcelain white instead of a plain white, the text is a midnight blue ink instead of black, and the code is painted in the colors of the Old Town: cobalt for keywords, amethyst for strings, harbor blue for members, spruce and courtyard greens for variables and static members, and the red of old brick for parameters and tags.

Why are the Tallinn backgrounds blue instead of white?

Because the whole frame is built from one cold light. The editor #EDF2FA, the tool windows #D0DCEF and the outer frame #A9B9DA share a hue near 217 degrees and differ only in lightness, the color snow takes when the sun stays low and the sky does the lighting. The keywords, the interface text, the caret and the line numbers sit on the same blue, so the code looks like it belongs to the page, and the panels separate by a soft step in depth rather than by drawn lines.

How are the syntax colors chosen in Tallinn?

They follow the Old Town from the sky down to the roofs. Keywords are a bold cobalt, the color of the spires against a winter sky, and strings and numbers are a muted amethyst. Methods and fields are a harbor blue, local variables a spruce green and static members a courtyard green. The warm notes are the brick: a red for parameters, a weathered brick for tags, a rust for global variables and an old brass for annotations. Class and function names stay a near black ink, and comments drop to an italic slate grey.

Is a pale blue light theme comfortable for long coding sessions?

In a bright room, yes. Code is a midnight blue #0F244F at about 13.5:1 against the editor and names are a near black at about 15:1, so the page reads firmly without the hard edge of pure black on pure white. The blue cast takes the glare off the background, keywords are bold so the structure of a line shows at a glance, and the only strong warm color in the frame is the open tab, so nothing around the code pulls at the eye.

Codigrate

Codigrate