
Company News
Socket Joins New OpenJS Program to Fund Node.js Security Work
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.
@byteland/ink-scroll-bar
Advanced tools
A customizable, high-precision vertical scroll bar component for Ink CLI applications.
Two Rendering Modes:
Border Mode: Seamlessly integrates with container borders (replaces one side).
Inset Mode: Renders inside the content area, perfect for floating scroll bars.
autoHide: Completely hide the scroll bar when content fits the viewport.autoHide is false (default) and content fits, only the track is shown.Rich Styling:
single, double, round, bold, etc.).block, line, thick, dots).Flexible Integration:
ScrollBar component for custom layouts.ScrollBarBox wrapper for instant bordered containers with scroll bars.Auto-hide: Option to hide the scroll bar when content fits the viewport (inset mode).
npm install @byteland/ink-scroll-bar
ScrollBarBoxThe easiest way to use ink-scroll-bar is with the ScrollBarBox component. It wraps your content in a bordered box and handles the scroll bar positioning for you.
import React, { useState } from "react";
import { Text } from "ink";
import { ScrollBarBox } from "ink-scroll-bar";
const MyComponent = () => {
const [offset, setOffset] = useState(0);
const totalItems = 50;
const viewportHeight = 10;
return (
<ScrollBarBox
height={viewportHeight + 2} // +2 for borders
width={40}
borderStyle="single"
scrollBarPosition="right"
contentHeight={totalItems}
viewportHeight={viewportHeight}
scrollOffset={offset}
>
{/* Your scrollable content here */}
<Text>Item 1...</Text>
</ScrollBarBox>
);
};
ScrollBarFor more control over layout, use the standalone ScrollBar component.
In border mode, the scroll bar renders corner characters to connect with adjacent borders.
import { Box } from "ink";
import { ScrollBar } from "ink-scroll-bar";
<Box flexDirection="row">
{/* Content Box with right border removed */}
<Box borderStyle="single" borderRight={false}>
<Content />
</Box>
{/* ScrollBar completes the border */}
<ScrollBar
placement="right"
style="single"
contentHeight={100}
viewportHeight={20}
scrollOffset={offset}
/>
</Box>;
Inset mode renders without corners, suitable for placing inside a container.
<Box borderStyle="round" padding={1}>
<Box flexDirection="row">
<Content />
<ScrollBar
placement="inset"
style="block" // 'block', 'line', 'thick', 'dots'
color="cyan"
contentHeight={100}
viewportHeight={20}
scrollOffset={offset}
autoHide // Hide if content fits
/>
</Box>
</Box>
ScrollBar Props| Prop | Type | Default | Description |
|---|---|---|---|
contentHeight | number | Required | 📏 Total height of the scrollable content. |
viewportHeight | number | Required | 👁️ Height of the visible area. |
scrollOffset | number | Required | ⬇️ Current scroll position (0 to max). |
placement | 'left' | 'right' | 'inset' | 'right' | 📍 Rendering mode/position. |
style | ScrollBarStyle | 'single'/'block' | 🎨 Visual style (see below). |
color | string | undefined | 🌈 Color of the scroll bar characters. |
dimColor | boolean | false | 🌑 Whether to dim the scroll bar. |
autoHide | boolean | false | 👻 Hide when content fits (Inset mode only). If false, shows track when content fits. |
thumbChar | string | - | 👍 Custom thumb character. |
trackChar | string | - | 🛤️ Custom track character (Inset mode only). |
ScrollBarBox PropsInherits all Ink Box Props, plus:
| Prop | Type | Default | Description |
|---|---|---|---|
contentHeight | number | Required | 📏 Total height of the content. |
viewportHeight | number | Required | 👁️ Height of the viewport. |
scrollOffset | number | Required | ⬇️ Current scroll position. |
scrollBarPosition | 'left' | 'right' | 'right' | 📍 Which border to replace with scroll bar. |
scrollBarAutoHide | boolean | false | 👻 Hide thumb if content fits. |
thumbChar | string | - | 👍 Custom thumb character. |
Border Mode Styles (matches Ink borders):
single, double, round, bold, singleDouble, doubleSingle, classic, arrowInset Mode Styles:
block: █ thumb, ░ trackline: │ thumb, (blank) trackthick: ┃ thumb, ╏ trackdots: ● thumb, · trackMIT
FAQs
A vertical ScrollBar component for Ink CLI applications
The npm package @byteland/ink-scroll-bar receives a total of 16,660 weekly downloads. As such, @byteland/ink-scroll-bar popularity was classified as popular.
We found that @byteland/ink-scroll-bar demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.