Atlas / Skills / anomalyco / Opentui

OpentuiCAUTION

skills/anomalyco/opentui

OpenTUI is a library to build terminal user interfaces (TUI)

Verdict
CAUTION
Grade
D
Trust score
68 /100
Version
—
Hosts
2 documented
License
MIT
Stars
13,584
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

OpenTUI is a library to build terminal user interfaces.

  • It is written in Zig.
  • You write TypeScript directly or through React and Solid.
  • You arrange boxes and text with flexbox.
  • You add selects, inputs, and scroll boxes with keyboard and mouse controls.
  • You can play sounds, show images, and render 3D graphics.

OpenCode uses OpenTUI in production for millions of users.

Website | Documentation | Packages

Packages

  • @opentui/core - Native terminal UI library with TypeScript bindings.
  • @opentui/react - React renderer for building terminal user interfaces with OpenTUI Core.
  • @opentui/solid - Solid renderer for building terminal user interfaces with OpenTUI Core.
  • @opentui/keymap - Key binding and command routing library for terminal and browser applications.
  • @opentui/qrcode - QR code encoder and renderable with React and Solid surfaces.
  • @opentui/three - Three.js WebGPU renderer for OpenTUI.
  • @opentui/ssh - SSH server integration for OpenTUI applications.

Private packages

  • @opentui/native - Private workspace with the Zig implementation, native tests, and benchmarks.
  • @opentui/examples - Private workspace wi
Read from source at commit 7406e9f12f30OBSERVED · 2026-10-20
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

npx skills add https://opentui.com --skill opentui
npx skills add anomalyco/opentui
npx skills add https://opentui.com --skill opentui
npx skills add anomalyco/opentui
npm install @opentui/ssh
npx skills add https://opentui.com --skill opentui
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
codexmentioned
cursormentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: opentui
description: Build terminal UIs with OpenTUI. Covers Core, frameworks, components, application APIs, testing, extensions, integrations, deployment, and public API lookup.
---

# OpenTUI Skill

Canonical reference docs are in the sibling `docs/**/*.mdx` files.

Inside the OpenTUI repository, this skill root is `packages/web/src/content/`. The same files are available under
`packages/web/src/content/docs/**/*.mdx` from the repository root.

## Terminal layout defaults

Design for a terminal app, not a browser. Use the available columns and rows efficiently.

- Do not use gaps between adjacent UI panels.
- Do not add unnecessary margins or padding.
- Prefer compact, information-dense layouts over website-style card spacing.

## Path invariant

- `/docs` maps to `docs/getting-started.mdx`.
- `/docs/components` maps to `docs/components/overview.mdx`.
- Every other `/docs/<slug>` URL maps to `docs/<slug>.mdx` relative to this skill root.
- From the repository root, prepend `packages/web/src/content/` to each source path.
- `/docs/releases/<version>` maps to `docs/releases/<version>.md`, the release notes of that version.

## Versions

The docs describe the release or branch that this skill came from. Each release notes file lists what changed in that
release and links the pages it affects. When a project uses an older `@opentui/core` than the docs describe, read the
notes of the newer releases before you use an API, and prefer what the project's version provides.

## Choose packages

Use Core directly or choose a React or Solid binding for the UI. Recommend companion packages when their features fit
the task. Do not install every package by default.

- [`@opentui/core`](docs/core-concepts/renderer.mdx): use imperative renderables and events with `createCliRenderer()`.
- [`@opentui/react`](docs/bindings/react.mdx): use React components, JSX, and hooks with `createRoot()`.
- [`@opentui/solid`](docs/bindings/solid.mdx): use Solid components, JSX, and signals with `render()`.
- [`@opentui/keymap`](docs/keymap/overview.mdx): centralize keyboard bindings and named commands across views.
  The package supports focus-scoped layers, configurable shortcuts, and multi-key sequences.
  Start with `createDefaultOpenTuiKeymap()` from `@opentui/keymap/opentui`.
  Use `@opentui/keymap/react` or `@opentui/keymap/solid` for providers and hooks.
  [Direct keyboard events](docs/core-concepts/keyboard.mdx) or component-local bindings are enough for simple local input.
- [`@opentui/ssh`](docs/reference/ssh.mdx): serve a terminal UI to standard SSH clients without a local app installation.
  Import `createServer()` from the package root. Pass each session's renderer to Core, React, or Solid.
  The package has no framework subpaths. Read the SSH guide for authentication, middleware, and session cleanup.
- [`@opentui/qrcode`](docs/reference/qr-encoder.mdx): encode QR matrices, terminal text, or SVG, or display a
  `QRCodeRenderable`. For JSX, use `registerQRCode()` from `@opentui/qrcode/react` or `@opentui/qrcode/solid`. See the
  [QR code component](docs/components/qr-code.mdx).
- [`@opentui/three`](docs/reference/three.mdx): render Three.js WebGPU scenes in the terminal with `ThreeRenderable`.
  This integration supports only Bun. Before you choose it, check its runtime and dependency requirements.

See [Package entry points](docs/reference/package-entrypoints.mdx) for the full list of public imports.
The list includes testing, addons, host adapters, and runtime-module maps.
Use the [API and symbol index](docs/reference/api-index.mdx) to find exports.
Use public package entry points instead of source-file deep imports.

## Reading order by area

- Start: `/docs`, `/docs/getting-started/quickstart`, `/docs/getting-started/runtime-support`
- Frameworks: `/docs/bindings/react`, `/docs/bindings/solid`
- Core: `/docs/core-concepts/renderer`, `/docs/core-concepts/layout`, `/docs/core-concepts/keyboard`
- Components: `/docs/components`, `/docs/components/text`, `/docs/components/input`, `/docs/components/image`, `/docs/components/embedded-terminal`
- Application APIs: `/docs/core-concepts/clipboard`, `/docs/core-concepts/audio`, `/docs/application-apis/audio-streaming`, `/docs/application-apis/audio-capture`, `/docs/application-apis/animation`
- Test and debug: `/docs/core-concepts/testing`, `/docs/test-and-debug/troubleshooting`
- Extensions: `/docs/plugins/slots`, `/docs/extend/runtime-plugins`
- Keymap: `/docs/keymap/overview`
- Integrations: `/docs/reference/ssh`, `/docs/reference/three`, `/docs/reference/qr-encoder`
- Native: `/docs/native/overview`
- Ship: `/docs/ship/deploy`, `/docs/reference/standalone-executables`
- Reference: `/docs/reference/api-index`, `/docs/reference/package-entrypoints`, `/docs/reference/env-vars`, `/docs/reference/native-image`

## Quick routing by intent

| Intent(s)                                                                                                            | Start here                                  |
| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| `getting-started`, `intro`, `examples`, `agent-skill`                                                                | `docs/getting-started.mdx`                  |
| `installation`, `quickstart`                                                                                         | `docs/getting-started/quickstart.mdx`       |
| `runtime-support`, `bun`, `nodejs`, `native-artifacts`, `ffi`, `permissions`, `libc`, `runtime-assets`               | `docs/getting-started/runtime-support.mdx`  |
| `react`, `jsx`, `hooks`, `keyboard`, `paste`, `focus`, `blur`, `selection`, `animation`, `testing`                   | `docs/bindings/react.mdx`                   |
| `solid`, `jsx`, `signals`, `hooks`, `keyboard`, `animation`, `testing`                                               | `docs/bindings/
05

Trust audit

CAUTIONgrade D · trust 68/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (3 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/core/src/lib/tree-sitter/assets/javascript/tree-sitter-javascript.wasm
tree-sitter-javascript.wasm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/core/src/lib/tree-sitter/assets/markdown/tree-sitter-markdown.wasm
tree-sitter-markdown.wasm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/core/src/lib/tree-sitter/assets/markdown_inline/tree-sitter-markdown_inline.wasm
tree-sitter-markdown_inline.wasm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/core/src/lib/tree-sitter/assets/zig/tree-sitter-zig.wasm
tree-sitter-zig.wasm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
packages/core/src/tests/fixtures/audio/tone-750hz-48k-mono-1s.flac
tone-750hz-48k-mono-1s.flac
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.oxfmtrc.json
.oxfmtrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.oxlintrc.json
.oxlintrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.zig-version
.zig-version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_random · CWE-327, CWE-338
packages/ssh/src/tests/type/types.test.ts:118
const config: ServerConfig<AuthConfig> = { auth: Math.random() > 0.5 ? "open" : { password: () => true } }
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/ssh/examples/authorized-keys.ts:18
const AUTHORIZED_KEYS = process.env.AUTHORIZED_KEYS ?? "./authorized_keys"
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/ssh/examples/authorized-keys.ts:23
publicKey: { authorizedKeys: AUTHORIZED_KEYS },
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/ssh/examples/authorized-keys.ts:35
title: " @opentui/ssh · authorized_keys ",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/ssh/examples/authorized-keys.ts:44
box.add(new TextRenderable(renderer, { content: `allowlist: ${AUTHORIZED_KEYS}`, fg: "#94a3b8" }))
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/ssh/src/tests/integration/auth.test.ts:122
const file = join(dir, "authorized_keys")
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/build-core.yml:154
echo "${{ github.sha }}" > ../../.native-tests-passed
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/npm-latest-release.yml:96
cd ../../three/dist && npm pack --dry-run
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/npm-latest-release.yml:100
cd ../../qrcode/dist && npm pack --dry-run
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/npm-latest-release.yml:104
cd ../../react/dist && npm pack --dry-run
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/npm-latest-release.yml:108
cd ../../solid/dist && npm pack --dry-run
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/tests/audio-pcm-stream.test.ts:360
const remote = await audio.playStreamUrl(`http://127.0.0.1:${address.port}`, options)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/tests/audio-stream.test.ts:161
return `http://127.0.0.1:${address.port}`
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/tests/image-renderable.test.ts:682
renderable.source = `http://127.0.0.1:${address.port}/pending`
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/tests/image-renderable.test.ts:732
const base = `http://127.0.0.1:${address.port}`
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/tests/image-renderable.test.ts:781
source: `http://127.0.0.1:${address.port}/pending`,
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/native/src/tests/fixtures/display-p3-palette-alpha.png.base64:1
iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAMAAAAsPuSGAAABYGlDQ1BpY2MAACiRdZE/SMNAFMa//pEWW1Chg4NDBxWHFtQW7KCg7VCQIjUqqLgk1zQVkjRcUqSzi6Pg6qI4i47FoY7dBV1Ed3EQBBcp5zsjtoh9x9378XHf4907IJgzmeWGlwHL9rhSzCe3d3aTkRdE

Gates applied: no_behavioural_pass.

Audited 2026-10-20 · audit v0.4.1 · source sha 7406e9f12f30full audit observations/trust-audit/skill/anomalyco__opentui.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-207406e9f12f30CAUTIOND68first audit
07

Questions

What does the opentui — anomalyco/opentui skill do?

OpenTUI is a library to build terminal user interfaces (TUI)

Is opentui — anomalyco/opentui safe to install?

With care. The audit graded it D (68/100) and found 25 things worth knowing before you trust this skill, listed below with the exact line each was found on.

What can opentui — anomalyco/opentui access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does opentui — anomalyco/opentui work with?

Its documentation mentions codex and cursor. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (7406e9f12f30), read on 2026-10-20. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: Opentui](https://modelsatlas.com/skills/anomalyco/opentui/badge.svg)](https://modelsatlas.com/skills/anomalyco/opentui/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement