Skip to content
design
Foundations

Iconography

OpenBridge icons for maritime concepts, Lucide for generic UI, and icons in content as well as navigation.

On this page
Althea
Go to…/
Underway
Dashboard
Situation⬤ 1
Conning
Chart7
Anchor
Passage
Aboard
ALARMAnchor drag · 38 m outside swing circle · since 21:02ACK
DepthSOUNDER
8.4m
▲ +0.3 m / 10 min
True windMAST
14G22kn
TWD 214°
SOGGPS
0.4kn
COG 087°
Icons in navigation and in content. Maritime concepts use OpenBridge icons; generic controls use Lucide.
01Two providers, split by conceptOpenBridge draws maritime concepts: own ship, chart, anchor, depth, wind, AIS. Lucide draws generic controls: search, settings, chevrons. One concept always uses the same icon.
02Copied, never redrawnOpenBridge icons are copied byte for byte from the pinned upstream package. Their shapes follow IEC 62288, so a bosun icon matches the one on the bridge display.
03Icons support wordsAn icon sits beside its label or value. It never replaces a severity shape, a severity word or the label of a reading.

Maritime icons: OpenBridge

These are the vendored OpenBridge icons, available through @bosunkit/icons. They are filled shapes that take currentColor, so they follow the theme and the text color around them.

Own shipOwnShipAlternativeOutlined
ChartChart
AnchorAnchorIec
DepthDepth
WindWind
AIS targetAisTargetActivatedIec
TideTide
RouteNavigationRoute
RadarRadarIec

Where OpenBridge offers both an -iec icon and a -proposal icon for a concept, the -iec icon is used: its shape follows the IEC 62288 symbol set used on certified displays. A rotating icon, such as a wind arrow, is rotated with a CSS transform; the set holds no pre-rotated copies.

Generic icons: Lucide

Lucide icons are stroked, 2px at 24px, with round caps. They cover controls and concepts that have nothing to do with the sea.

SearchSearch
SettingsSettings
CrewUsers
ChatMessageSquare
DashboardLayoutDashboard
ChecklistsListChecks
TelemetryActivity
PanelPanelLeft
ExpandChevronDown

Sizes

An icon is sized in em of the text beside it, so it grows with the size class: 1.375em in a navigation row, 1.8em in the tab bar. An icon-only button keeps its 48 px square whatever the icon's size. Each specimen below sits in the element it belongs to.

Anchor
1.375emNavigation row
Chart
1.8emNavigation bar
48 px targetIcon-only button
Icon sizes by context

Icons in content

Icons are not only for navigation. A readout label, a list row and a section title carry the icon of the quantity they show, so the eye finds depth or wind by shape before reading the label.

DepthSOUNDER
8.4m
▲ +0.3 m / 10 min
True windMAST
14G22kn
TWD 214°
SOGGPS
0.4kn
COG 087°
Traffic
Ostara · sailing1.8 NM
Pilot boat 23.4 NM
Readout labels and list rows

The OpenBridge set

The kit carries the whole maritime set of OpenBridge 2.0 (the pinned 2.0.0-next.128 package), grouped into families by the concept an icon draws. The gallery shows every icon, searchable by name and filterable by family, with the import that draws it. Each family answers one question the crew ask:

ConceptFamiliesWhat they draw
Own vessel and othersown, vessel, aisOwn ship in its alternative forms, ship types and AIS targets
Position and tracklocation, navigationPositions, waypoints and routes
Marks and lightsbeacon, buoy, light, harbour, anchorAids to navigation, lights and anchorages
Chart and radarchart, radarChart layers, radar modes and symbols
Water and weatherdepth, tide, wind, weatherSoundings, tidal marks, wind and sky
Alertsalarm, notificationThe alert marks and notices; the alert's shape and word carry its priority
Power and forcesbattery, forceCharge and load states, and the forces on the hull

Choosing an icon

Choose by the concept, not by how an icon looks.

  1. Look for the concept in the set first. If OpenBridge draws it, use that icon; Lucide is for controls with no maritime meaning, such as search, settings and chevrons.
  2. Take the family's -iec icon where there is one, since its shape follows the IEC 62288 symbol set.
  3. Keep to one icon per concept, in every place the concept appears.
  4. Do not make an icon carry a status. A severity, an integrity level or a state has its own shape and word; an icon says what a thing is, never how it is doing.

Color and state

An icon is a filled shape in currentColor, so it takes the color of the text it sits beside and follows the theme. It never has a color of its own: where it must stand out, its container's text color changes.

RestingDim, beside a label
ActiveAccent: the current page or live value
Hover, focusFull text color
Disabled40% opacity, never a new color
Icon states

Alert colors retain their operational priority meaning. Other semantic systems, such as port/starboard direction, data integrity and editorial categories, use their own named roles and visible labels. Do not select an alert role merely to make a generic icon colorful. A wind arrow or bearing icon can rotate within its instrument's defined direction convention.

Icon and label

An icon sits before its label with a small gap and is as tall as the label's line, so the two read as one unit.

Depth
Icon before labelGap of one space step
14.2 kn
Icon with valueLabel small, value large
Icon and label

Accessibility

  • Beside a word, an icon is decorative. It is hidden from a screen reader (aria-hidden), because the label already names it; a second announcement is noise.
  • Alone, an icon needs a name. An icon-only button takes an aria-label and shows the name in a tooltip, and its target is at least 48 px, whatever the icon's size.
  • An icon is never the only sign of a state. The rule that severity, integrity and state carry a shape and a word holds for every icon; see Accessibility.
  • Contrast. An icon that carries meaning has at least 3:1 against its surface in all four themes, which the --text-dim and --accent tokens meet.

Importing

An icon is imported by its family and name, so a screen loads only the icons it draws:

import { AnchorIec } from '@bosunkit/icons/anchor/AnchorIec';
import { Wind } from '@bosunkit/icons/wind/Wind';

<AnchorIec size={20} aria-hidden="true" />

A name is the file's kebab-case name in PascalCase: anchor-iec is AnchorIec. The component takes size (24 by default) and every SVG attribute, and the raw file is @bosunkit/icons/svg/anchor-iec.svg for a report or a document. Lucide icons come from lucide-react. Both providers' icons are sized in em in the kit, so they follow the text.

The reports render the kit's React icons, as they build with the kit; the public site copies the raw SVGs from @bosunkit/icons/svg and lucide-static at the kit's pinned versions.

Using icons

Do
Use one icon per concept everywhere: the OpenBridge anchor in the navigation, the alarm row and the anchor watch page.
Don't
Don't draw one concept from two providers. A Lucide anchor beside the OpenBridge anchor reads as two different things.
Do
ALARMAnchor drag · 38 m outside swing circle · since 21:02ACK
Keep the severity shape and word, and put the cause icon beside them.
Don't
Anchor drag · 38 m outside swing circle
Don't let a cause icon stand in for the severity. Without ▲ and ALARM, a red anchor could be a caution, a selection or decoration.

Names, categories and diagram symbols

Hide an icon from assistive technology when adjacent text already provides its meaning. An icon-only control needs an accessible action name; a tooltip supplies additional context, not the control's only name. Keep the same icon for the same concept in navigation, reports and diagram legends.

Editorial icons may identify a report category with document tone roles. Diagram symbols and line styles identify services, paths or direction. Neither assigns a maritime alert priority. Operational alerts retain their dedicated shape, priority word and state; a decorative category icon cannot carry that responsibility.