Repo of the Day
oliveryasuna/ink-frame: Grids of bordered boxes for Ink, where the borders actually join where they meet.
Published: Aug 30, 2026
Open repository ↗Grids of bordered boxes for Ink, where the borders actually join where they meet. - oliveryasuna/ink-frame
Summary
A monorepo of three small TypeScript packages that extend the Ink terminal UI library, focused on drawing grids of bordered boxes whose borders meet cleanly at corners and intersections. Each package has one responsibility, and they are designed to be used together or independently inside an Ink app.
What it is useful for
Engineers building terminal UIs in Ink who need panel-style layouts where adjacent bordered boxes share edges instead of overlapping or rendering double lines. The three packages cover different layers of that problem:
@oliveryasuna/ink-framerenders the actual grid of bordered boxes with joined borders.@oliveryasuna/ink-frame-scrolladds a scrollable viewport sized to a frame rect, for content longer than the visible area.@oliveryasuna/ink-frame-layoutlets you describe a grid declaratively (similar to CSS grid templates) and compile it into ink-frame rects.
A concrete example: a TUI dashboard with a header, a sidebar, and a main content area can declare the grid once with ink-frame-layout, render the joined borders with ink-frame, and put a long log stream inside the main panel using ink-frame-scroll.
How engineers can use it
The monorepo is a Bun workspace. To work on it locally, install the Bun version pinned in .bun-version, then run bun install from the repo root to install every workspace. From there, bunx tt runs the default verify task and bunx tt --help lists the rest. Tasks are defined with ts-task, and each package contributes its own build and lint tasks that get merged into the root runner.
For installing an individual package into an existing Ink project, the root README does not list the exact add command, so check each package's own README under packages/ink-frame, packages/ink-frame-scroll, and packages/ink-frame-layout for props, examples, and any peer-dependency requirements. Each package is published separately, so you can pull in only what you need.
Documented notes and limitations:
- The monorepo only covers the layout and border problem; rendering, theming, input handling, and other terminal concerns stay inside Ink.
- The root README explicitly states that fully AI-generated pull requests are not accepted, and only certain AI coding models (Opus 4.6+ and Codex 5.4+) are permitted, with human verification required.
- Because the packages are small, focused building blocks, expect to read each package's README to understand composition; the root README intentionally keeps details short.