gogpu/ui Roadmap

August 3, 2026 · View on GitHub

Version: 0.1.50 Updated: August 2026 Go Version: 1.25+


Vision

gogpu/ui is the first enterprise-grade GUI toolkit for Go — zero CGO, GPU-accelerated, signal-driven.

Go has waited 17 years for a professional graphics ecosystem. We're building it: 1.14M+ LOC across the gogpu ecosystem, all platforms, native menus and dialogs, triple-backend WebGPU, shader compiler, and a complete GUI toolkit.

Target applications:

  • IDEs — GoLand/VS Code class (docking, tabs, tree, toolbar, menus, code editor)
  • Design tools — Photoshop/Figma class (canvas, layers, GPU compute)
  • CAD/scientific — 3D viewport, data visualization, GPU-accelerated compute
  • Professional dashboards — real-time charts, tables, data grids
  • Desktop apps — Chrome/Electron replacement with native performance

Key differentiators:

  • Pure Go by default (zero CGO), Rust backend optional via -tags rust (ADR-038 triple-backend)
  • WebGPU-first rendering via gogpu/wgpu (Vulkan/Metal/DX12/GLES/Software/Browser)
  • Signals-based reactive state (coregx/signals — hybrid push-pull, zero glitch)
  • Layer Tree compositor with damage-aware blit (Flutter/Chrome patterns)
  • Four design systems: Material 3, DevTools (JetBrains), Fluent, Cupertino
  • Polymorphic Content[C] pattern (CDK — inspired by taiga-family/polymorpheus)
  • Pluggable Painter architecture — design-system-agnostic widgets
  • Enterprise features: docking, virtualization, accessibility, i18n, drag & drop

Current Status

MetricValue
Packages56+
Total LOC (scc)~207,000+
Test Functions~7,500+
Test Coverage97%+
Linter Issues0
Interactive Widgets27
Design Systems4 (M3, DevTools, Fluent, Cupertino)
Painters70 (24 + 24 + 11 + 11)
Layout CachePer-widget (ADR-032), O(affected subtree)
Render PipelineUnified draw queue (ADR-051/052), backend-agnostic

Versioning Strategy

Core Principle: Stay on v0.x.x

v0.x.x  → Active development (current — breaking changes OK)
v1.0.0  → ONLY when API stable for 1+ year (target: Dec 2026)
v2.0.0  → AVOID (requires /v2 import path)

Version Progression:

v0.0.x  → Phase 0 Foundation               ✅ COMPLETE
v0.1.0  → Phase 1 MVP                      ✅ COMPLETE (Mar 2026)
v0.1.x  → Phase 1.5 Extensibility          ✅ COMPLETE
v0.2.0  → Phase 2 Beta                     ✅ COMPLETE
v0.2.x  → Phase 2.5 Signals Integration    ✅ COMPLETE
v0.3.0  → Phase 3 RC                       ✅ COMPLETE
v0.4.0  → Phase 4 v1.0 features            IN PROGRESS (~90%)
v0.9.0  → Pre-1.0 API freeze
v0.10+  → Stabilization
v1.0.0  → Production (target: Dec 2026)

API Compatibility Patterns:

PatternPurpose
Functional OptionsExtend API without breaking changes
Interface ExtensionOptional capabilities via type assertion
Config StructsNew fields with zero-value defaults
internal/Implementation details (can change)
Pluggable PaintersDesign system independence
Content[C]Polymorphic content rendering

Completed Phases

Phase 0: Foundation ✅

Core packages: geometry, event, widget, internal/render, internal/layout.

Phase 1: MVP (v0.1.0) ✅

Signals integration, basic primitives (Box, Text, Image), public layout API, theme system, window integration.

Phase 1.5: Extensibility ✅

Widget registry, public layout API, theme system + extensions, plugin system with dependency resolution.

Phase 2: Beta ✅

Interactive widgets (button, checkbox, radio, textfield, dropdown), overlay infrastructure, focus management, Material Design 3 (HCT color science, 21 painters), CDK Content[C] pattern, ThemeScope.

Phase 2.5: Signals Integration ✅

Push-based reactive state for all widgets. 4-level priority (ReadonlySignal > Signal > Fn > Static). Two-way bindings for stateful widgets.

Phase 3: Release Candidate ✅

Slider, Dialog, Animation engine (Tween, Spring, M3 motion), ScrollView, TabView, ListView (virtualized), GridView, LineChart, ProgressBar, Collapsible, SplitView, Popover/Tooltip, Transitions, Dirty region tracking.

Phase 4: Production Features — In Progress (~90%)

Completed:

FeatureDescription
Circular progressDeterminate arc + indeterminate spinner
TreeViewHierarchical, expand/collapse, virtualized
DataTableSortable columns, fixed header, virtualized rows
ToolbarIcon buttons, separators, spacers
MenuMenuBar + ContextMenu, submenus, shortcuts
DockingIDE-style panels, border layout, tabbed groups
Drag & DropDragSource, DropTarget, Manager
DevTools themeJetBrains Int UI — 22 painters, dark/light
Fluent themeMicrosoft Fluent Design — 9 painters
Cupertino themeApple HIG — 9 painters
Font registryCSS weight matching (W3C spec)
Icon systemSVG icons, 2-level cache, DPI-aware
i18nLocale, CLDR plural rules, RTL, bundles
Offscreen rendererHeadless widget → *image.RGBA
Layer Tree compositorFlutter pipeline (ADR-007)
Per-boundary GPU texturesMSAA offscreen, DrawChild skip
Persistent Layer Tree97.9% fewer allocs
O(1) frame skipFlat dirty set, 0% GPU idle
Multi-rect damagePer-draw scissor, LoadOpLoad
Overlay boundary pipelineDropdown/dialog via Layer Tree
Custom font pipelineFontRegistry, StyledTextDrawer
PointerCapturerADR-031, widget-level mouse capture
34 integration testsMulti-frame lifecycle, visibility matrix
Badge widgetNotification badge (dot/count), signal bindings
Chip widgetAction/filter chip (M3 spec), toggleable, two-way signal
Layout cache (ADR-032)Per-widget caching via LayoutChild, O(n)→O(subtree)
Animation before layout (GAP-3)Flutter BeginFrame pattern, layout = pure function
Stripe widgetAlternating row backgrounds
TitleBar widgetWindow title bar widget

Remaining Phase 4:

TaskPriorityStatus
GPU spinner <3%P0scheduler.SetOnDirty lifecycle
ListView hover rebuildP1Painter pattern: hover = repaint only
Texture GCP1Prune orphaned boundaryTextures
API review + freezeP0Pre-1.0 audit

Future Roadmap

Phase 5: New Widgets (v0.5.x — Q3 2026)

Essential widgets for production applications.

WidgetDescriptionComplexityUse Case
RichTextStyled text with bold/italic/links, inline formattingMediumContent display, help text
NumberFieldNumeric input: spinner buttons, range, stepLowForms, settings
ToggleSwitchiOS/Material on/off switch with animationLowSettings, preferences
BadgeNotification badge✅ Done (v0.1.35)
ChipFilter/action chips✅ Done (v0.1.35)
SegmentedControlToggle button group (iOS/Fluent style)MediumView switching
SearchFieldText input with search icon, clear, suggestionsMediumData filtering

Phase 6: Advanced Widgets (v0.6.x — Q4 2026)

Complex widgets for professional applications.

WidgetDescriptionComplexityUse Case
DatePickerCalendar popup, date ranges, locale-awareHighForms, scheduling
TimePickerHour/minute selection, AM/PM, 24hMediumScheduling
ColorPickerColor wheel/palette, HSL/RGB, opacityHighDesign tools
AccordionMutually exclusive collapsible sectionsLowSettings, FAQ
BreadcrumbNavigation trail with separatorsLowFile browser, navigation
StepperMulti-step wizard with progressMediumOnboarding, forms
SheetBottom/side sheet overlay (M3 spec)MediumMobile-style panels
NavigationRailVertical navigation (M3 spec)MediumApp navigation

Phase 7: IDE & Professional Widgets (v0.7.x — Q1 2027)

Widgets that enable building professional tools.

WidgetDescriptionComplexityUse Case
CodeEditorSyntax-highlighted editing, PieceTable, GPU textVery HighIDEs, config editors
TerminalTerminal emulator widget, ANSI codesVery HighIDE terminal, DevOps
CanvasUser-controlled drawing surface, pan/zoomMediumDesign tools, diagrams
CarouselHorizontal scroll with snap pointsMediumImage galleries
VirtualTableDataTable + million-row virtualizationHighData analysis, logs

The Code Editor is being designed as a separate gogpu/editor module (ADR-028) with PieceTable, GPU text rendering, and syntax highlighting. Enterprise references: VS Code PieceTree, Monaco MVVM, Scintilla, Xi-editor Rope, Zed GPUI, CodeMirror 6, cosmic-text.

Phase 8: Platform Integration (v0.8.x — Q1-Q2 2027)

Platform-specific features for native feel.

FeatureDescriptionPriority
Accessibility adaptersWindows UIA, Linux AT-SPI2, macOS NSAccessibilityP1
System theme detectionAuto light/dark switching from OSP1
Native file dialogsOpen/Save/Folder via system dialogsP1
Clipboard rich contentHTML/RTF clipboard supportP2
IME supportInput method for CJK languagesP2
Touch/gesture inputPinch, swipe, long pressP2

Phase 9: API Freeze & Stabilization (v0.9.x — Q2-Q3 2027)

TaskDescription
API auditReview every public type, method, option
Breaking change sweepLast chance for naming/signature fixes
Migration guidev0.x → v1.0 upgrade path
Documentation polishComplete godoc, tutorials, cookbook
Performance profilingMemory, CPU, GPU benchmarks per widget
Fuzz testingEdge cases in layout, event dispatch, signals

v1.0.0 — Production Release (Target: Dec 2026 → Hard Deadline: Nov 2027)

Success criteria:

  • API stable for 6+ months without breaking changes
  • 30+ widgets with all 4 design system painters
  • WCAG 2.1 AA accessibility compliance
  • 60fps with 10,000 widgets
  • <100ms startup time
  • Complete documentation and migration guides
  • Listed in awesome-go ✅ (already achieved)

Rendering Performance Roadmap (ADR-007)

Architecture: Hybrid CPU+GPU — industry standard (Chrome/Skia, Flutter, GTK4, Qt). CPU text atlas + GPU shapes + GPU compositor. Validated by source-level analysis of 8 engines.

Current Performance (Intel Iris Xe, v0.1.29)

MetricBefore (v0.1.14)Current
GPU (static UI, no animations)8%0%
GPU (spinner visible, 30fps)8%10%
GPU (spinner offscreen)8%0%
GPU readback per frame00
Render passes (idle)10 (frame skip)
Layer allocs per frame (200 boundaries)61313 (persistent tree)

Completed Rendering Phases

PhaseWhatStatus
Phase 1Zero-readback compositor (FlushPixmap, FlushGPUWithView)
Phase 2Scene composition (RepaintBoundary, GPU SDF, granular invalidation)
Phase 3Per-boundary GPU textures (MSAA offscreen, DrawChild skip)
Phase 4Layer Tree + Damage-aware blit (persistent tree, multi-rect scissor, LoadOpLoad)

Unified Draw Queue (ADR-051/052) — v0.1.45

gg v0.50.6 introduced a backend-agnostic draw queue (ADR-051) and three-tier clip architecture (ADR-052). All rendering commands — shapes, text, GPU textures — flow through a single dispatch pipeline. On GPU backends, commands are batched into scissor groups and dispatched via render passes. On software adapters (strategyRasterAtlas), the same commands dispatch through CPU rasterizer paths.

This architectural change ensures correctness on all backends — the software renderer uses the same Layer Tree compositor, offscreen boundary textures, and damage-aware blit as GPU backends. Performance optimization is the next step.

Software Backend Optimization Roadmap

The software backend (GOGPU_GRAPHICS_API=software) is architecturally correct but requires performance work. The CPU renders every pixel via a SPIR-V interpreter — inherently slower than GPU parallel execution. Planned optimization tiers:

TierWhatExpected SpeedupStatus
1. gg direct CPU rasterizationgg already has fast native Go CPU rasterizers (AnalyticFiller from tiny-skia/Skia, SparseStrips 4×4 from Vello, TileCompute 16×16 from Vello 9-stage). Smart dispatch: shapes/text rendered by gg directly, only texture compositing through software HAL. Highest impact, minimal changes.10-50xResearch (ADR-053)
2. naga Go+SIMD backendWGSL → naga IR → generated Go + goexperiment.simd (AVX-512/NEON). Replaces SPIR-V interpreter entirely for shader execution. Reference: GoMLX PackGEMM 14x on MatMul.100x+Backlog (NAGA-FEAT-004)
3. SPIR-V interpreter SIMDgoexperiment.simd Float32x4 for vec4 ops in existing interpreter. ~500 LOC change. Interim solution before naga Go backend.2-4xBacklog (FEAT-SW-008)
4. Multi-threaded CPU dispatchParallel dispatch for independent boundary textures. Each boundary = isolated pixmap → no shared state → trivially parallel.2-8x (multi-core)Design

Community contributions welcome — profiling reports, optimization PRs, SIMD expertise. See issue #158.

Future Rendering

PhaseWhatTarget
Phase 5Spinner GPU <3% (scheduler.SetOnDirty lifecycle)v0.4.x
Phase 6Vello compute GPU path rendering (9-stage compute pipeline)v0.7.x
Phase 7Partial present (VK_KHR_incremental_present, DX12 partial swap)v0.8.x

Performance Targets

MetricCurrentv1.0 Target
GPU % (static UI)0%0%
GPU % (spinner)10%<3%
GPU % (spinner offscreen)0%0%
Startup time~200ms<100ms
Memory per widget~2KB<1KB
10K widgets @ 60fpsTarget

Ecosystem Integration Roadmap

gogpu/ui is one part of a larger ecosystem. Future integration points:

IntegrationDescriptionTimeline
AndroidAndroid/arm64 Vulkan support (wgpu#268). Full Vulkan WSI, Rust wgpu v29 parity, ANativeWindow lifecycle. Contributed by @besmpl for Hearth game engine.In Review
gogpu/computeGPU compute via ComputeProvider (Born ML pattern)Q3 2026
gogpu/editorNative code editor widget (ADR-028)Q4 2026
gogpu/g3d3D viewport widget for CAD/games2027
Browser/WASMRun ui in browser via wgpu Browser backend (ADR-038)Q4 2026
composeMulti-process widget composition (Unix socket, hot-plug)Available now
Born MLML model inference results in ui widgetsAvailable now

Cascade Release Order

naga (shader compiler)
  → wgpu (WebGPU HAL)
    → gpucontext (interfaces)
      → gogpu (windowing) + gg (2D graphics)
        → ui (GUI toolkit)

All releases must follow this cascade. Breaking changes in lower layers require coordinated releases.


Design Philosophy

What We Build On

PatternSourceOur Implementation
Layer Tree compositorFlutter, Chrome, Qt6, Androidcompositor/ package
Pluggable PaintersAll design systems (Swing L&F, Qt styles)Painter interfaces per widget
Polymorphic Content[C]taiga-family/polymorpheuscdk/ package
Signal-driven reactivityAngular Signals, SolidJS, Preactstate/ + coregx/signals
Functional OptionsGo community best practiceAll widget constructors
RepaintBoundaryFlutter RenderObject.isRepaintBoundarywidget.WidgetBase property
Damage-aware blitChrome DamageTracker, Wayland damagedesktop/ + gg + wgpu stack

What We Don't Do

  • No webview — native GPU rendering, not HTML/CSS/JS
  • No CGO — pure Go, compiles on any platform Go supports
  • No runtime code generation — all types resolved at compile time
  • No global state — instance-based (Scheduler, FocusManager, App)
  • No implicit side effects — explicit lifecycle (Mount/Unmount)
  • No backend abstraction in ui — rendering is always gg → wgpu (ADR-009)

Dependencies

DependencyVersionPurpose
gogpu/ggv0.50.62D rendering + unified draw queue (ADR-051/052)
gogpu/gogpuv0.44.8Windowing, input (examples)
gogpu/gpucontextv0.21.1Shared interfaces (opaque struct tokens)
coregx/signalsv0.1.1Reactive state management
golang.org/x/imagev0.44.0Inter font (standard)

Indirect: gogpu/wgpu v0.30.21, gogpu/naga v0.17.15, gogpu/gputypes v0.5.1, go-text/typesetting v0.3.4


Community & Contributions

How to Contribute

  • Test — run examples on different GPUs and platforms, report issues
  • API feedback — suggest improvements to widget APIs
  • Widgets — implement new widgets following the Painter pattern
  • Design systems — create painters for your design system
  • Documentation — improve godoc, write tutorials
  • Spread the word — articles, talks, social media

Community Projects Using ui

ProjectAuthorDescription
KiGo@AgentNemo00Visual programming tool
PupSeek IDEprivateAI-powered IDE
Petri Net IDE@paulie-gProcess modeling tool
f4@unxedText editor

ResourceURL
gogpu Organizationhttps://github.com/gogpu
UI Repositoryhttps://github.com/gogpu/ui
Discussionshttps://github.com/orgs/gogpu/discussions/18
awesome-go listinghttps://github.com/avelino/awesome-go
Kanban Tasksdocs/dev/kanban/
Researchdocs/dev/research/
ADRsdocs/dev/architecture/

This roadmap evolves with the project. Last updated: July 2026.