Skip to content

GSoC 2026 Proposal: JSON Schema Driven Form Component [APISIX-39] #3315

@DSingh0304

Description

@DSingh0304

GSoC 2026 Proposal: JSON Schema Driven Form Component [APISIX-39]

1. Project Information

  • Project Name: JSON Schema to Form UI for APISIX Dashboard (APISIX-39)
  • Student Name: Deep Shekhar Singh
  • GitHub: @DSingh0304
  • Timezone: IST (UTC+5:30)

2. Why I am the Right Candidate for this Project

Over the past few months, I have become deeply involved in the APISIX Dashboard codebase, significantly improving its stability and test coverage. I am intimately familiar with its React 19 + Mantine + react-hook-form architecture.

My Key Core Contributions:

  1. Massive E2E Test Suite Expansion (10+ Merged PRs): Authored comprehensive E2E tests for Services (test(e2e): add comprehensive service CRUD tests and UI utility functions #3258), Stream Routes (test: add stream route E2E tests with detail page flows #3255), Consumer Groups (test: add E2E tests for Consumer Groups #3250), SSLs (test: add E2E tests for SSLs (#3087) #3249), Global Rules (test: add E2E tests for global rules #3248), Plugin Metadata (test: add E2E tests for plugin metadata resource #3247), Plugin Configs (test: add comprehensive E2E tests for plugin configs #3246), Secrets (test: add comprehensive E2E tests for Secrets resource #3245), Protos (test: add E2E tests for protos #3244), and Consumers (test(e2e): Add E2E tests for consumer and credentials #3243).
  2. UI Crash Resolution: Resolved UI crashes caused by vars form component array formatting via a.trim() tags input (fix: a.trim is not a function #3286).
  3. Advanced Search Implementation: Developed the hybrid routing search form with 9 frontend/backend filter fields (feat: add route search form with 9 filter fields #3222).
  4. CI Pipeline Improvement: Implemented the strict CI Linting workflow (feat: add lint workflow #3291).

3. Working Proof of Concept: PR #3274 (Already Validated)

I have already built a high-coverage Proof of Concept (#3274) that demonstrates the project's viability natively within the dashboard. The maintainer (@Baoyuantop) has validated this approach, and the PR serves as a concrete foundation for the GSoC term.

Current PoC Highlights (as of March 2026):

  • 50 Passing Integration Tests: Verified via Vitest + JSDOM, covering recursion, widget mapping, and complex conditional logic.
  • 🧼 High-Priority Correctness: Implemented automatic Form State Cleanup using unregister(). When users switch between oneOf or anyOf branches, stale/ghost values are instantly purged. This ensures "Submit Payload Consistency"a critical requirement for the APISIX Admin API.
  • Zero-Warning Build: Compliant with strict project linting (--max-warnings=0).

(Below is a screen recording of the working SchemaForm PoC generating the UI and demonstrating real-time form state cleanup/payload consistency)

Screencast.from.2026-03-24.18-14-13.mp4

4. Project Description & Approach

The Problem:
Currently, configuring APISIX plugins requires writing raw JSON in a Monaco editor. With 150+ plugins, each with unique schema definitions, maintaining hand-coded forms is unsustainable and prone to user error.

The Solution & Approach:
The Admin API already exposes full JSON Schema at GET /apisix/admin/schema/plugins/{name}. My approach dynamically auto-generates user-friendly forms directly from these schemas using:

  • React Hook Form (RHF): For performant, un-controlled form state management.
  • AJV: For formal validation, bridging errors to react-hook-form setError.
  • Mantine UI 8: Reusing existing widgets from src/components/form/ for a native look.

The Integration Strategy (The "Toggle" Approach):
I propose integrating the SchemaForm into PluginEditorDrawer with a toggle switch. Users see the auto-generated UI form by default, but can toggle back to the Monaco JSON editor for fine-grained control or unrecognized schema portions. This guarantees zero regressions.


5. Deliverables & Implementation Phases

Must-have (Phase 1: Completed in PoC/Early GSoC)

  1. Reusable SchemaForm component supporting basic objects and recursive nesting.
  2. Widget mapping for basic types (string, number, boolean, enum, array).
  3. Conditional Rendering: Full support for oneOf, anyOf, and dependencies.
  4. Advanced Logic: if/then/else sub-schema rendering via AJV evaluation.
  5. Form State Cleanup: Automatic unregister() of deselected branches for payload consistency.
  6. APISIX Extensions: Handling encrypt_fields (PasswordInput) and patternProperties (Dynamic Maps).

Should-have (Phase 2: Mid GSoC)

  1. Full PluginEditorDrawer integration with Toggle Fallback logic.
  2. Smart Label Formatting (Acronym handling for OAuth, API, ID, etc.).
  3. Detailed error mapping for nested field paths.
  4. Comprehensive Unit & E2E Testing (Playwright).

Nice-to-have (Phase 3: End of GSoC)

  1. allOf merging support.
  2. $ref / $defs resolution for recursive schemas.
  3. Read-only mode for viewing existing configuration.

6. APISIX Plugin Schema Patterns Supported

My current PoC already supports patterns found in the most critical APISIX plugins:

  • limit-conn, limit-count (oneOf, anyOf, if/then/else)
  • jwt-auth, key-auth (encrypt_fields)
  • proxy-rewrite (patternProperties, nested objects)
  • traffic-split (complex arrays of objects)

7. Related Resources


8. Other Commitments

  • I am fully committed to completing this project. I have no other internships or full-time jobs planned for this summer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions