Catalog npm
Back to packageRELEASE DETAILS

0.5.0

npm

1ch

Terminal UI rendered to fixed character grids via a custom HTML element

Published21 Feb 2026
Direct dependencies3
Transitive dependenciesNot calculated

README

Current package documentation

1ch

Character-grid UI that runs in the browser. One <term-ui> element turns semantic HTML into a fixed-width terminal render -- boxes, tables, charts, progress bars, status lines -- all from standard tags.

1ch

Playground · Docs · npm

Install

npm install 1ch

Use

Register once, then forget about it:

import { registerTermUIElement } from "1ch";
import "1ch/style.css";
registerTermUIElement();

Drop it in with your preferred reactivity provider:

function DeployPanel() {
  const [build, setBuild] = useState(0);
  const { metrics } = useMetrics();

  return (
    <term-ui width="60" mode="dark">
      <section gap="1">
        <article title="deploy v2.4.1">
          <progress label="build" value={build} max="100"></progress>
          <progress label="tests" value="94" max="100"></progress>
        </article>
        <figure height="4" fill>
          {metrics.map(v => <data value={v} />)}
        </figure>
        <nav>
          <button onClick={() => deploy()}>deploy</button>
          <button onClick={() => rollback()}>rollback</button>
        </nav>
        <footer left=" healthy" right="64s ago "></footer>
      </section>
    </term-ui>
  );
}

<article> is a box. <progress> is a bar. <figure> is a chart. <nav> lays out horizontally. <footer> is a status line. No wrapper components, no special syntax -- just HTML that happens to render as a terminal.

Why

Tables draw with │─┼. Progress bars fill with ████░░░░. Buttons are [ deploy ]. Everything snaps to a character grid and it just looks right.

Who needs designs for internal tools when a character grid gives you a clean UI for free? Dashboards, admin panels, monitoring views, CLI-style apps -- just write the HTML and it looks like something you'd actually want to use.

Your CSS still works -- display: grid, gap, grid-template-columns get picked up from getComputedStyle and mapped to the grid. It's a web component, so React, Vue, Svelte, htmx, plain HTML -- whatever. onClick on a <button> fires like you'd expect.

Zero dependencies. Also does markdown and JSON (source-format="markdown" on the element).

Quick reference

ElementBecomes
<article title="X">box
<figure>chart (text content, <data> children, or values)
<footer left="X" right="Y">status bar
<nav>horizontal stack
<progress>bar
<hr> / <hr label="X">separator / divider
<pre>code block
<table>table
<section>, <div>container (layout from CSS)

Need custom behavior? Register your own compiler via registerHtmlTagCompiler(). Full details in the docs.

License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 3

Native requirements
3 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
tsup
Environment
{
  "local_name": "tsup",
  "alias": false,
  "peer_metadata": null
}
^8development
@types/bun
Environment
{
  "local_name": "@types/bun",
  "alias": false,
  "peer_metadata": null
}
latestdevelopment
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
^5development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "edfc58cd5b237128ac9c77147ba42599c8371f27",
  "tarball": "https://registry.npmjs.org/1ch/-/1ch-0.5.0.tgz",
  "fileCount": 6,
  "integrity": "sha512-9EkpDE67n5FNfoPJK2Ay6+yRqhIePEIBtj+C3NbFBEKhU8uZ4CPqFNKW5z4zfAE3ufqy7w8XqG6ySPsbEnqqDg==",
  "signatures": [
    {
      "sig": "MEUCIQD2S/65Ft6qq1rrU/FJTPoVNPCCQKC9vrosfpYH9ncQtwIgSdpYJ8hq+6EhbU0sqsKyLKfGhhtEX4pqCFVruNENzN4=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 366572
}

Repository

PENDING
twoabove/1ch

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:26 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:daa04ef9561dd8fb817fabebf188e6f2fc727cda38ffacf92e08313981bc3481

Other collected versions

0.6.012 Mar0.4.017 Feb0.3.014 Feb0.2.012 Feb0.1.011 FebView all collected versions →