gpui-context

GPUI uses different context types for different scenarios:

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "gpui-context" with this command: npx skills add longbridge/gpui-component/longbridge-gpui-component-gpui-context

Overview

GPUI uses different context types for different scenarios:

Context Types:

  • App : Global app state, entity creation

  • Window : Window-specific operations, painting, layout

  • Context<T> : Entity-specific context for component T

  • AsyncApp : Async context for foreground tasks

  • AsyncWindowContext : Async context with window access

Quick Start

Context - Component Context

impl MyComponent { fn update_state(&mut self, cx: &mut Context<Self>) { self.value = 42; cx.notify(); // Trigger re-render

    // Spawn async task
    cx.spawn(async move |cx| {
        // Async work
    }).detach();

    // Get current entity
    let entity = cx.entity();
}

}

App - Global Context

fn main() { let app = Application::new(); app.run(|cx: &mut App| { // Create entities let entity = cx.new(|cx| MyState::default());

    // Open windows
    cx.open_window(WindowOptions::default(), |window, cx| {
        cx.new(|cx| Root::new(view, window, cx))
    });
});

}

Window - Window Context

impl Render for MyView { fn render(&mut self, window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement { // Window operations let is_focused = window.is_window_focused(); let bounds = window.bounds();

    div().child("Content")
}

}

AsyncApp - Async Context

cx.spawn(async move |cx: &mut AsyncApp| { let data = fetch_data().await;

entity.update(cx, |state, inner_cx| {
    state.data = data;
    inner_cx.notify();
}).ok();

}).detach();

Common Operations

Entity Operations

// Create entity let entity = cx.new(|cx| MyState::default());

// Update entity entity.update(cx, |state, cx| { state.value = 42; cx.notify(); });

// Read entity let value = entity.read(cx).value;

Notifications and Events

// Trigger re-render cx.notify();

// Emit event cx.emit(MyEvent::Updated);

// Observe entity cx.observe(&entity, |this, observed, cx| { // React to changes }).detach();

// Subscribe to events cx.subscribe(&entity, |this, source, event, cx| { // Handle event }).detach();

Window Operations

// Window state let focused = window.is_window_focused(); let bounds = window.bounds(); let scale = window.scale_factor();

// Close window window.remove_window();

Async Operations

// Spawn foreground task cx.spawn(async move |cx| { // Async work with entity access }).detach();

// Spawn background task cx.background_spawn(async move { // Heavy computation }).detach();

Context Hierarchy

App (Global) └─ Window (Per-window) └─ Context<T> (Per-component) └─ AsyncApp (In async tasks) └─ AsyncWindowContext (Async + Window)

Reference Documentation

  • API Reference: See api-reference.md

  • Complete context API, methods, conversions

  • Entity operations, window operations

  • Async contexts, best practices

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

gpui-async

No summary provided by upstream source.

Repository SourceNeeds Review
General

gpui-layout-and-style

No summary provided by upstream source.

Repository SourceNeeds Review
General

gpui-event

No summary provided by upstream source.

Repository SourceNeeds Review
General

gpui-action

No summary provided by upstream source.

Repository SourceNeeds Review