Immediate Mode GUI Library for Zig
Find a file
reugenio e56d3bd1a7 fix: Aplicar clipping a headers de tabla, no solo contenido
El clip se aplicaba solo al área de contenido (excluyendo header),
lo que permitía que el texto de los headers se extendiera fuera
de los límites de la tabla.

Ahora el clip abarca toda la tabla (bounds completos) antes de
dibujar headers y contenido.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 00:07:29 +01:00
docs docs: Plan de refactoring table.zig antes de dividir 2025-12-11 23:04:08 +01:00
examples 🔧 FIX: Compatibilidad Zig 0.15.2 2025-12-09 23:01:09 +01:00
ios feat: zcatgui v0.15.0 - Mobile & Web Backends 2025-12-09 18:20:13 +01:00
src fix: Aplicar clipping a headers de tabla, no solo contenido 2025-12-12 00:07:29 +01:00
web feat: zcatgui v0.15.0 - Mobile & Web Backends 2025-12-09 18:20:13 +01:00
.gitignore feat: zCatGui v0.1.0 - Initial project setup 2025-12-09 01:30:05 +01:00
build.zig feat: zcatgui v0.15.0 - Mobile & Web Backends 2025-12-09 18:20:13 +01:00
build.zig.zon 🔧 FIX: Compatibilidad Zig 0.15.2 2025-12-09 23:01:09 +01:00
CLAUDE.md docs: Renombrar TEAM_STANDARDS a teamdocs 2025-12-11 19:33:25 +01:00
README.md docs: Add comprehensive README.md 2025-12-09 14:01:01 +01:00
REFERENCE.md docs: Documentar soporte UTF-8 en renderizado de texto 2025-12-10 01:37:00 +01:00
VERIFIED_FEATURES.md docs: Add MainLoop to VERIFIED_FEATURES 2025-12-10 12:26:22 +01:00
ZIG_VERSION_NOTES.md docs: Renombrar TEAM_STANDARDS a teamdocs 2025-12-11 19:33:25 +01:00

zcatgui

Immediate Mode GUI Library for Zig - Software-rendered, cross-platform, SSH-compatible.

Zig License

Features

  • Immediate Mode - Explicit state, no callbacks, no threading issues
  • Software Rendering - Works everywhere, including over SSH (X11 forwarding)
  • Macro System - Record and replay user actions (unique feature)
  • 35 Widgets - From basic (Button, Label) to advanced (Table, Tree, Charts)
  • 5 Themes - Dark, Light, High Contrast, Nord, Dracula
  • Accessibility - ARIA-like roles and states for screen readers
  • Zero Runtime Dependencies - Only SDL2 for windowing

Quick Start

const zcatgui = @import("zcatgui");

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    const allocator = gpa.allocator();

    var ctx = try zcatgui.Context.init(allocator);
    defer ctx.deinit();

    while (ctx.running) {
        ctx.beginFrame();

        if (zcatgui.button(&ctx, "Click me!")) {
            // Handle click
        }

        ctx.endFrame();
    }
}

Widgets (35 total)

Basic

  • Label - Static text with alignment options
  • Button - Primary, normal, danger variants
  • Checkbox - Boolean toggle
  • RadioButton - Mutually exclusive selection

Input

  • TextInput - Single-line text entry with cursor
  • TextArea - Multi-line text editor
  • NumberInput - Numeric input with validation
  • Slider - Horizontal/vertical value slider
  • AutoComplete - ComboBox with fuzzy matching

Selection

  • Select - Dropdown selection
  • List - Scrollable selectable list
  • Tree - Hierarchical tree view

Data

  • Table - Editable with sorting, validation, dirty tracking
  • LineChart - Line graphs with multiple series
  • BarChart - Bar graphs with grouping
  • PieChart - Pie/donut charts with labels
  • Sparkline - Compact inline charts

Layout

  • Panel - Container with title, collapsible
  • HSplit/VSplit - Draggable split panels
  • Tabs - Tab container with keyboard navigation
  • ScrollArea - Scrollable content region
  • Modal - Dialog boxes (alert, confirm, input)

Feedback

  • Progress - Bar, circle, spinner with animations
  • Tooltip - Hover tooltips with smart positioning
  • Toast - Non-blocking notifications
  • Badge - Status labels with variants

Navigation

  • Menu - Dropdown menus with submenus
  • ContextMenu - Right-click menus

Special

  • Image - Image display with scaling
  • Icon - Icon rendering
  • ColorPicker - Color selection
  • Calendar - Date selection
  • RichText - Styled text rendering

Unique Features

Macro System

Record user actions as keyboard events and replay them:

var recorder = zcatgui.MacroRecorder.init(allocator);

// Start recording
recorder.start();

// ... user interacts with UI ...

// Stop and save
const events = recorder.stop();
try recorder.save("my_macro.macro");

// Later, replay
var player = zcatgui.MacroPlayer.init();
player.play(events, ctx.injectEvent, 50); // 50ms delay between events

Lego Panels Architecture

Build complex UIs from reusable autonomous panels:

const panels = zcatgui.panels;

var search_panel = panels.SearchFilterPanel.init(allocator, config);
var data_panel = panels.DataTablePanel.init(allocator, table_config);

// Panels communicate via DataManager
var manager = panels.DataManager.init(allocator);
manager.register("search", &search_panel);
manager.register("data", &data_panel);

Table with Dirty Tracking

Track changes for database sync:

var table_state = zcatgui.widgets.TableState.init();

// After user edits
if (table_state.isDirty()) {
    const changes = table_state.getDirtyRows();
    for (changes) |row_idx| {
        // Sync to database
    }
    table_state.clearDirty();
}

Themes

const theme = zcatgui.Style.ThemeManager.init();

// Switch themes at runtime
theme.setTheme(.dark);
theme.setTheme(.light);
theme.setTheme(.high_contrast);
theme.setTheme(.nord);
theme.setTheme(.dracula);

Performance

  • FrameArena - O(1) per-frame allocator with automatic reset
  • ObjectPool - Reuse frequently allocated objects
  • Virtual Scrolling - Handle millions of items efficiently
  • Dirty Rectangles - Partial redraws for efficiency

Building

# Build library
zig build

# Run tests
zig build test

# Build examples
zig build hello
zig build widgets-demo
zig build table-demo

Requirements

  • Zig 0.15.2
  • SDL2 (for windowing)

Project Structure

zcatgui/
├── src/
│   ├── zcatgui.zig      # Main entry point
│   ├── core/            # Context, Layout, Style, Input
│   ├── widgets/         # All 35 widgets
│   ├── render/          # Software renderer, fonts, effects
│   ├── backend/         # SDL2 backend
│   ├── macro/           # Macro recording/playback
│   ├── panels/          # Lego Panels architecture
│   └── utils/           # Performance utilities
├── examples/            # Demo applications
└── docs/               # Documentation

Comparison

Feature zcatgui DVUI Dear ImGui
Language Zig Zig C++
Rendering Software Software/GPU GPU
SSH Compatible Yes Partial No
Macro System Yes No No
Table Dirty Tracking Yes No No
Widgets 35 33 30+
  • zcatui - TUI (Terminal UI) library for Zig (sister project)

License

MIT License - See LICENSE for details.

Contributing

Issues and pull requests welcome at the project repository.