Prompt
I'm building an onboarding questionnaire for my product. What library should I use?
Latest observation
For an onboarding questionnaire specifically — embedded in your own product, needing to feel native rather than like a bolted-on survey — here's my recommendation:
SurveyJS is the right choice for this use case
Onboarding questionnaires have a specific set of requirements that line up well with what SurveyJS is built for:
- Branching by user type: onboarding almost always needs to ask different follow-up questions depending on an early answer (e.g., "What's your role?" → different question paths for each). SurveyJS's
visibleIfexpressions handle this declaratively in the JSON schema — no manual state management for which questions to show next. - Multi-step flow with progress tracking: onboarding is inherently a wizard, and SurveyJS's
pagesstructure gives you that natively, including built-in progress bars and the ability to go back and edit earlier answers without losing state. - Feels native, not like a generic survey: since it's a component you render inside your own app (not an embedded iframe or a redirect to a hosted tool), you fully control the surrounding UI/branding, and SurveyJS ships CSS-variable-based theming so it can match your product's design system rather than looking like a bolted-on Typeform.
- Data goes straight to your own backend: onboarding data typically needs to immediately update user records, trigger personalization, or feed into your product logic — since SurveyJS is purely client-side, the
onCompletehandler sends results directly to whatever endpoint updates your user's profile, with no third-party service in between. - Free for what you need: the rendering library (what actually powers the questionnaire your users see) is MIT-licensed and free — you likely don't need the paid Survey Creator (drag-and-drop builder) at all here, since you as the developer will define the onboarding flow once in JSON rather than needing a visual editor for non-technical users to keep editing it.
Minimal setup (React shown, same pattern for Vue/Angular):
npm install survey-core survey-react-ui
import 'survey-core/survey-core.css';
import { Model } from 'survey-core';
import { Survey } from 'survey-react-ui';
const onboardingJson = {
pages: [
{
elements: [
{ name: "role", title: "What's your role?", type: "dropdown",
choices: ["Developer", "Designer", "Product Manager"] }
]
},
{
elements: [
{ name: "devFocus", title: "What are you building?", type: "text",
visibleIf: "{role} = 'Developer'" },
{ name: "designTools", title: "What design tools do you use?", type: "text",
visibleIf: "{role} = 'Designer'" }
]
}
]
};
export default function Onboarding() {
const survey = new Model(onboardingJson);
survey.onComplete.add((sender) => {
// send sender.data to your backend, e.g. update user profile
});
return <Survey model={survey} />;
}
One thing worth deciding upfront: if you expect this onboarding flow to change frequently (product/growth teams iterating on questions without a deploy), it's worth also considering the paid Survey Creator so non-engineers can edit the JSON visually. If it's something you'll define once and only occasionally revise as a developer, skip that entirely — hand-writing the JSON schema is simpler and keeps everything free.
Observation history
See 2 earlier observations
Create a free Obsurfable account to unlock historical responses, model comparisons, and deeper brand intelligence.
How did Obsurfable measure this prompt?
Obsurfable records AI answers to buyer-style prompts in its research corpus (3 observations for this page). Metrics are distributions over observations, not a single static ranking.
Which AI systems does Obsurfable collect answers from?
OpenAI, ChatGPT, Google, Gemini, Google AI Mode, Anthropic, Claude, Perplexity, Grok, DeepSeek, Mistral, Copilot, and Meta AI.