 Command

Pranesh Nikhar's personal site. Vim-style keybinds for navigation; theme + font pickers below.

Theme
 Font Body Code
Reader
Keybinds
Navigation
j / ↓ Next item k / ↑ Previous item g First item in region G Last item in region zz Center focused item h / l Move left/right region ] / [ Next/previous heading } / { Next/previous block d / u Half-page down/up
Layout
<zh> / <zl> Toggle left/right sidebar <zr> Toggle reader view <zj> / <zk> Focus main/navbar <S-h/j/k/l> Focus left/main/navbar/right ⌃H / ⌃L Focus left/right sidebar ⌃J / ⌃K Focus main/navbar ⇧C / ⇧E Collapse / expand all sections
Dialogs
⌃P / : Command palette ⌃X Theme picker / Search ? Show keybinds Esc / ⌃C Close dialog
History
n Next document b Previous document ⌃O History back ⌃I History forward
 Search
about: Pranesh Nikhar about/more: 🪪 More docs/test: Docs Test ideas: 💡 Ideas more: ➕ More now: Now posts: 📬 Posts projects: 📚 Projects webtui: Style posts/agentic-eda: 📊 AgenticEDA — Automated Exploratory Data Analysis with LangGraph posts/cap-theorem-outage-story: 🌐 CAP Theorem with a Real Outage Story posts/codepilot: ✈️ CodePilot — From Requirements to Deployable FastAPI Backend posts/common-auth-mistakes: 🔐 Common Auth Mistakes Developers Make posts/compiled-vs-jit-vs-interpreted: ⚡ Why Is X Language Fast or Slow? — Compiled vs JIT vs Interpreted posts/cs-degree-gaps: 🎓 Things CS Degrees Don't Teach You posts/cve-2025-breach-analysis: 🛡️ CVE-2025 Breach Analysis — Midnight Blizzard and the 16 Billion Credential Leak posts/fixloop: 🔄 FixLoop — AI Agent Loop for Self-Correcting Code posts/functional-vs-oop: ⚡ Functional vs OOP — Same Problem, Both Ways posts/getman: 🦾 Getman — Declarative API Tester for CLI & TUI posts/how-compilers-optimize: ⚙️ How Compilers Actually Optimize Your Code posts/http3-quic: ⚡ HTTP/3 and QUIC — Why They Matter posts/leetcode-vs-engineering: 🧩 LeetCode vs Real Engineering Skills posts/llm-from-scratch: 🧠 LLM from Scratch — GPT-Style Transformer in PyTorch posts/lsm-trees-bloom-filters: 🌳 LSM Trees & Bloom Filters — Production Deep Dive posts/mcp-workflow-builder: 🔧 MCP Workflow Builder — Visual DAG for MCP Tools posts/persistent-memory: 🧠 Persistent Memory — Long-Term Memory for AI Agents via MCP posts/playcli: 🎬 PlayCLI — Terminal Video Player posts/postgres-mvcc: 🗄️ How PostgreSQL MVCC Works — Multi-Version Concurrency Control Deep Dive posts/raft-consensus: ⛵ Raft Consensus Algorithm Explained posts/rust-borrow-checker: 🦀 Rust Borrow Checker — Catches Real Bugs posts/titan: 🤖 Titan — Terminal AI Coding Agent posts/what-happens-url: 🌐 What Happens Between Typing a URL and Seeing the Page posts/what-happens-when-you-run-a-program: ⚙️ What Actually Happens When You Run a Program posts/zero-knowledge-proofs: 🔐 Zero-Knowledge Proofs Explained Simply webtui/components/accordion: Accordion webtui/components/badge: Badge webtui/components/button: Button webtui/components/checkbox: Checkbox webtui/components/dialog: Dialog webtui/components/input: Input webtui/components/popover: Popover webtui/components/pre: Pre webtui/components/progress: Progress webtui/components/radio: Radio webtui/components/range: Range webtui/components/separator: Separator webtui/components/spinner: Spinner webtui/components/switch: Switch webtui/components/table: Table webtui/components/textarea: Textarea webtui/components/tooltip: Popover webtui/components/typography: Typography webtui/components/view: View webtui/contributing/contributing: Contributing webtui/contributing/contributing: ## Local Development webtui/contributing/contributing: ## Issues webtui/contributing/contributing: ## Pull Requests webtui/contributing/style-guide: Style Guide webtui/contributing/style-guide: ## CSS Units webtui/contributing/style-guide: ## Selectors webtui/contributing/style-guide: ## Documentation webtui/installation/astro: Astro webtui/installation/astro: ## Scoping webtui/installation/astro: ### Frontmatter Imports webtui/installation/astro: ### ‹style› tag webtui/installation/astro: ### Full Library Import webtui/installation/nextjs: Next.js webtui/installation/vite: Vite webtui/plugins/plugin-dev: Developing Plugins webtui/plugins/plugin-dev: ### Style Layers webtui/plugins/plugin-nf: Nerd Font Plugin webtui/plugins/theme-catppuccin: Catppuccin Theme webtui/plugins/theme-custom: Custom Theme webtui/plugins/theme-everforest: Everforest Theme webtui/plugins/theme-gruvbox: Gruvbox Theme webtui/plugins/theme-nord: Nord Theme webtui/plugins/theme-vitesse: Vitesse Theme webtui/start/ascii-boxes: ASCII Boxes webtui/start/changelog: Changelog webtui/start/installation: Installation webtui/start/installation: ## Installation webtui/start/installation: ## Using CSS webtui/start/installation: ## Using ESM webtui/start/installation: ## Using a CDN webtui/start/installation: ## Full Library Import webtui/start/installation: ### CSS webtui/start/installation: ### ESM webtui/start/installation: ### CDN webtui/start/intro: Introduction webtui/start/intro: ## Features webtui/start/plugins: Plugins webtui/start/plugins: ## Official Plugins webtui/start/plugins: ### Themes webtui/start/plugins: ## Community Plugins webtui/start/theming: Theming webtui/start/theming: ## CSS Variables webtui/start/theming: ### Font Styles webtui/start/theming: ### Colors webtui/start/theming: ### Light & Dark webtui/start/theming: ## Theme Plugins webtui/start/theming: ### Using Multiple Theme Accents webtui/start/tuis-vs-guis: TUIs vs GUIs webtui/start/tuis-vs-guis: ## Monospace Fonts webtui/start/tuis-vs-guis: ## Character Cells
 Theme Current: Light j/k or ↑/↓ + Enter

Changelog

0.1.6

Migration Guide from 0.1.5

You can no longer use the <progress> HTML element to display a styled progress bar due to incompatibilities with Gecko-based browsers. Use something like a <div> that supports CSS pseudo-elements.

Additionally, you can no longer use the value and max attributes to control the progress bar. Use the --progress-value and --progress-max instead.

<div is-="progress" style="--progress-value: 50;">50%</div>
<div is-="progress" style="--progress-value: 8; --progress-max: 10;">8/10</div>

To control the progress bar dynamically with JavaScript:

document
    .getElementById('my-progress-element')
    .style.setProperty('--progress-max', '100')

0.1.5

0.1.4

  • Hotfix: fixed input styles not getting applied

0.1.3

0.1.2

  • Switches appear dimmer when unchecked
  • Switches correctly show the track when the <input> stylesheet is imported
  • Added edge/bisecting caps to the Separator Component
  • Properly aligns Badges vertically
  • Removes an invalid initial-value property from the Dialog Component
  • Removes the markdown-like # markers prefixing heading elements <h1>-<h6>
  • Allows the --box-border-color CSS to be inherited and controlled with CSS variables
  • Allows the --table-border-color CSS to be inherited and controlled with CSS variables
  • Allows the --separator-color CSS to be inherited and controlled with CSS variables

Migration Guide from < 0.1.1

Heading Markers

The markdown-like # markers on heading elements <h1>-<h6> have been removed

If you intend to keep this behavior, use the following CSS code

h1::before {
    content: '# ';
}
h2::before {
    content: '## ';
}
h3::before {
    content: '### ';
}
h4::before {
    content: '#### ';
}
h5::before {
    content: '##### ';
}
h6::before {
    content: '###### ';
}

Inherited Color Variables

Prior to this release, --box-border-color, --table-border-color, and --separator-color always defaulted to --foreground0.

Now all child elements of an element with any of these CSS variables will inherit the value from its closest ancestor

<body style="--box-border-color: red;">
    <div box-="square">red border</div>
    <div box-="square" style="--box-border-color: blue;">blue border</div>
    <div style="--box-border-color: green;">
        <div box-="square">green border</div>
    </div>
</body>

The defaults for these variables can be controlled from :root

@layer base {
    :root {
        --box-border-color: var(--background1);
        --table-border-color: var(--background2);
        --separator-color: var(--cyan);
    }
}

0.1.1

  • Adds the Switch Component
  • Adds a half-block height variant to the Pre Component so it doesn’t appear so tall
  • Tooltips remain visible when you hover over their content

Migration Guide from 0.1.0

Pre Size

The default size for pre elements has been changed to make them shorter

1 <pre size-="small">Small</pre>
2 <pre>Default</pre>
3 <pre size-="large">Large (old default)</pre>
1
2 body {
3 display: flex;
4 flex-direction: column;
5 gap: 1ch;
6 }
7

0.1.0

Migration Guide from 0.0.x

Box Containment

In versions prior to 0.1.0, a second keyword was added to the box- utility property to control whether the box should pad the top and/or bottom lines

<div box-="square contain:!top"></div>
<div box-="square contain:!bottom"></div>
<div box-="square contain:none"></div>

This has been replaced with the shear- property

<div box-="square" shear-="top"></div>
<div box-="square" shear-="bottom"></div>
<div box-="square" shear-="both"></div>

Since the selector for box- no longer allows more than one keyword, most elements using the box- utility will be affected by this change

Button Variants

The default button variant has been changed to make the button shorter

1 <button size-="large">Large (old default)</button>
2 <button>Default</button>
3 <button size-="small">Small</button>
4
1
2 body {
3 display: flex;
4 align-items: flex-start;
5 gap: 1ch;
6 }
7

The default button variant is still three lines tall but appears to be shorter as its background doesn’t take up the full height of three lines

0.0.6

  • Added the Separator Component
  • Added the Radio Component

0.0.5

  • Fixed black lines between badges
  • Split out nerd font plugin to only provide the font

0.0.4

  • Introduced Checkbox Component

0.0.3

  • Introduced Popover Component

0.0.2

  • Introduced Dynamic Theme Approach

0.0.1

  • Initial Release
 praneshnikhar.site / webtui / start / changelog · Top 1:1