IBM's 2x Grid divides any surface into 2, 4, 8, 16 or 32 columns on an 8 px mini unit for product and web (scaled by viewing distance in print, from a 2 mm unit for handheld pieces to 64 mm for street-distance signage), spaces elements at 1x, 2x, 3x, 4x, 6x, 8x, 10x and 12x the unit, and crops images and containers to 16:9, 4:3, 3:2, 2:1 or 1:1 measured from the column width. UI icons are drawn on a 32 x 32 px grid with 2 px padding, a 2 px stroke and 2 px corner radius, square caps, rounded exteriors with 90 degree interiors and 45 degree or 15 degree-step angles, all borrowed from IBM Plex; at 24, 20 and 16 px the stroke steps down to 1.5, 1.25 and 1 px, and icons are one solid color at 4.5:1 contrast. Line-style illustration snaps to a 4 px grid with at most four clearly different line weights, prefers 15 to 90 degree angles in 15 degree steps and circle-segment curves, keeps lines opaque, and runs gradients along the stroke; pictograms use a 0.72 px stroke (1.44 px when expressive). Photography is reportage, portraiture and still life shot at eye level or aerial, in natural light, everything in sharp focus, with no color washes, grading, overlays or golden-hour warmth. Motion comes in two styles, productive and expressive, with published cubic-bezier curves and six duration tokens from 70 ms to 700 ms, and the brand bans cartoonish overshoot and bounce.
One rule, divide space by two on an 8 px unit, decides grid, image crops, icon canvases and illustration snapping, so every part of a piece lines up with every other. Motion and imagery are held to the same restraint: two motion speeds, no overshoot, and photos left ungraded and in sharp focus.
Enterprise software, technical and data products, consultancies, research and engineering firms, regulated industries, any brand that wants to read as precise, factual and engineered rather than playful
Steal it for your brand
The same system, written in your colors, type and shapes. Nothing of IBM's look comes with it.
style.border width * 0.5 in palette.border.typography.body.weight / 200 units, square caps and arrow tips, rounded outside corners of 2 units, sharp inside corners, 45 degree diagonals and other angles in 15 degree steps, no perspective.palette.ink to match their text at 4.5:1 against palette.paper, center them on the text line, and give any clickable one a 44 px target.palette.ink lines with palette.accent as the lead and gradients running along the stroke to palette.accent dark.{
"recipe": {
"icon_style": {
"canvas_units": 32,
"padding_units": 2,
"stroke_units_at_32": "{typography.body.weight} / 200",
"stroke_to_size_ratio": 0.0625,
"sizes_px": [
16,
20,
24,
32
],
"corner_radius_units": 2,
"corner_radius_step_units": 2,
"exterior_corners": "rounded",
"interior_corners": "sharp",
"linecap": "square",
"arrow_tips": "square",
"primary_angle_deg": 45,
"angle_step_deg": 15,
"perspective": "straight-on",
"fill": "none",
"color": "{palette.ink}",
"color_secondary": "{palette.ink_muted}",
"min_contrast": 4.5,
"align_to_text": "center",
"touch_target_px": 44,
"pictogram_stroke_units_at_32": 0.72,
"pictogram_stroke_units_expressive": 1.44
},
"illustration_style": {
"style": "line",
"grid_px": 4,
"max_line_weights": 4,
"line_weight_units": [
1,
2,
4,
8
],
"min_gap_to_weight_ratio": 1,
"angles_deg": [
15,
30,
45,
60,
75,
90
],
"curves": "quarter, half and full circles first; free curves only when the idea needs them",
"nested_corners": "equal spacing, radius grows by the spacing each ring",
"stroke": "{palette.ink}",
"stroke_accent": "{palette.accent}",
"gradient_along_stroke": [
"{palette.accent}",
"{palette.accent_dark}"
],
"line_opacity": 1,
"max_hues": 3,
"min_contrast": 3,
"background": "{palette.paper}",
"aspect_ratios": [
"16:9",
"4:3",
"3:2",
"2:1",
"1:1"
],
"composition": "split the canvas in halves; one half literal, the other what happens behind it"
},
"photo_treatment": {
"grade": "none",
"saturation": 1,
"contrast": 1,
"overlay": "none",
"color_wash": "none",
"lighting": "natural",
"warmth_shift": 0,
"focus": "deep",
"viewpoints": [
"eye level",
"aerial"
],
"subjects": [
"reportage of real work",
"portraits of people at equal stature",
"still life of the product"
],
"aspect_ratios": [
"16:9",
"4:3",
"3:2",
"2:1",
"1:1"
],
"focal_point": "on a half or quarter division of the frame",
"radius_px": 0,
"frame_border": "none"
},
"motion": {
"style": {
"by": "style.motion",
"map": {
"crisp": "productive",
"calm": "productive",
"playful": "expressive"
},
"default": "productive"
},
"easing_standard": {
"by": "style.motion",
"map": {
"crisp": [
0.2,
0,
0.38,
0.9
],
"calm": [
0.2,
0,
0.38,
0.9
],
"playful": [
0.4,
0.14,
0.3,
1
]
},
"default": [
0.2,
0,
0.38,
0.9
]
},
"easing_entrance": {
"by": "style.motion",
"map": {
"crisp": [
0,
0,
0.38,
0.9
],
"calm": [
0,
0,
0.38,
0.9
],
"playful": [
0,
0,
0.3,
1
]
},
"default": [
0,
0,
0.38,
0.9
]
},
"easing_exit": {
"by": "style.motion",
"map": {
"crisp": [
0.2,
0,
1,
0.9
],
"calm": [
0.2,
0,
1,
0.9
],
"playful": [
0.4,
0.14,
1,
1
]
},
"default": [
0.2,
0,
1,
0.9
]
},
"micro_ms": {
"by": "style.motion",
"map": {
"crisp": 70,
"calm": 110,
"playful": 110
},
"default": 70
},
"transition_ms": {
"by": "style.motion",
"map": {
"crisp": 150,
"calm": 240,
"playful": 240
},
"default": 150
},
"large_ms": 400,
"dim_ms": 700,
"overshoot": 0,
"axes_per_move": 1,
"min_fps": 24,
"stroke_draw_from_weight": 0,
"reveal_order": "left to right, top to bottom",
"expressive_moments": "page open, primary action, alerts; everything else productive"
},
"layout_move": {
"base_unit_px": 8,
"divisions": [
1,
2,
4,
8,
16
],
"columns_by_breakpoint": {
"320": 4,
"672": 8,
"1056": 16,
"1312": 16,
"1584": 16
},
"margin_px_by_breakpoint": {
"320": 0,
"672": 16,
"1056": 16,
"1312": 16,
"1584": 24
},
"box_padding_px": 16,
"gutter_px": 32,
"spacing_multiples": [
1,
2,
3,
4,
6,
8,
10,
12
],
"section_gap_units": {
"by": "style.density",
"map": {
"airy": 12,
"balanced": 8,
"dense": 6
},
"default": 8
},
"aspect_ratios": [
"16:9",
"4:3",
"3:2",
"2:1",
"1:1"
],
"height_from": "column width",
"type_alignment": "left edge of box padding, flush left, ragged right",
"balance": "asymmetric; leave whole columns empty as negative space",
"grid_reveal_rule": "{style.border_width} * 0.5",
"grid_reveal_color": "{palette.border}"
}
},
"fallbacks": {
"palette.ink_muted": "{palette.ink}",
"palette.accent_dark": "{palette.ink}",
"palette.border": "{palette.ink_muted}",
"style.border_width": 1
},
"steps": [
"Set the base unit to 8 px and build the page on halves: pick 1, 2, 4, 8 or 16 columns (4 below 672 px, 8 to 1056 px, 16 above), 16 px box padding, a 32 px gutter, and keep that division for the whole piece.",
"Space everything with 1, 2, 3, 4, 6, 8, 10 or 12 units only; separate sections by the recipe's section_gap_units.",
"Size every image, illustration and card by the columns it spans, then set its height from that width at 16:9, 4:3, 3:2, 2:1 or 1:1.",
"Set type flush left on the padding edge, leave whole columns empty for asymmetric balance, and where the grid should be felt, draw it as hairlines of {style.border_width} * 0.5 in {palette.border}.",
"Draw or restyle icons on a 32 unit canvas with 2 units of padding: one stroke of {typography.body.weight} / 200 units, square caps and arrow tips, rounded outside corners of 2 units, sharp inside corners, 45 degree diagonals and other angles in 15 degree steps, no perspective.",
"Export icons at 16, 20, 24 and 32 px with the stroke scaled to one sixteenth of the size; color them {palette.ink} to match their text at 4.5:1 against {palette.paper}, center them on the text line, and give any clickable one a 44 px target.",
"Draw illustrations as line art snapped to a 4 px grid: up to four clearly different weights, gaps at least as wide as the line, angles in 15 degree steps, circle segments for curves, opaque {palette.ink} lines with {palette.accent} as the lead and gradients running along the stroke to {palette.accent_dark}.",
"Use real photographs of people working, portraits at eye level and product still lifes; keep them in natural light and sharp all the way through, crop to the shared ratios with the subject on a half or quarter line, and add no grade, wash, overlay or tint.",
"Animate with the recipe's easing curves and durations: micro states at the micro duration, transitions at the transition duration, large panels at 400 ms, backdrop dimming at 700 ms.",
"Move one axis at a time, never overshoot or bounce, draw lines in by growing the stroke from zero, change color by stepping between palette roles rather than fading opacity, and reveal text left to right, top to bottom."
]
}The lesson
Pick one multiplication rule and apply it to every visual decision, so parts made by different teams still line up.
The page "2x Grid" says the grid is the framework for all the visual elements and typography, whatever the device or medium. A list below the intro runs "Divisions of two", "Constructing the 2x Grid", "Base unit", "Spatial relationships", "2x Grid in UI" and "2x Grid for video". The sidebar puts photography, icons and animation under the same system.
The 8 px base and halving suit IBM's scale, so pick your own base unit. Keep a single divisibility rule that reaches icons, crops and layout alike.