Building real-time orderbook visualizations requires tackling WebSocket management, state synchronization, performance optimization, and UI implementation simultaneously. This complexity creates a barrier for traders, analysts, and developers who want to visualize market depth and analyze orderbook dynamics.
Krono solves this by providing a complete, production-ready toolkit that abstracts away the complexity while maintaining the performance and flexibility needed for many trading use cases.
Designed to empower the community, Krono's modular architecture enables developers to build sophisticated orderbook visualizations with ease. Beyond using Krono's built-in tools, developers can contribute their own specialized components, data plugins (custom exchange adapters, historical data importers), and storage solutions, creating a shared ecosystem that benefits all traders, analysts, and the Kraken ecosystem.
Krono consists of three packages:
Krono features a comprehensive documentation, for core, hooks, and kit packages.
It leverages a sophisticated tech stack integrating Next.js and React+Vite showcases, Turborepo, Bun, Biome, Playwright, Vitest, Storybook, shadcn/ui, Tailwind CSS and automated CI/CD with live deployments.
For a deeper look at Krono’s architecture, such as the update pipeline and design patterns, see the architecture guide.
For installation and setup instructions refer to the development guide.
Use the following code snippet to get a live orderbook with time travel capabilities using @krono/kit (Note: This example is rather basic. Krono's components are highly customizable so you can pass a variety of props and compose them as granularly as needed with multiple sub-components, tailored to your specific requirements):
import {
formatDigits,
formatPrice,
Orderbook,
OrderbookControls,
OrderbookTable,
} from '@krono/kit';
export function OrderbookPanel() {
return (
<Orderbook.Root
config={{ symbol: 'BTC/USD' }}
renderTable={(props) => (
<OrderbookTable.Root
columns={{
total: {
label: 'Total',
children: ({ value }) => formatDigits(value.total),
},
quantity: {
label: 'Quantity',
children: ({ value }) => formatDigits(value.quantity),
},
price: {
label: 'Price',
className: 'font-semibold',
children: ({ value }) => formatPrice(value.price, 4),
},
}}
{...props}
/>
)}
>
<OrderbookControls.Root>
<OrderbookControls.LiveBadge />
<OrderbookControls.Toolbar>
<OrderbookControls.PlaybackButtons />
<OrderbookControls.Timeline />
</OrderbookControls.Toolbar>
</OrderbookControls.Root>
</Orderbook.Root>
);
}Refer to the documentation for comprehensive technical details and workflow descriptions.
With additional development time, I would expand Krono's capabilities as follows:
The components and plugins could be provided by the community, enabling everyone to hook in customized functionality and share it with each other!
Krono? Krono = Kraken + Chronos (Χρόνος, personification of time) or Kronos (Κρόνος, Greek Titan of time). A nod to the time travel feature that lets you replay market history.