Steps

Progress indicators for multi-stage flows. Use visible labels for task-heavy screens, compact numbered steps for tight layouts, and HTMX swaps when the server owns the current step.

  1. completedCreate an account
  2. 2Select a plan
  3. 3Checkout
  4. 4Get started
Usage Example
@steps.Steps(steps.Config{
    ShowLabels: true,
    AriaLabel:  "registration progress",
    Steps: []steps.Step{
        {Label: "Create an account", Status: steps.StatusCompleted},
        {Label: "Select a plan", Status: steps.StatusCurrent},
        {Label: "Checkout", Status: steps.StatusUpcoming},
        {Label: "Get started", Status: steps.StatusUpcoming},
    },
})

Default Steps

Horizontal progress without visible labels. Matches PenguinUI default number-only flow.

  1. completed
  2. 2
  3. 3
  4. 4
Default Steps
@steps.Steps(steps.Config{
    AriaLabel: "registration progress",
    Steps: []steps.Step{
        {AriaLabel: "Create an account", Status: steps.StatusCompleted},
        {AriaLabel: "Select a plan", Status: steps.StatusCurrent},
        {AriaLabel: "Checkout", Status: steps.StatusUpcoming},
        {AriaLabel: "Get started", Status: steps.StatusUpcoming},
    },
})

HTMX State Swap

Server owns state. Buttons swap the whole progress block with prev/next states, so no Alpine local state gets stranded or reset incorrectly.

  1. completedCreate an account
  2. 2Select a plan
  3. 3Checkout
  4. 4Get started

Current server state: step 2 of 4.

HTMX State Swap
<div id="steps-demo-shell">
    @components.StepsHTMXFlow(2)
</div>

// Server handler returns @components.StepsHTMXFlow(step)
// Buttons use hx-get + hx-target="#steps-demo-shell" + hx-swap="outerHTML"

Vertical Steps

Vertical flow for tighter sidebars, setup assistants, or stacked onboarding guides.

  1. completed
    Create an account
  2. 2
    Select a plan
  3. 3
    Checkout
  4. 4
    Get started
Vertical Steps
@steps.Steps(steps.Config{
    Orientation: steps.OrientationVertical,
    ShowLabels:  true,
    AriaLabel:   "registration progress",
    Steps: []steps.Step{
        {Label: "Create an account", Status: steps.StatusCompleted},
        {Label: "Select a plan", Status: steps.StatusCurrent},
        {Label: "Checkout", Status: steps.StatusUpcoming},
        {Label: "Get started", Status: steps.StatusUpcoming},
    },
})

API Reference

PropTypeDefaultDescription
IDstring""Stable root id for HTMX targets, swaps, and tests.
Steps[]StepnilOrdered progress items. Each Step supports ID, Label, AriaLabel, Number, Status, and StepAttrs.
OrientationOrientationOrientationHorizontalLayout direction: "horizontal" or "vertical".
ShowLabelsboolfalseShows visible labels beside the step indicators.
AriaLabelstring"progress"Accessible label for the ordered list.
LiveRegionboolfalseAnnounces swapped state changes after HTMX updates.
RootClassstring""Extra classes appended to the root ordered list.
RootAttrstempl.AttributesnilPass-through attributes for root hx-* hooks, data attributes, and test selectors.