# Hoist React Documentation Index This is the primary catalog for all hoist-react documentation. It indexes package-level READMEs, cross-cutting concept docs, and DevOps guides — with descriptions and key topics to support fast, targeted retrieval. ## How to Use This Index **AI coding agents:** Scan the tables below and match the **Key Topics** column against the APIs, classes, or patterns you're working with. Use the [Quick Reference by Task](#quick-reference-by-task) table to map natural-language goals to the right document. **Application developers:** Navigate by package to find architecture, configuration, and usage patterns for specific hoist-react features. Start with the [Core Framework](#core-framework) table for foundational concepts, then drill into [Components](#components) or [Utilities](#utilities). **Library developers:** In addition to the docs below, see [`/CLAUDE.md`](../CLAUDE.md) for architecture patterns and AI assistant guidance, and [Coding Conventions](./coding-conventions.md) for detailed code style and naming conventions. See [`docs-roadmap.md`](./planning/docs-roadmap.md) for documentation coverage tracking and conventions. ## Quick Reference by Task | If you need to... | Start here | |---|---------------------------------------------------------------------------------------------------------------------| | Understand the component/model/service pattern | [`/core/`](../core/README.md) | | Work with `XH` singleton API | [`/core/`](../core/README.md) | | Build or configure a data grid | [`/cmp/grid/`](../cmp/grid/README.md) | | Build a form with validation | [`/cmp/form/`](../cmp/form/README.md) | | Understand input change/commit lifecycle | [`/cmp/input/`](../cmp/input/README.md) | | Create a tabbed interface | [`/cmp/tab/`](../cmp/tab/README.md) | | Build a desktop app or explore desktop components | [`/desktop/`](../desktop/README.md) | | Build a configurable dashboard | [`/desktop/cmp/dash/`](../desktop/cmp/dash/README.md) | | Configure a desktop panel (toolbars, masks, collapse) | [`/desktop/cmp/panel/`](../desktop/cmp/panel/README.md) | | Show an info or warning banner within a panel | [Panel Banners](../desktop/cmp/panel/README.md#banners) | | Build a mobile app | [`/mobile/`](../mobile/README.md) | | Save and restore named view configurations | [`/cmp/viewmanager/`](../cmp/viewmanager/README.md) | | Select a period or date range (presets, lookbacks, months, custom) | [`/cmp/daterange/`](../cmp/daterange/README.md) | | Use layout containers (Box, HBox, VBox, Frame) | [`/cmp/layout/`](../cmp/layout/README.md) | | Work with Stores, Records, Fields, or Filters | [`/data/`](../data/README.md) | | Set up Cube aggregation with Views and Queries | [`/data/cube/`](../data/cube/README.md) | | Use FetchService, ConfigService, or PrefService | [`/svc/`](../svc/README.md) | | Add tracing, metrics, or activity tracking | [Telemetry & Observability](./telemetry.md) | | Format numbers, dates, or currencies | [`/format/`](../format/README.md) | | Understand localization / locale support | [`/format/` Localization](../format/README.md#localization) | | Understand app lifecycle (startup sequence) | [Lifecycle: App](./lifecycle-app.md) | | Understand model/service lifecycles and loading | [Lifecycle: Models & Services](./lifecycle-models-and-services.md) | | Add authentication (OAuth, login) | [Authentication](./authentication.md) | | Persist UI state (columns, filters, panel sizes) | [Persistence](./persistence.md) | | Check roles, gates, or app access | [Authorization](./authorization.md) | | Configure client-side routing or URL-driven tabs | [Routing](./routing.md) | | Handle exceptions and display error dialogs | [Error Handling](./error-handling.md) | | Add testId selectors for test automation | [Test Automation](./test-automation.md) | | Use Promises with error handling and tracking | [`/promise/`](../promise/README.md) | | Work with MobX, `@bindable`, or `@observable` | [`/mobx/`](../mobx/README.md) | | Use timers, decorators, LocalDate, or utility hooks | [`/utils/`](../utils/README.md) | | Understand app shell, dialogs, toasts, or theming | [`/appcontainer/`](../appcontainer/README.md) | | Use icons in buttons, menus, and grids | [`/icon/`](../icon/README.md) | | Customize the spinner icon or animation | [`/icon/`](../icon/README.md#spinner-component) | | Configure OAuth authentication (Auth0 or MSAL) | [`/security/`](../security/README.md) + [Authentication](./authentication.md) | | Debug model instances or detect memory leaks | [`/inspector/`](../inspector/README.md) | | Understand third-party library integration | [`/kit/`](../kit/README.md) | | Set up builds, CI/CD, or deployment | [Build & Publish Hoist React](./build-and-publish.md), [Build & Deploy Apps](./build-and-deploy-app.md) | | Configure local development environment | [Development Environment](./development-environment.md) | | Write or run unit tests, in an app or hoist-react | [Unit Testing](./unit-testing.md) | | Use MCP tools with AI assistants | [`/mcp/`](../mcp/README.md) | | Serve a Hoist library's docs through the MCP tools | [Companion Library Docs](./companion-library-docs.md) | | Customize colors, fonts, spacing, or theme | [`/styles/`](../styles/README.md) | | Follow XH coding conventions | [Coding Conventions](./coding-conventions.md) | | Check hoist-react / hoist-core / hoist-dev-utils version compatibility | [Version Compatibility](./version-compatibility.md) | | Upgrade to a new major hoist-react version | [Upgrade Notes](#upgrade-notes) | ## Package Documentation ### Core Framework | Package | Description | Key Topics | |---------|-------------|------------| | [`/core/`](../core/README.md) | Foundation classes defining Hoist's component, model, and service architecture | HoistBase, HoistModel, HoistService, hoistCmp, XH, element factories, decorators, lifecycle | | [`/data/`](../data/README.md) | Observable data layer with Store, Field, filtering, validation, tree data, and memory tuning | Store, StoreRecord, Field, Filter, tree data, loadData, loadDataAsync, updateData, digestSpec, projectionOnly, diagnostics | | [`/data/cube/`](../data/cube/README.md) | Client-side OLAP-style aggregation with dimensions, measures, and Views | Cube, CubeField, View, Query, aggregator, dimension, includeRoot, includeLeaves | | [`/svc/`](../svc/README.md) | Built-in singleton services for data access and app-wide operations | FetchService, ConfigService, PrefService, IdentityService, TrackService, TraceService, WebSocketService | ### Components | Package | Description | Key Topics | |---------|-------------|------------| | [`/cmp/`](../cmp/README.md) | Cross-platform component overview and catalog | Component categories, factory pattern, platform-specific vs shared | | [`/cmp/grid/`](../cmp/grid/README.md) | Primary data grid built on AG Grid | GridModel, Column, ColumnGroup, sorting, grouping, filtering, selection, inline editing, export | | [`/cmp/form/`](../cmp/form/README.md) | Form infrastructure for data entry with validation | FormModel, FieldModel, SubformsFieldModel, validation rules, data binding | | [`/cmp/input/`](../cmp/input/README.md) | Base classes and interfaces for input components | HoistInputModel, change/commit lifecycle, value binding, focus management | | [`/cmp/layout/`](../cmp/layout/README.md) | Flexbox-based layout containers | Box, VBox, HBox, Frame, Viewport, LayoutProps, pixel conversion | | [`/cmp/tab/`](../cmp/tab/README.md) | Tabbed interface system | TabContainerModel, routing integration, render modes, refresh strategies | | [`/cmp/viewmanager/`](../cmp/viewmanager/README.md) | Save/load named bundles of component state | ViewManagerModel, views, sharing, pinning, auto-save, JsonBlob persistence | | [`/cmp/daterange/`](../cmp/daterange/README.md) | Period selection as presets, relative lookbacks, months/years, or custom ranges, resolved to dates and filters | DateRangePickerModel, DateRangePicker, DateRangeSelection, presets, anchorDate, LocalDateRange, currentRangeFilter, priorRange | | [`/desktop/`](../desktop/README.md) | Desktop-specific components and app container | Desktop components, Blueprint wrappers, desktop navigation | | [`/desktop/cmp/dash/`](../desktop/cmp/dash/README.md) | Configurable dashboard system with draggable, resizable widgets | DashContainerModel, DashCanvasModel, DashViewSpec, DashViewModel, widget persistence, ViewManager integration | | [`/desktop/cmp/panel/`](../desktop/cmp/panel/README.md) | Desktop panel container with toolbars, banners, masks, and collapsible behavior | Panel, PanelModel, Toolbar, Banner, mask, collapse/resize, persistence, modal support | | [`/mobile/`](../mobile/README.md) | Mobile-specific components for touch devices | AppContainer, NavigatorModel, Panel, AppBar, mobile inputs, touch navigation, tabs | ### Utilities | Package | Description | Key Topics | |---------|-------------|------------| | [`/format/`](../format/README.md) | Number, date, and miscellaneous formatting for grids and display | fmtNumber, fmtPercent, fmtMillions, numberRenderer, dateRenderer, ledger, colorSpec, auto-precision, localization | | [`/appcontainer/`](../appcontainer/README.md) | Application shell — lifecycle, dialogs, toasts, banners, theming, and environment | AppContainerModel, MessageSpec, ToastSpec, BannerSpec, ExceptionDialogModel, ThemeModel, RouterModel, AppOption | | [`/utils/`](../utils/README.md) | Async, datetime, JS, and React utility functions used throughout hoist-react | Timer, LocalDate, forEachAsync, decorators (@debounced, @computeOnce, @sharePendingPromise), logging, hooks | | [`/promise/`](../promise/README.md) | Promise prototype extensions for error handling, tracking, masking, and timeouts | catchDefault, catchWhen, track, linkTo, timeout, thenAction, wait, waitFor, tap | | [`/mobx/`](../mobx/README.md) | MobX integration layer — re-exports, action enforcement, and @bindable decorator | @bindable, @bindableRef, accessor, observer, action, observable, computed, enforceActions | ### Concepts Cross-cutting documentation that spans multiple packages: | Concept | Description | Key Topics | |---------|-------------|------------| | [Lifecycle: App](./lifecycle-app.md) | How a Hoist app initializes — from entry point to RUNNING state | XH.renderApp, AppSpec, AppContainerModel, initialization sequence, AppState | | [Lifecycle: Models & Services](./lifecycle-models-and-services.md) | Model, service, and load/refresh lifecycles after app startup | HoistModel (onLinked, afterLinked, doLoadAsync, destroy), HoistService (initAsync), LoadSupport, LoadSpec, RefreshContextModel | | [Authentication](./authentication.md) | How Hoist apps authenticate users via OAuth or form-based login | HoistAuthModel, MsalClient, AuthZeroClient, Token, IdentityService, checkAccess, impersonation | | [Persistence](./persistence.md) | Persisting user UI state to various backing stores | @persist, markPersist, PersistenceProvider, localStorage, Preference, ViewManager, GridModel/FormModel/PanelModel persistence | | [Authorization](./authorization.md) | Role-based authorization and config-driven feature gates | HoistUser, hasRole, hasGate, checkAccess, HOIST_ADMIN, roles, gates, Admin Console role management | | [Routing](./routing.md) | Client-side routing via RouterModel (Router5 wrapper) | RouterModel, getRoutes, XH.routerState, XH.navigate, route parameters, TabContainerModel route integration, NavigatorModel | | [Error Handling](./error-handling.md) | Centralized exception handling, display, and logging | XH.handleException, ExceptionDialog, catchDefault, alertType, toast, requireReload, ErrorBoundary, doLoadAsync | | [Telemetry & Observability](./telemetry.md) | Client-side tracing, metrics, activity tracking, and timed logging composed via the Runner chain | Runner, CallContext, TraceService, MetricsService, span, traceparent, sampling, telemetryPrefix, metrics, activity tracking | | [Test Automation](./test-automation.md) | Test automation support via testId selectors | testId, TestSupportProps, data-testid, getTestId, FormField auto-testId, XH.getModelByTestId | | [Coding Conventions](./coding-conventions.md) | Coding conventions for imports, naming, class structure, component patterns, null handling, async, error handling, logging, and CSS | conventions, code style, imports, naming, TypeScript, class structure, hoistCmp, exports, async, error handling, logging, CSS, BEM | | [Version Compatibility](./version-compatibility.md) | Reference mapping hoist-react releases to required/recommended hoist-core and hoist-dev-utils versions | version matrix, hoist-core pairing, hoist-dev-utils pairing, node version, upgrade requirements, compatibility | ### Supporting Packages | Package | Description | Key Topics | |---------|-------------|------------| | [`/icon/`](../icon/README.md) | Factory-based icon system wrapping FontAwesome Pro | Icon singleton, IconProps, intent coloring, size variants, asHtml, fileIcon, Spinner, SpinnerProps | | [`/security/`](../security/README.md) | OAuth 2.0 client abstraction for Auth0 and Microsoft Entra ID (MSAL) | BaseOAuthClient, AuthZeroClient, MsalClient, Token, AccessTokenSpec, auto-refresh, re-login | | [`/kit/`](../kit/README.md) | Centralized wrappers for third-party libraries used by Hoist | installAgGrid, installHighcharts, Blueprint, GoldenLayout, react-select, version constraints | | [`/kit/blueprint/`](../kit/blueprint/README.md) | Blueprint integration - wrapped components, element factories, and build-time icon stubbing | Blueprint, Popover, Dialog, element factories, blueprint icons, loadAllBlueprintJsIcons, upgrade checklist | | [`/inspector/`](../inspector/README.md) | Built-in developer tool for real-time inspection of Hoist instances and memory | InspectorPanel, InspectorModel, StatsModel, InstancesModel, DiagnosticsModel, property watchlist, model leak detection | | [`/styles/`](../styles/README.md) | CSS custom properties, theming, BEM naming, SCSS conventions, and utility classes | `--xh-*` CSS vars, vars.scss, XH.scss, dark theme, ThemeModel, BEM, `xh-` prefix, intent colors, utility classes | ### Other Packages Additional packages without dedicated READMEs — see [docs-roadmap.md](./planning/docs-roadmap.md) for planned coverage: `/admin/` ## DevOps and Environment | Document | Description | |----------|-------------| | [Build & Publish](./build-and-publish.md) | GitHub Actions workflows for linting, unit tests, CodeQL analysis, and npm publishing of hoist-react | | [App Build & Deploy](./build-and-deploy-app.md) | Building and deploying full-stack Hoist applications (Gradle, Rsbuild, Docker) | | [Development Environment](./development-environment.md) | Local development environment setup for Hoist and app developers | | [Unit Testing](./unit-testing.md) | Unit tests for apps and hoist-react: the `@xh/hoist/test-support` kit, the fake hoist-core server, writing tests, and CI reports | | [Compilation Notes](./compilation-notes.md) | Notes on TypeScript/SWC compilation and build tooling internals | ## Developer Tools | Tool | Description | |------|-------------| | [MCP Server](../mcp/README.md) | Model Context Protocol server providing AI assistants with structured access to documentation, TypeScript types, and code generation prompts | | [Companion Library Docs](./companion-library-docs.md) | How a library that builds on Hoist serves its docs through the MCP server and `hoist-docs` CLI, using a `hoist.docRegistry` field in its `package.json` | ## Upgrade Notes Step-by-step guides for upgrading applications across major hoist-react versions, with breaking changes, before/after code examples, and verification checklists. > **Always check the latest version of these notes on the > [`develop` branch on GitHub](https://github.com/xh/hoist-react/tree/develop/docs/upgrade-notes).** > Upgrade notes are refined after release as developers report issues and new patterns emerge. The > copy bundled in your installed hoist-react package may be outdated — the GitHub version is the > most authoritative source. | Version | Released | Difficulty | Key Changes | |---------|----------|------------|-------------| | [v90](./upgrade-notes/v90-upgrade-notes.md) | TBD | 🟢 LOW | numbro removed - `NumberFormatOptions.formatConfig` no longer supported | | [v89](./upgrade-notes/v89-upgrade-notes.md) | 2026-10-13 | 🟢 LOW | TypeScript 7 (strongly recommended), `GridFilterModelConfig.fieldSpecs` no longer an allow-list | | [v88](./upgrade-notes/v88-upgrade-notes.md) | 2026-09-28 | 🔴 HIGH | TC39 decorators (`accessor`, no `makeObservable`) + dev-utils 16 / Rsbuild, MobX 7 named exports, AG Grid 36 + Theming API, React 19.3, v86 scheduled removals | | [v87](./upgrade-notes/v87-upgrade-notes.md) | TBD | 🟠 MEDIUM | React 19 + Floating UI popovers, data-layer perf overhaul (`leafMap`, `getCubeLeaves`, `StoreRecord.data` access), new column chooser + `RowDragModule`, hoist-core >= 40.5.0 | | [v86](./upgrade-notes/v86-upgrade-notes.md) | 2026-06-12 | 🟠 MEDIUM | AG Grid 34→35, CodeInput → CodeMirror v6 (`mode`→`language`), FileChooser redesign, mobile DateInput native picker, `Runner` API + `withSpan` deprecation | | [v85](./upgrade-notes/v85-upgrade-notes.md) | 2026-04-23 | 🟢 LOW | `InitContext` on `HoistService.initAsync()` / `HoistAppModel.initAsync()`, nested app-load spans, Swiper 11→12 | | [v84](./upgrade-notes/v84-upgrade-notes.md) | 2026-04-15 | 🟢 LOW | FontAwesome v7, icon-based Spinner, `getClassName` removal, hoistCmp `defaults` | | [v83](./upgrade-notes/v83-upgrade-notes.md) | 2026-03-24 | 🟢 LOW | TraceService, static defaults pattern, `downloadjs` removal, `SegmentedControl` | | [v82](./upgrade-notes/v82-upgrade-notes.md) | 2026-02-25 | 🟢 LOW | `FetchService` static correlation IDs, `xh-popup--framed` removal, DashContainer CSS wrapper | | [v81](./upgrade-notes/v81-upgrade-notes.md) | 2026-02-12 | 🟢 LOW | Panel CSS rename, `completeAuthAsync` return type, Blueprint `Card` → `BpCard` | | [v80](./upgrade-notes/v80-upgrade-notes.md) | 2026-01-27 | 🟢 LOW | FormField BEM CSS classes, `appLoadModel` → `appLoadObserver`, jQuery resolution | | [v79](./upgrade-notes/v79-upgrade-notes.md) | 2026-01-05 | 🟠 MEDIUM | Blueprint 5→6, `moduleResolution: "bundler"`, `loadModel` → `loadObserver` | | [v78](./upgrade-notes/v78-upgrade-notes.md) | 2025-11-21 | 🎉 TRIVIAL | `GridModel.setColumnState` behavior change | | [v77](./upgrade-notes/v77-upgrade-notes.md) | 2025-10-29 | 🟠 MEDIUM | Highcharts v11→v12, `disableXssProtection` → `enableXssProtection`, AG Grid context menu markup | | [v76](./upgrade-notes/v76-upgrade-notes.md) | 2025-09-26 | 🟠 MEDIUM | AG Grid v31→v34, new package names and module registration, `groupRowRenderer` value change | | [v75](./upgrade-notes/v75-upgrade-notes.md) | 2025-08-11 | 🟢 LOW | Removed deprecated APIs, Cube View row data `_meta`/`buckets` removal | | [v74](./upgrade-notes/v74-upgrade-notes.md) | 2025-06-11 | 🟢 LOW | `ViewManagerModel.settleTime` removal, `ChartModel.showContextMenu` → `contextMenu` | | [v73](./upgrade-notes/v73-upgrade-notes.md) | 2025-05-16 | 🟢 LOW | `hoist-core >= 31`, `makeObservable` enforcement, admin `initAsync` super call, ESLint 9 | ## Additional Resources - [`/CLAUDE.md`](../CLAUDE.md) — AI coding assistant guidance: architecture patterns and key dependencies - [`planning/`](./planning/) — Roadmaps and progress tracking for active library initiatives (documentation, testing). Not indexed here — these are project management artifacts, not hoist-react reference material. - [`/CHANGELOG.md`](../CHANGELOG.md) — Version history and release notes (v64+) - [`archive/CHANGELOG-archive.md`](./archive/CHANGELOG-archive.md) — Archived changelog for older versions (v63 and earlier) - [`changelog-format.md`](./changelog-format.md) — Conventions for writing and reviewing hoist-react library CHANGELOG entries - [Toolbox](https://github.com/xh/toolbox) — XH's example application showcasing hoist-react patterns and components