 Command
Site Info

WebTUI docs and showcase for the terminal-inspired CSS library.

Keybinds
⌃K Command palette
/ Search
? Show keybinds
Theme
Theme
 Search
about: 🪪 About landing: Landing ideas: 💡 Ideas more: ➕ More now: Now posts: 📬 Posts projects: 📚 Projects talks: 🎙️ Talks posts/2025: 📆 2025 posts/ai-for-physics: ⚛️ AI for Physics posts/auroragpt: 🤖 AuroraGPT posts/ezpz-at-alcf: 🍋 ezpz @ ALCF posts/dope-slides: 💅 How to Make Dope Slides posts/ezpz-v1: 📝 ezpz-v1 posts/jupyter: 📗 Jupyter posts/resume: 🧑🏻‍💻 Sam Foreman’s Résumé posts/svgbob: 🫥 svgbob posts/torchtune-aurora: 🪛 Torchtune on Aurora posts/torchtune-patch-aurora: 🚑 Torchtune Patch on Aurora talks/auroragpt-siam25: AuroraGPT talks/ai-for-science-2024: Parallel Training Methods talks/alcf-hpc-workshop-2024/alcf-hpc-workshop-2024: Deep Learning and Foundation Models at Scale talks/aurora-gpt-fm-for-electric-grid/auroragpt-fm-for-electric-grid: AuroraGPT: Foundation Models for Science talks/hpc-user-forum/auroragpt: AuroraGPT talks/incite-hackathon-2025: ALCF Incite Hackathon 2025 talks/llms-at-scale: Training LLMs at Scale talks/llms-on-polaris: Training LLMs on Polaris talks/openskai25: Open SkAI2025 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/pre: Pre webtui/components/popover: Popover webtui/components/progress: Progress webtui/components/radio: Radio webtui/components/range: Range webtui/components/spinner: Spinner webtui/components/separator: Separator 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/plugins/plugin-nf: Nerd Font Plugin webtui/plugins/theme-catppuccin: Catppuccin Theme webtui/plugins/theme-everforest: Everforest Theme webtui/plugins/theme-gruvbox: Gruvbox Theme webtui/plugins/theme-nord: Nord Theme 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/plugins/plugin-dev: Developing Plugins webtui/plugins/plugin-dev: ### Style Layers webtui/plugins/theme-vitesse: Vitesse Theme webtui/start/ascii-boxes: ASCII Boxes webtui/start/changelog: Changelog webtui/start/intro: Introduction webtui/start/intro: ## Features webtui/installation/nextjs: Next.js webtui/installation/vite: Vite webtui/start/plugins: Plugins webtui/start/plugins: ## Official Plugins webtui/start/plugins: ### Themes webtui/start/plugins: ## Community Plugins webtui/start/tuis-vs-guis: TUIs vs GUIs webtui/start/tuis-vs-guis: ## Monospace Fonts webtui/start/tuis-vs-guis: ## Character Cells posts/2025/06: 06 posts/ai-for-physics/diffusion: 🎲 MCMC + Diffusion Sampling posts/ai-for-physics/l2hmc-qcd: 🎢 L2HMC for LQCD 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/installation/astro: Astro webtui/installation/astro: ## Scoping webtui/installation/astro: ### Frontmatter Imports webtui/installation/astro: ### <style> tag webtui/installation/astro: ### Full Library Import 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 posts/auroragpt/aurora-gpt: 🏎️ Megatron-DeepSpeed on Intel XPU posts/auroragpt/checkpoints: 💾 Converting Checkpoints posts/auroragpt/determinstic-flash-attn/deterministic-flash-attn: 🎰 Deterministic `flash-attn` posts/auroragpt/flash-attn-sunspot: 📸 `flash-attn` on Sunspot posts/auroragpt/mpi4py-reproducer: 🐛 `mpi4py` bug on Sunspot posts/auroragpt/long-sequences: 🚂 Loooooooong Sequence Lengths posts/auroragpt/spike-skipper: 🏔️ Spike Skipper posts/auroragpt/startup-times: 🐢 Starting Up Distributed Training on Aurora posts/jupyter/test: 🏁 `l2hmc` Example: 2D $U(1)$ posts/jupyter/l2hmc-4dsu3: 🔳 `l2hmc-qcd` Example: 4D SU(3) talks/auroragpt/alcf-hpc-workshop-2024/auroragpt-alcf-hands-on-hpc-workshop-2024: AuroraGPT: ANL's General Purpose Scientific LLM talks/incite-hackathon-2025/auroragpt: LLMs on Aurora: Overview talks/incite-hackathon-2025/ezpz: LLMs on Aurora: Hands-On talks/openskai25/ai4science: Scientific AI at Scale: AuroraGPT talks/openskai25/training: Scientific AI at Scale: Distributed Training posts/2025/05/03: 🚧 Frameworks Issue with numpy \> 2 posts/2025/04/28: 🔥 Building PyTorch 2.6 from Source on Aurora posts/2025/06/01: 📰 Nice Headings posts/2025/06/02: 🧜‍♀️ Mermaid posts/2025/06/14: 🏗️ Building PyTorch 2.8 from Source on Aurora posts/2025/09/17: 📊 `pbs-tui`: TUI for PBS Job Scheduler Monitoring posts/2025/09/12: 🍹 BlendCorpus + TorchTitan @ ALCF posts/2025/10/06: 🎨 Mixing Between Distributions While Training posts/2025/11/12: 🧊 Cooling Down Checkpoints: Best Practices for Model Evaluation posts/2026/01/07: 🎉 Happy New Year! posts/2026/01/10: 🍋 ezpz posts/ai-for-physics/l2hmc-qcd/2du1: 🎢 l2hmc-qcd Example: 2D U(1) posts/ai-for-physics/l2hmc-qcd/4dsu3nb/index-broken: 🕸️ l2hmc-qcd Example: 4D SU(3) posts/jupyter/l2hmc/4dsu3: 🔳 l2hmc-qcd Example: 4D SU(3) talks/2025/09/24: Training Foundation Models on Supercomputers talks/2025/10/08: AERIS: Argonne's Earth Systems Model talks/2025/10/15: Training Foundation Models on Supercomputers talks/2025/10/24: Training Foundation Models on Supercomputers talks/2025/12/16: AuroraGPT: Training Foundation Models on Supercomputers posts/drafts/2025/09/22: 📝 2025 Annual Report
 Theme

View

Displays a TUI-accurate view that automatically rounds its width and height to the nearest ch and lh units respectively

Useful for building tiled UIs or a partial GUI/TUI application

1 <div class="tile" is-="view">
2 <div is-="view-content">root@Macbook-Pro ~# yes no<br/>no<br/>no<br/>no<br/>no<br/>no<br/>no<br/>no<br/>no<br/>no<br/>no<br/>no<br/></div>
3 </div>
4 <div class="tile" is-="view">
5 <div is-="view-content">root@Macbook-Pro ~# emacs<br/>zsh: command not found: emacs</div>
6 </div>
1
2 body {
3 display: flex;
4 flex-direction: row;
5 flex-grow: 1;
6 padding-left: 10px;
7 padding-right: 10px;
8 padding-top: 10px;
9 padding-bottom: 10px;
10 gap: 10px;
11 background: linear-gradient(45deg, #5f5ba5, #8c59a5);
12 height: 100vh;
13 animation: pad 5s infinite linear;
14 }
15 .tile {
16 flex: 1 1 0;
17 background: rgba(0, 0, 0, 0.5);
18 border-radius: 10px;
19 }
20 [is-='view-content'] {
21 background: rgba(0, 0, 0, 0.5);
22 color: white;
23 }
24 @keyframes pad {
25 0% {
26 padding-left: 10px;
27 padding-right: 10px;
28 padding-top: 10px;
29 padding-bottom: 10px;
30 gap: 10px;
31 }
32 25% {
33 padding-left: 50px;
34 padding-right: 50px;
35 padding-top: 10px;
36 padding-bottom: 10px;
37 gap: 50px;
38 }
39 50% {
40 padding-left: 10px;
41 padding-right: 10px;
42 padding-top: 10px;
43 padding-bottom: 10px;
44 gap: 10px;
45 }
46 75% {
47 padding-left: 10px;
48 padding-right: 10px;
49 padding-top: 50px;
50 padding-bottom: 50px;
51 gap: 10px;
52 }
53 100% {
54 padding-left: 10px;
55 padding-right: 10px;
56 padding-top: 10px;
57 padding-bottom: 10px;
58 gap: 10px;
59 }
60 }
61

Import

@import '@webtui/css/components/view.css';

Usage

<div is-="view">
    <div is-="view-content">
        <!-- TUI contents -->
    </div>
</div>

Examples

Basic usage

1 <div is-="view" id="view-outer">
2 <div is-="view-content" id="view-inner">root@Macbook-Pro ~# cowsay moÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖoÖ</div>
3 </div>
1
2 body {
3 height: 100vh;
4 display: flex;
5 flex-direction: column;
6 background: var(--background1);
7 }
8 #view-outer {
9 flex: 1 1 0;
10 }
11 #view-inner {
12 background: var(--background2);
13 }
14

Reference

Extending

To extend the View stylesheet, define a CSS rule on the components layer

@layer components {
    [is-~='view'] {
        /* ... */
    }

    [is-~='view-content'] {
        /* ... */
    }
}