Skip to content
Harness Design System Harness Design System Harness Design System

Checkbox

beta

The Checkbox component provides a customizable, accessible checkbox input.
It is built on top of the Radix UI Checkbox primitive with additional styling.

Usage

import { Checkbox } from "@harnessio/ui/components";
function Example() {
const [checked, setChecked] = React.useState(false);
const [indeterminate, setIndeterminate] = React.useState<'indeterminate' | boolean>(false);
const [optionalChecked, setOptionalChecked] = React.useState(false);
return (
<div className="flex flex-col space-y-8">
{/* Standard usage */}
<Checkbox
id="checkbox-standard"
checked={checked}
onCheckedChange={setChecked}
label="Accept terms and conditions"
caption="You must accept terms and conditions to proceed."
/>
{/* Indeterminate state */}
<Checkbox
id="checkbox-indeterminate"
checked={indeterminate}
onCheckedChange={setIndeterminate}
label="Select items"
caption="Indicates partial selection of items."
/>
{/* Optional */}
<Checkbox
id="checkbox-optional"
checked={optionalChecked}
onCheckedChange={setOptionalChecked}
label="Subscribe to newsletter"
caption="This field is optional."
optional
/>
{/* Disabled */}
<Checkbox
id="checkbox-disabled"
checked={false}
onCheckedChange={() => {}}
disabled
label="Subscribe to newsletter"
caption="This option is currently unavailable."
/>
{/* Without Label */}
<Checkbox
id="checkbox-no-label"
checked={checked}
onCheckedChange={setChecked}
/>
</div>
);
}

API Reference

The Checkbox component can be used either controlled with the checked and onCheckedChange props, or uncontrolled.
When used uncontrolled, the defaultChecked prop can be used to set the initial state of the checkbox.

<Checkbox
id="accept-terms" // [OPTIONAL] ID of the checkbox
checked // [OPTIONAL] whether the checkbox is checked or indeterminate
defaultChecked // [OPTIONAL] initial checked state
required // [OPTIONAL] whether the checkbox is required
onCheckedChange={handleChange} // [OPTIONAL] callback called when the checked state changes
disabled // [OPTIONAL] whether the checkbox is disabled
label // [OPTIONAL] a label displayed next to the checkbox
caption // [OPTIONAL] a caption displayed under the label
optional // [OPTIONAL] indicates if the field is optional
/>
PropRequiredDefaultType
idfalsestring
checkedfalsefalseboolean | 'indeterminate'
defaultCheckedfalsefalseboolean
requiredfalsefalseboolean
onCheckedChangefalse(checked: boolean | 'indeterminate') => void
disabledfalsefalseboolean
labelfalsestring
captionfalsestring
optionalfalsefalseboolean
classNamefalsestring