Roadmap
What's coming next for RilayKit. Our public roadmap organized by priority phases, from AI-powered form filling to visual DevTools.
Roadmap
Public roadmap, organized by phase. Priorities may shift with community feedback. Code samples in unshipped phases are proposals, not final APIs.
Want to influence the roadmap? Open a discussion or upvote existing proposals.
Phase 5 — AI-Assisted Form Filling
Status: Next up
The foundation shipped: @rilaykit/agent lets an LLM render forms and flows as chat tools (show_form, show_flow, show_component) with AI SDK and Anthropic adapters. Next: letting an LLM fill an existing form from unstructured text. Since RilayKit forms are data, the AI knows every field's type, constraints, and validation rules.
useAIFormFill() — Text-to-Form Mapping
const { fillFromText, isProcessing } = useAIFormFill(formConfig, {
provider: 'openai', // or 'anthropic', 'custom'
});
await fillFromText(
"My name is Karl, I live in Paris, my email is karl@example.com"
);
// → setValue('name', 'Karl')
// → setValue('city', 'Paris')
// → setValue('email', 'karl@example.com')Unlocks paste-to-fill from emails or transcripts, voice-to-form via speech-to-text, and bulk import from unstructured sources.
Opt-in and provider-agnostic — RilayKit will not bundle an AI SDK.
Phase 2 — Data Transform Pipeline
Status: Planned
Declarative transforms around submission — sanitization, field exclusion, reshaping — without onSubmit boilerplate.
transform() — Pre/Post Submission Hooks
form.create(r, 'register')
.add(/* fields */)
.transform({
before: (data) => ({
...data,
email: data.email.trim().toLowerCase(),
}),
after: (data) => omit(data, ['confirmPassword', 'acceptTerms']),
})
.build();Phase 3 — Cross-Step Workflow Validation
Status: Planned
Form-level cross-field validation already shipped (setValidation({ validate }), path-routed errors, useFormErrors()), but each workflow step still validates independently. This phase adds rules that span steps, reusing the same path-keyed error routing.
crossValidate() — Multi-Step Validation Rules
flow.create(r, 'checkout', 'Checkout')
.step({ id: 'shipping', title: 'Shipping', formConfig: shippingForm })
.step({ id: 'billing', title: 'Billing', formConfig: billingForm })
.crossValidate({
validate: (allData) => {
const errors: Record<string, string> = {};
if (allData.billing.sameAsShipping && !allData.shipping.address) {
errors['shipping.address'] = 'Required when "same as shipping" is checked';
}
return errors;
},
trigger: 'before-complete' // or 'on-step-leave'
})
.build();Phase 6 — DevTools
Status: Planned
A visual inspector panel (similar to React Query DevTools) surfacing form and workflow state in real time.
<RilayDevTools /> — Visual Inspector
<FormProvider formConfig={loginForm}>
<Form />
{process.env.NODE_ENV === 'development' && <RilayDevTools />}
</FormProvider>Planned capabilities:
- Field Inspector — live values, errors, touched state, active conditions
- Condition Graph — which fields affect which conditions
- Validation Timeline — validation runs with timing and results
- Workflow Navigator — step state, visited/passed steps, accumulated data
- Performance Panel — render counts and hotspots, powered by the existing monitoring system in
@rilaykit/core
Phase 7 — Plugin System
Status: Exploring
A public plugin API for extending form and workflow behavior. The WorkflowPlugin type already exists internally — this phase promotes and documents it.
createPlugin() — Lifecycle Hooks
import { createPlugin } from 'rilaykit';
const autosavePlugin = createPlugin({
id: 'autosave',
onFieldChange: debounce(async (fieldId, value, { allValues }) => {
await saveDraft(allValues);
}, 1000),
onStepComplete: (stepId, stepData) => {
analytics.track('step_completed', { stepId });
},
});
flow.create(r, 'onboarding', 'Onboarding')
.configure({ plugins: [autosavePlugin] })
.build();Community plugin ideas: autosave, analytics, A/B testing, feature flags, undo/redo.
Completed
Shipped in the current release:
| Feature | Package | Status |
|---|---|---|
| Immutable component registry | @rilaykit/core | Shipped |
| Standard Schema validation (Zod, Valibot, Yup, ArkType) | @rilaykit/core | Shipped |
Declarative conditions with when() builder | @rilaykit/core | Shipped |
| Performance monitoring & adapters | @rilaykit/core | Shipped |
| Form builder with type-safe field config | @rilaykit/forms | Shipped |
| Granular Zustand store selectors | @rilaykit/forms | Shipped |
| Repeatable fields with min/max | @rilaykit/forms | Shipped |
Async field validation with debounceMs | @rilaykit/forms | Shipped |
Validation timing — mode / reValidateMode (RHF model) | @rilaykit/forms | Shipped |
Path-keyed error map + useFormErrors() form-level bucket | @rilaykit/forms | Shipped |
| Multi-step workflow builder | @rilaykit/workflow | Shipped |
| Step navigation with validation guards | @rilaykit/workflow | Shipped |
| Workflow persistence (LocalStorage, type-faithful serialization) | @rilaykit/workflow | Shipped |
Completion meta — onComplete(data, meta) with visited/skipped/passed steps | @rilaykit/workflow | Shipped |
| Workflow analytics hooks | @rilaykit/workflow | Shipped |
| Step conditions (visible, skippable) | @rilaykit/workflow | Shipped |
All-in-one rilaykit package with .form() / .flow() | rilaykit | Shipped |
Field effects with onChange() — cascades, dynamic props, calculated fields | @rilaykit/core + @rilaykit/forms | Shipped |
useFieldProps hook for dynamic field props | @rilaykit/forms | Shipped |
Server-driven forms — fromSchema(), compileForm, validateSchema, isFormSchema | @rilaykit/forms | Shipped |
Server-driven flows — compileFlow | @rilaykit/workflow | Shipped |
Agent chat tools — show_form / show_flow / show_component with human-in-the-loop resolution | @rilaykit/agent | Shipped |
manifest() — catalog to Markdown for system prompts | @rilaykit/agent | Shipped |
AI SDK & Anthropic adapters (rilaykit/ai-sdk, rilaykit/anthropic) | rilaykit | Shipped |
RSC-safe isomorphic entries (React-free mains, /react client entries) | all packages | Shipped |