Skip to main content

Overview

Glyph uses React Context for all global state management. No Redux, no Zustand—just plain React.
Contexts are layered: SpaceContext wraps FileTreeContext wraps ViewContext, etc.

Context Hierarchy

src/main.tsx

SpaceContext

Location: src/contexts/SpaceContext.tsx Manages space lifecycle (create, open, close).

State Shape

Usage

FileTreeContext

Location: src/contexts/FileTreeContext.tsx Manages file browser state and tag index.

State Shape

Usage

ViewContext

Location: src/contexts/ViewContext.tsx Manages “view documents” (folder, tag, search, database views).

State Shape

Usage

UIContext

Location: src/contexts/UIContext.tsx Manages UI chrome state (sidebar, search, modals).

State Shape

Usage

EditorContext

Location: src/contexts/EditorContext.tsx Manages TipTap editor instance.

State Shape

Usage

Custom Context Pattern

All contexts follow this pattern:
1

Define context value type

2

Create context with null default

3

Create provider component

4

Create typed hook

Performance Optimization

Split Contexts

Instead of one giant context:
Bad
Use multiple small contexts:
Good

Memoize Context Value

Always memoize the context value:
Without useMemo, context consumers re-render on every provider render.

Selector Pattern

For large contexts, expose selectors:

Next Steps

Hooks

Custom React hooks

Components

Component architecture