Skip to content

Toggle

Toggle turns a single setting on or off, and applies the change immediately.

On this page
  1. Preview
  2. States
  3. Label
  4. Properties
  5. Tokens
  6. iOS and Material 3
  7. Guidelines

Preview

Default, active. A 44 by 28 track with a 22 pt handle, centered in a 52 by 44 frame, so the thing you can hit is bigger than the thing you can see. Click it.

State Default, Active TrueFrame 52 x 44, track 44 x 28, radius 9999, 22 px handle, 16 px of travel

The 52 by 44 frame is the target and the control inside it is 44 by 28, sitting 4 from each side and 8 from the top and bottom. The handle is a 22 circle inset 3, so it sits at 3 when off and 19 when on, 16 of travel.

Two shadows sit under it, both black, one at 4 percent and one at 1.

Source: the Toggle set of the Appetite UI Figma file, read on October 2, 2026.

Which states does Toggle have?

Four: Default, Pressed, Focused and Disabled, each off or on. The file has no Hover state, because a finger does not hover, so a pointer hover moves these specimens toward Pressed. Pressed shifts the track while the finger is down, and Focused draws the ring for keyboard and switch control.

State x ActiveDefault, Pressed, Focused, Disabled, each off then on

Default

Pressed

Focused

Disabled

Focused is the focusRing/brand effect style, a 2 pt gap in the surface color and then a 2 pt ring in brand/base, drawn around the track. The frame is 52 by 44 so the ring has room.

Pressed moves each fill one step along its own ramp: bg/sub-200 when off, brand/pressed when on.

Disabled off is bg/soft-100 with no handle shadow. Disabled on keeps brand/base at 40 percent opacity, so a disabled switch still shows which way it is set.

Eight variants, State by Active, no holes. Source: component set 216:449 of the Appetite UI Figma file, read on October 2, 2026.

Label

The label is its own component, so the track stays a track. Align puts it on either side, and the description can be switched off. Each row is one switch: click the text or the track.

Align Left, Align Right340 x 48, gap 16, title 18/28, description 14/20

The row is 340 by 48: the 52 wide Toggle, 16 of gap, then 272 of text. The height comes from the text, 28 for the title plus 20 for the description at 14/20, so switching Show Description off takes the row to 44, the height of the Toggle frame.

Align swaps the order of the two children.

Properties

Two component sets: Toggle, the track, and _Toggle Label, the row that carries it.

Properties, property, type, default
PropertyTypeDefault
StateDefault, Pressed, Disabled, FocusedDefault
ActiveTrue, FalseFalse
AlignLeft, RightLeft
Show DescriptionBooleantrue
LabelTextLabel
DescriptionTextGet a push when the order ships

Toggle is eight variants of State by Active and carries no text. _Toggle Label is two variants of Align and holds Label, Description and Show Description.

The underscore keeps _Toggle Label out of the published library, so copy the row from the Toggle page of the file when you need it.

Tokens

Every value the toggle reads, resolved through its aliases to the primitive underneath.

Tokens, token, light, dark, applied to
TokenLightDarkApplied to
bg/soft-100#E9E9EA#48484ATrack when off, Disabled and off
bg/sub-200#D1D1D6#636366Track pressed while off
brand/base#155DFC#2B7FFFTrack when on, at 40% when Disabled
brand/pressed#193CB8#155DFCTrack pressed while on
static/static-white-0#FFFFFF#FFFFFFHandle
focusRing/brand2 pt bg/white-0, then 2 pt brand/base2 pt bg/white-0, then 2 pt brand/baseFocused, on the track
text/strong-950#0E0E0F#FFFFFFLabel title
text/sub-700#48484A#C7C7CCLabel description

bg/sub-200 is the next step along the gray ramp and brand/pressed is a step darker than brand/base in both modes, so pressing moves the control forward.

The handle reads static/static-white-0, so it stays white in dark mode.

How does Toggle differ on iOS and Material 3?

Appetite UI Toggle keeps one shape on both platforms: a 44 by 28 track in a 52 by 44 frame. The native switches live on the iOS and Material 3 pages of the file.

Toggle against its iOS and Material 3 counterparts, component, iOS, Material 3, difference
Appetite UIiOS counterpartMaterial 3 counterpartWhat differs
ToggleiOS / Toggle, 64 by 28, State Idle and Pressed by Is On by Is EnabledM3 / Switch, 52 by 32, Selected by Is EnabledThe iOS track is 20 wider than Appetite UI and the Material 3 track is 8 wider and 4 taller. Neither native set has a Focused state.

The minimum touch target is 44 pt on iOS and 48 dp on Material 3, set by platform/min-touch-target in the Platform collection.

The 52 by 44 frame meets the iOS minimum on both axes. On Android, add 4 dp of hit area in code.

Guidelines

Do

Name the setting, then say what it does. A toggle takes effect the moment it moves, so there is nothing to save and nothing to confirm.

Don't

Never label a toggle with a negative. Off then means on, and the reader has to solve a puzzle before changing a setting.

If a change needs a Save step, use Checkbox instead. A toggle names a state, so Weekly digest is right and Turn on weekly digest is not.

Make the whole label row tappable in code, because the file draws only the 52 by 44 frame as the target.