You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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-formsetError.
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)
Reusable SchemaForm component supporting basic objects and recursive nesting.
Widget mapping for basic types (string, number, boolean, enum, array).
Conditional Rendering: Full support for oneOf, anyOf, and dependencies.
Advanced Logic:if/then/else sub-schema rendering via AJV evaluation.
Form State Cleanup: Automatic unregister() of deselected branches for payload consistency.
APISIX Extensions: Handling encrypt_fields (PasswordInput) and patternProperties (Dynamic Maps).
Should-have (Phase 2: Mid GSoC)
Full PluginEditorDrawer integration with Toggle Fallback logic.
Smart Label Formatting (Acronym handling for OAuth, API, ID, etc.).
Detailed error mapping for nested field paths.
Comprehensive Unit & E2E Testing (Playwright).
Nice-to-have (Phase 3: End of GSoC)
allOf merging support.
$ref / $defs resolution for recursive schemas.
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:
GSoC 2026 Proposal: JSON Schema Driven Form Component [APISIX-39]
1. Project Information
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-formarchitecture.My Key Core Contributions:
varsform component array formatting viaa.trim()tags input (fix: a.trim is not a function #3286).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):
unregister(). When users switch betweenoneOforanyOfbranches, stale/ghost values are instantly purged. This ensures "Submit Payload Consistency"a critical requirement for the APISIX Admin API.--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-formsetError.src/components/form/for a native look.The Integration Strategy (The "Toggle" Approach):
I propose integrating the
SchemaFormintoPluginEditorDrawerwith 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)
SchemaFormcomponent supporting basic objects and recursive nesting.string,number,boolean,enum,array).oneOf,anyOf, anddependencies.if/then/elsesub-schema rendering via AJV evaluation.unregister()of deselected branches for payload consistency.encrypt_fields(PasswordInput) andpatternProperties(Dynamic Maps).Should-have (Phase 2: Mid GSoC)
PluginEditorDrawerintegration with Toggle Fallback logic.Nice-to-have (Phase 3: End of GSoC)
allOfmerging support.$ref/$defsresolution for recursive schemas.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
apisix/admin/plugins.luaapisix/schema_def.lua8. Other Commitments