Portal Community

The Three Default Players

FormRenderer

Full-featured interactive player. Handles all 88+ control types, all five operating modes, validation, draft auto-save, and action execution. Use for any form where users enter or review data.

ViewModeRenderer

Lightweight read-only player. Skips validation, events, draft, and submission. 60% smaller bundle footprint. Use for high-volume record display screens where editing is never required.

FormPlayerPage

Full-page wrapper from pages-player-react. Handles API loading, skeleton state, error boundary, breadcrumbs, and draft restore prompt. Use for standalone form pages.

When to Use Each Player

ScenarioPlayerReason
Data entry form (edit mode)FormRendererFull validation, submission, draft save
Approval review form (view mode)FormRenderer in view modeNeeds mode switching and action execution
High-volume record list displayViewModeRendererLighter — no event system overhead per row
Standalone form page with API loadingFormPlayerPageIncludes loading skeleton, error boundary, breadcrumbs
Embedded form in a custom layoutFormRendererPass custom wrappers via children prop
Non-standard layout (cards, mobile, chat)Custom playerSee Guide12_CustomPlayers

Package Structure

// Package: @atlas-forms/player-components-react
import { FormRenderer }     from '@atlas-forms/player-components-react';
import { ViewModeRenderer } from '@atlas-forms/player-components-react';

// Package: @atlas-forms/pages-player-react
import { FormPlayerPage }   from '@atlas-forms/pages-player-react';

// Package: @atlas-forms/state-react (for custom players)
import { FormStateProvider } from '@atlas-forms/state-react';

Quick Start

import { FormRenderer } from '@atlas-forms/player-components-react';
import type { FormSchema } from '@atlas-forms/types-js';

const MyForm: React.FC = () => {
  const schema: FormSchema = { /* ... */ };

  const handleSubmit = async (values: Record<string, any>) => {
    await fetch('/api/my-form', {
      method: 'POST',
      body: JSON.stringify(values),
      headers: { 'Content-Type': 'application/json' }
    });
  };

  return (
    <FormRenderer
      schema={schema}
      mode="edit"
      autoValidate={true}
      onSubmit={handleSubmit}
    />
  );
};