This is an independent analysis of publicly observable interface patterns, written for people studying how design systems are structured. Identity Forge is not affiliated with, sponsored by, or endorsed by Linear. Linear and its logo are trademarks of their owner. Nothing here is a licence to reproduce Linear's brand — see Copying this is the wrong outcome.
There is no Linear design system to download
Start here, because most of the confusion downstream comes from skipping it. Linear does not publish a design system. There is no @linear/tokens on npm, no Storybook, no documentation site at a design.linear.app equivalent, no Figma library released by the company. Compare that with IBM's Carbon, Shopify's Polaris or Salesforce Lightning, all of which ship installable packages and public documentation as a deliberate product decision.
What exists instead is three kinds of secondary material, and it is worth knowing which one you are reading:
| What it is | How much to trust it | |
|---|---|---|
| Linear's own engineering and design write-ups | First-party posts about specific redesigns | High, but they describe intent at a point in time, not the current build |
| Community Figma replications | Someone's reconstruction of the UI in Figma | Low as a spec. Useful as a study exercise, but it is one person's eyeballing |
| Automated style extractions | Scraped computed styles from the live site, published as tokens | Medium for values, low for meaning. It reports what a colour is, not what it is for |
The distinction matters because an extraction can tell you a surface is #0f1011 but cannot tell you it is one deliberate step above the canvas rather than an accident. Everything below is stated at the level it can actually be supported: observable patterns, with the reasoning left visible so you can disagree with it.
The weight band is the whole trick
If you take one thing from this: Linear's type sits in a narrow weight band, roughly 400 to 510, across essentially the entire product. A 72px display heading and a 15px label are separated by size and colour, not by weight. Bold, in the 700 sense that most interfaces reach for, is functionally absent.
That single constraint does more visual work than the palette. A wide weight band — 400 body, 600 labels, 700 headings, 800 hero — is the default that every UI framework ships with and every AI-generated interface reproduces. It reads as loud, and it reads as generic, because hierarchy is being shouted rather than composed. A narrow band forces hierarchy to be carried by size, spacing and colour instead, which is slower to get right and much harder to imitate accidentally.
The cheapest way to test this on your own product: set every font-weight above 600 down to 510 and every weight below 400 up to 400. If the interface immediately looks more considered, weight was doing hierarchy's job.
The variable-font detail is what makes 510 possible at all. A weight of 510 is not a static cut; it exists because the interface uses a variable typeface where any value on the axis is available. Trying to reproduce this with static weights gives you 500, which is close, and the near-miss is part of why replications feel almost-right.
Tracking that tightens as type grows
This is the detail most reproductions miss entirely, and it is measurable rather than a matter of taste. Letter-spacing in Linear moves negative as size increases: display type in the 48–72px range sits around -0.022em, mid-range headings around -0.012em, and body-scale type around -0.010em. The relationship is monotonic — bigger type, tighter tracking.
The reason is optical, not decorative. Letterforms drawn to be readable at 16px carry sidebearings sized for 16px. Scale them to 64px and those gaps scale too, so the word visually falls apart into letters. Professional type design compensates with optical sizes; interface work compensates with a tracking ramp. Most design systems set one letter-spacing value, or none at all, and their headings look loose in a way nobody can name.
/* The ramp, expressed as tokens. Values shown are the pattern,
not Linear's — pick your own by eye at each step. */
:root {
--tracking-display: -0.022em; /* 48px and up */
--tracking-heading: -0.012em; /* 20-32px */
--tracking-body: -0.010em; /* 13-17px */
--tracking-label: 0.02em; /* small caps, 11-12px: loosens */
}Note the reversal at the bottom. Small uppercase labels want positive tracking for the same optical reason large display type wants negative. A ramp that only goes one direction is half the rule.
Hairlines instead of shadows
Linear separates surfaces with borders at sub-pixel widths — 0.5px on displays that can render it — and a stepped set of near-black greys, rather than with drop shadows. The canvas sits at roughly #08090a, card surfaces one step up around #0f1011, elevated panels above that. Borders come from a low-contrast grey around #23252a for structural edges, with a slightly brighter step for section separators.
This is a genuine trade-off, not a strictly better choice, and it is worth being honest about the cost. Shadows communicate depth pre-attentively; a reader knows a card is above the page without looking at it. Hairlines do not. What you gain is a flat, dense, precise surface where a lot of information can sit close together without visual noise — which is exactly what an issue tracker needs and exactly what a marketing site does not.
About the specimen below
This is not Linear's token set and is not affiliated with Linear. It is an unrelated kit that happens to make the same structural choice — near-black stepped surfaces, hairline borders, no shadows — so the pattern can be examined directly rather than described. The point is the mechanism, not the brand.
| Hairline + surface steps | Shadow | |
|---|---|---|
| Reads at a glance | No — you have to look at the edge | Yes — depth is pre-attentive |
| Information density | High. Edges cost 1px, shadows cost 8–24px of visual bleed | Lower. Shadows need breathing room around every card |
| Dark mode | Works. Contrast comes from surface steps | Degrades. Black shadows on near-black do nothing |
| Fits | Dense tools, tables, kanban, IDE-adjacent UI | Marketing, consumer, anything with large cards |
That last row is the one to act on. The reason a Linear-style treatment often fails on a landing page is not that it was executed badly; it is that the elevation strategy was chosen for information density and then applied to a surface with four cards on it.
One accent, and a lot of near-monochrome
The colour observation people repeat is "Linear is purple". At time of writing the observable interface reads closer to near-monochrome with a single high-chroma accent used for primary action and active state, plus a small set of chromatic fills reserved for tags and labels. The specific accent hue has changed across redesigns; the structural fact has not.
The structural fact is a ratio. The accent appears on a small percentage of pixels — a primary button, an active nav indicator — and everything else is grey. Copying the hue and applying it at typical SaaS density (accent headings, accent icons, accent links, accent borders, accent gradient hero) produces something that shares Linear's palette and none of its character.
This is the single most common failure in "make it look like Linear" prompts to a coding agent. The agent has no ratio to work with, so it uses the accent everywhere the accent is semantically plausible — which is everywhere. State the ratio explicitly or you will get a purple website.
The tag colours are worth separating out because they are a different system. A handful of chromatic fills — a violet, a teal, a coral, a green — exist to make labels distinguishable at a glance, the way categorical series work in a dashboard palette. They are not brand colours and they are not status colours, and a system that conflates the three ends up unable to show an error in red because red already means "marketing" on a label somewhere.
The shape language: small radii, compact padding
Radii cluster tight — roughly 6px on controls and 12px on larger containers — against a default ecosystem habit of rounded-lg and up on everything. Padding is compact, in the 8–12px band for controls rather than the 16–24px that most component libraries ship.
Both follow from the same source as the hairlines: density. A dense tool cannot spend 24px of padding per control, and large radii on small elements start to eat the element. The rule underneath is not "use 6px" — it is that radius should scale with the element, and most systems apply one radius token to a 28px button and a 400px panel alike.
What a teardown is actually for
Copying this is the wrong outcome, and not only for the trademark reason. A design system is downstream of a product decision. Linear's density serves people who live in an issue tracker for six hours a day; that reader has different needs from someone landing on a pricing page for forty seconds. Lifting the surface treatment across that gap gives you an interface optimised for a job your product does not have.
The transferable thing is the method. Every observation above has the same shape: notice a pattern, work out the constraint that produces it, then write the constraint down as a rule. That is a repeatable exercise you can run on any product you admire, and it is what turns a mood board into something an agent can execute.
- 1
Screenshot three screens, not one
A single screen tells you the palette. Three tell you which decisions are consistent — and consistency is what distinguishes a system from a page.
- 2
Measure, do not eyeball
Open dev tools and read the computed values: font-weight, letter-spacing, border-width, border-radius, padding. Write down actual numbers. "Tight tracking" is not a rule;
-0.022emabove 48px is. - 3
Look for the range, not the value
The insight is rarely a single number. It is that all the weights fall between 400 and 510, or that every radius is 6 or 12 and nothing else. Ranges are rules; single values are samples.
- 4
Write down what is absent
No shadows. No weights above 510. No second accent. No gradients. Absences are the highest-value part of a teardown and the part that never survives into a palette export.
- 5
Convert each observation into an instruction
"Elevation uses a 1px border and a surface step, never a box-shadow" is executable. "Minimal and precise" is not. This is the step where a teardown becomes a design system.
Why the absences never survive
We sampled 299 DESIGN.md files published across public repositories and directories to see what design guidance actually contains when it is written for an AI agent to read. The results explain why teardown-derived systems degrade.
| Share of files | |
|---|---|
| No prohibitions of any kind | 76% |
| No semantic colour roles — raw hex only | 86% |
| No dark mode definition | 69% |
| No distinctive motifs | 57% |
| No concrete size value anywhere | 44% |
| At least one vague adjective doing the work | 54% |
Three quarters of these files contain no prohibitions. But as the teardown above shows, prohibitions are where the identity lives — no bold, no shadows, no second accent. A file that lists Linear's hex values and omits its restrictions has captured the least distinctive part of the system and discarded the rest.
The vague-adjective figure compounds it. "Clean" appears in 39% of these files and "modern" in 36%. Both are words a model will happily satisfy with the average of its training data, which is the reason AI-generated interfaces converge on the same look. Neither word constrains anything.
Writing the constraints down for an agent
If the output of a teardown is going to a coding agent, it needs to survive being read once and applied across dozens of files. That means named tokens with stated purposes, and an explicit prohibition list. Here is the shape:
## Type
Weights: 400 and 510 only. Never use 600 or above; hierarchy is
carried by size and colour, not weight.
Tracking ramps with size:
- 48px and up: -0.022em
- 20-32px: -0.012em
- 13-17px: -0.010em
- 11-12px uppercase labels: +0.02em
## Elevation
Never use box-shadow. Elevation is a surface step plus a 1px border:
- canvas -> surface -> elevated
- Border: --border-subtle for structure, --border-strong for sections
## Accent
One accent. It appears on primary buttons and active nav state only.
Do NOT use the accent for headings, links, icons, borders or gradients.
Tag fills are a separate categorical set and are not brand colour.
## Never
- No gradients
- No drop shadows
- No second accent colour
- No font-weight above 510
- No border-radius above 12pxNotice how much of that file is the Never section and the prohibitions embedded in each rule. That ratio is the point. If you hand an agent a palette and a font name, you have given it permission to do everything else however it likes, and everything else is most of the interface.
Every Identity Forge design kit ships with this structure built in — semantic roles rather than raw hex, explicit do's and don'ts, motifs, and a dark mode defined rather than derived. Browse the kits or read what a DESIGN.md file is first.
The uncomfortable part
There is a version of this exercise that produces something worse than what you started with. It happens when the teardown becomes the goal: you assemble a rigorous set of rules describing someone else's product, hand it to an agent, and get back a competent imitation with no reason to exist.
Design systems that are actually good are downstream of an argument about the reader. Linear's is an argument that a power user in a tool all day wants density and quiet. A learning product might argue for generous spacing and warmth. A financial dashboard might argue for reserved status colours and a neutral scale that survives a dense table. The rules follow from the argument; they do not substitute for it.
So use the teardown for calibration, not for content. It tells you what a rigorous system looks like — how specific the numbers get, how many things get forbidden, how narrow the ranges are. Then go make that argument about your own product.
Is there an official Linear design system I can install?
No. Linear does not publish a token package, component library or documentation site. Anything presented as "the Linear design system" is a third-party reconstruction — a community Figma file, a scraped style extraction, or an analysis like this one. Treat values from those sources as approximations of a moving target.
What font does Linear use?
The interface uses Inter as a variable font, which is what makes intermediate weights like 510 available. Reproducing the look with static Inter cuts gets you 500, and the near-miss is part of why replications feel slightly off.
Can I use Linear's colours in my own product?
Hex values are not protectable, so a near-black canvas and a bright accent are fine to use. Reproducing Linear's brand — the logo, the name, or a presentation designed to be mistaken for Linear — is not. The practical advice is different from the legal one: copying the palette without the constraints gives you neither Linear's look nor your own.
Why does my Linear-style app look wrong even with the right colours?
Almost always weight and accent density. If any type on the page is 600 or heavier, or if the accent appears on more than a couple of elements per screen, those two alone will override a correct palette. Check tracking third — untracked headings at 48px and above are the next most visible miss.
Is a dense, hairline-based system right for my product?
Only if your users spend long sessions in it. Density serves people who need a lot on screen at once and already know where things are. For a marketing site, an onboarding flow, or anything a first-time visitor scans in seconds, shadows and generous spacing genuinely work better — that is a real trade-off, not a lack of taste.