Skip to content

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

@Divyanshu-s13

Description

@Divyanshu-s13

GSoC2026ProposalDivyanshuSingh.pdf

GSoC 2026 Proposal: JSON Schema to Form UI for APISIX Dashboard [APISIX-39]

1. Project Information


2. Why I Am the Right Candidate

I have been actively contributing to Apache open-source projects for the past 6+ months. My contributions directly relevant to this project:

Organization PR Description Status
Apache Arrow JS PR #373 fix: Resolve TS2352 type error in MapBuilder for TypeScript 5.6+ ✅ Merged
Apache Arrow JS PR #377 fix: implement Symbol.hasInstance for cross-library instanceof checks (+640 lines, 10 files) ✅ Merged
OWASP PR #163 Fix: Replace document.onload with window.addEventListener in 404 page ✅ Merged

I am intimately familiar with the technologies this project requires: TypeScript, React, JSON Schema, AJV, and Ant Design — APISIX Dashboard's own stack.


3. Pre-GSoC Prototype

I have already built a working prototype of the SchemaForm system before submitting this proposal:

🔗 Prototype: https://github.com/Divyanshu-s13/apisix-schema-form-prototype

The prototype demonstrates:

  • ✅ Core SchemaForm rendering all basic JSON Schema types (string, number, boolean, enum, array, object)
  • oneOf branch switching with value clearing (tested with key-auth / jwt-auth / basic-auth schemas)
  • ✅ AJV draft-07 validation pipeline with inline error display
  • widgetMap registry for extensibility
  • ✅ Three real APISIX plugin schemas used as demo: limit-count, authentication (oneOf), cors (array)

4. Technical Approach

The SchemaForm system will be a self-contained React module using the existing APISIX Dashboard stack:

SchemaForm          ← Entry point, AJV validation
  └── SchemaField   ← Dispatcher (routes to correct renderer)
        ├── PrimitiveField   ← string / number / boolean / enum
        ├── ObjectField      ← schema.properties (recursive)
        ├── ArrayField       ← schema.type === 'array'
        └── OneOfField       ← schema.oneOf (branch switching)

Integration flow:

  1. User selects a plugin
  2. Dashboard fetches schema: GET /apisix/admin/schema/plugins/{name}
  3. SchemaForm renders the form automatically
  4. AJV validates on submit → PUT /apisix/admin/routes/{id}

5. Timeline

Phase Weeks Deliverables
Community Bonding 1–3 Codebase deep-dive, finalize API with mentor
Phase 1 4–6 Core renderer (primitive types), unit tests, draft PR
Phase 2 7–9 oneOf, dependencies, AJV validation pipeline
Phase 3 10–12 Dashboard integration, widgetMap, e2e tests
Phase 4 13–14 Developer docs, anyOf stretch goal, final polish

Looking forward to your feedback @Baoyuantop ! Happy to answer any questions or make changes to the proposal based on your input.

GSoC2026ProposalDivyanshuSingh.pdf

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