DocsBlog
  • 1.5.0

  • light

    dark

    system

    Switch mode
  • Cerberus

    Acheron

    Elysium

Release - June 25, 2026

Cerberus v1.5 Release

CBAuthor's profile picture

Casey Baggz

Cerberus Admin

This release provides new features to the Data Grid along with general bugfixes.

Overview

Here is a brief overview of what's new:

  • React Features - New icons and fixes
  • Data Grid Features - Initial loading and column visibility

React Features

This release was admittedly focused heavier on the Data Grid and less on the React features. Here are the high-level improvements made:

  1. Feat: Exposed the CheckboxCheckedChangeDetails type
  2. Feat: Defined new Context.icons of search , filter

Note: As a reminder, the context icons are built in and meant to be used for fallback icons when no custom icon is provided for that use case. We do not recommend using them in place of local icons.

Data Grid Features

We added two new beneficial features to the Data Grid which also exposes new context Actions and Accessors as a result.

Initial Loading

We added a new overlays.initialPending prop to the Data Grid that allows you to show an initial loading phase to the Data Grid.

This will render the only during the mounting phase of the component. Once data has been populated for the first time, the pending overlay will be used from then on.

New Context Values

NameTypeDescription
phaseAccessor<Phase>The current phase of the grid layout created via a computation.

View the Initial Loading docs

Column Visibility

In v1.5 we have added a new Feature that allows users to Hide or Manage the visibility of columns in the Data Grid.

This is achieved by setting the features.visibility prop to true or by utilizing the options object. Doing so will display the visibility options in the column menu.

Note: We have updated the background color of Data Grid Popovers used for features to improve contrast and readability.

New Context Values

NameTypeDescription
allColsHiddenAccessor<boolean>Whether all columns are hidden. Created via a computation.
totalHiddenColsAccessor<number>The total number of hidden columns created via computation.
hiddenColsMaxReachedAccessor<boolean>Whether the maximum number of hidden columns has been reached. Created via a computation.

View the Column Visibility docs

Thanks!

This is another great release introducing some beneficial tools and overall improvements.

A special thanks to everyone who has helped validate the APIs, docs, and submitted features or bugfixes for this release.

There is no "I" in Cerber-"US"

Upgrading

To upgrade to this release, you can install the latest version of Cerberus React:

Terminal
Copy
npm run up:cerberus
Terminal
Copy
pnpm run up:cerberus
Terminal
Copy
deno run npm:up:cerberus
Terminal
Copy
bun run up:cerberus
Copy
'use client'

import { Corn } from '@carbon/icons-react'
import { DataGrid } from '@cerberus/data-grid'
import { Button, ButtonGroup, Show, Text } from '@cerberus/react'
import {
  batch,
  createEffect,
  createSignal,
  onCleanup,
  useQuery,
  useRead,
} from '@cerberus/signals'
import { Center, HStack, Stack, VStack } from 'styled-system/jsx'
import { queryEmployees } from '../api'
import { columns } from '../quick-start/columns.demo'

const store = createInitialDemoStore()

export function InitialDemo() {
  const data = useQuery(queryEmployees(0))

  const load = useRead(store.load)
  const pending = useRead(store.pending)

  return (
    <Stack gap="md" w="3/4">
      <HStack justify="space-between" w="full">
        <ButtonGroup>
          <Button onClick={() => store.initLoad()} size="sm">
            Load
          </Button>
          <Button onClick={() => store.setPending(true)} size="sm">
            Update
          </Button>
        </ButtonGroup>
        <Show when={load}>
          <Button palette="danger" onClick={() => store.reset()} size="sm">
            Reset
          </Button>
        </Show>
      </HStack>

      <HStack h="20rem" w="full">
        <Show when={load}>
          {() => (
            <DataGrid
              columns={columns}
              data={data}
              overlays={{
                initial: <CustomInitial />,
                pending: 'linear',
              }}
              pending={pending}
            />
          )}
        </Show>
      </HStack>
    </Stack>
  )
}

function CustomInitial() {
  return (
    <Center bgColor="page.surface.initial" h="full" w="full">
      <VStack gap="md">
        <Corn size={24} />
        <Text textStyle="body-md">Shelling corn...</Text>
      </VStack>
    </Center>
  )
}

function createInitialDemoStore() {
  const [load, setLoad] = createSignal<boolean>(false)
  const [pending, setPending] = createSignal<boolean>(false)

  createEffect(() => {
    let timeout: NodeJS.Timeout | undefined
    if (pending() && load()) {
      timeout = setTimeout(() => setPending(false), 2000)
    }
    onCleanup(() => clearTimeout(timeout))
  })

  return {
    load,
    pending,

    setLoad,
    setPending,
    initLoad: () => {
      batch(() => {
        setLoad(true)
        setPending(true)
      })
    },
    reset: () => {
      batch(() => {
        setLoad(false)
        setPending(false)
      })
    },
  }
}
Copy
'use client'

import { DataGrid } from '@cerberus/data-grid'
import { useQuery } from '@cerberus/signals'
import { Box } from 'styled-system/jsx'
import { queryEmployees } from '../api'
import { columns } from './columns'

export function BasicDemo() {
  const data = useQuery(queryEmployees(200))
  return (
    <Box h="20rem" w="90%">
      <DataGrid columns={columns} data={data} />
    </Box>
  )
}

// columnHelper.accessorFn((row) => `${row.firstName} ${row.lastName}`, {
//   id: 'fullName',
//   header: 'Employee',
//   minWidth: 300,
//   features: {
//     visibility: true,
//   },
//   cell: ({ row, value }) => (
//     <VStack alignItems="flex-start" gap="0">
//       <Text textStyle="body-md">{value}</Text>
//       <Text color="page.text.100" textStyle="label-sm">
//         {row.email}
//       </Text>
//     </VStack>
//   ),
// }),