Changelog

A record of notable changes to the Nexa Ed platform, REST API, and SDK packages.

All notable changes to Nexa Ed are documented here. The format follows Keep a Changelog.

SDK package versions follow Semantic Versioning. Platform API changes are listed by date.


SDK — v0.3.0-beta.0 (2026-04-18)

See the release notes for full detail.

create-nexaed-app → 0.3.0-beta.0

  • Fix: WorkOS middleware.ts now includes redirectUri: process.env.WORKOS_REDIRECT_URI — previously omitted, causing broken auth callbacks in every WorkOS-scaffolded app
  • New: Git repository initialisation — opt-in prompt during scaffolding; also available as --git / --no-git flags for CI mode. Runs git init + initial commit automatically when enabled
  • New: Nexium Labs attribution in the generated landing page footer — subtle copyright line and "a product by Nexium Labs" link alongside the Nexa Ed credit

Platform — 2025-04-01

Added

  • Billing system — monthly usage-based billing via Paystack reusable authorisations. Charges run automatically at 02:00 UTC each day for subscriptions due.
  • Transactional email — billing receipts, card-saved confirmations, tier-switch notifications, and welcome emails are now sent via Resend.
  • Rate limiting — sliding-window rate limits applied to all API endpoints (file processing, payments, RPC routes). Limits are communicated via standard X-RateLimit-* headers.

Changed

  • POST /api/file-processing/extract now returns HTTP 202 Accepted immediately and processes documents asynchronously. Poll GET /api/file-processing/status/:jobId for completion.

SDK — v0.2.0-beta.4 (2026-04-08)

See the release notes for full detail.

All packages (@nexa-ed/sdk, @nexa-ed/next, @nexa-ed/react, @nexa-ed/convex, @nexa-ed/node)

  • Fix: exports/main/module now reference ./dist/*.js / ./dist/*.cjs — packages were unresolvable when installed from npm due to src/ paths and incorrect .mjs references in publishConfig
  • Fix: types condition moved to first position in all exports entries — previously listed after import/require, which broke TypeScript declaration resolution for downstream packages

create-nexaed-app → 0.2.0-beta.5

  • New: Command router — init, doctor, upgrade, telemetry, help subcommands
  • New: Non-interactive / CI mode — all prompts bypassable via flags; auto-activates when stdin is not a TTY
  • New: doctor command — validates env vars, packages, catch-all route, SDK version, and API key
  • New: upgrade command — updates all @nexa-ed/* deps to @latest using the detected package manager
  • New: Opt-in telemetry — anonymous usage collection, toggle with telemetry on|off
  • New: Update notifier — background check for newer CLI version on each run

Publish workflow

  • New: Type-check all SDK packages step runs after build and before changeset publish — catches broken DTS early with a clear error instead of a silent ELIFECYCLE failure

SDK — v0.2.0-beta.3 (2026-04-04)

Beta release. See the release notes for full code examples.

@nexa-ed/sdk

  • New: nexa.email module — create, bulkCreate, getJobStatus, list
  • New types: EmailCreateOptions, EmailCreateResult, EmailBulkCreateOptions, EmailBulkCreateResult, EmailJobStatus, StudentEmailAccount

@nexa-ed/react

  • 18 components total — email provisioning (StudentEmailAccountManager, EmailBulkProvisioningPanel), payments (NexaPaymentWidget, EnrollmentPaymentFlow, PaymentStatusDashboard, PaymentConfigPanel), document/results (UploadZone, StudentRecordsTable, ResultsViewerSheet, AnalysisJobPanel, PipelineTimeline)
  • 15+ hooks — useUploadFile, useFileProgress, useGetUserDocuments, useGetFileStudentRecords, useGetPageRecords, useGetAnalysisJob, useGetFileStats, useRefinePageWithLLM, useUpdatePageRecord, useDeletePageRecord, useColumnSort, useGridNavigation

@nexa-ed/next

  • Single createRouteHandler(nexa) wires all routes: file uploads, SSE progress, Paystack webhooks, payment forwarding, oRPC queries

@nexa-ed/convex

  • nexaStudentEmailSchema schema fragment
  • makePaymentWebhookHandler factory

@nexa-ed/node

  • Express, Fastify, and Hono adapters (createExpressAdapter, createFastifyPlugin, createHonoAdapter)
  • Standalone verifyPaystackWebhook helper

create-nexaed-app

  • Interactive CLI — prompts for Convex URL, Clerk keys, email tier, and domain
  • Scaffolds Next.js + Convex app with all packages pre-wired

Platform — 2025-03-17

Added

  • oRPC data API — typed POST /api/rpc/[...orpc] endpoints for querying student records, analysis jobs, and document chunks. Authenticated via Clerk JWT.
  • Auth hardening — FastAPI now accepts Clerk JWTs (RS256, JWKS cached 1 hour) as well as internal shared-secret headers. Worker routes are secured via x-internal-secret.

Platform — 2025-03-10

Added

  • Document AI pipeline — async pipeline: upload → Trigger.dev → FastAPI OCR → Mastra agents → NeonDB. Supports PDF and image uploads.
  • Student records schema — student_records, subject_categories, results_analysis_jobs tables in NeonDB via Drizzle ORM.
  • Clerk → NeonDB bridge — POST /internal/provision-user on the worker provisions Clerk users into NeonDB on first document upload.

Platform — 2025-02-15

Added

  • Multi-tenant SaaS platform launch — tenant registration, provisioning, and API key management.
  • Paystack payment gateway integration — fee collection, webhook verification, subscription management.
  • Student email provisioning — Tier 1 (Nexa subdomain), Tier 2 (custom domain via Stalwart), Tier 3 (Google Workspace managed).

Info

For SDK-level changelogs and migration guides, see each package's CHANGELOG.md in the GitHub repository.