HeyForm is an open source form builder built around conversational, one-question-at-a-time forms rather than traditional grid layouts. It targets small businesses that want to gather information or feedback through surveys, quizzes, and polls, and it's available as a hosted cloud service or a self-hosted deployment. The project is maintained as a monorepo of focused packages rather than one large application, which keeps the embed script, renderer, and server independently versioned. The maintainers describe HeyForm as a two-person team behind the hosted service, and they frame choosing the hosted plan as a way to support continued development of the open source project rather than only as a convenience.
HeyForm can be self-hosted following the installation instructions in its documentation, or deployed with one click to Railway, Zeabur, Sealos, Alibaba Cloud ComputeNest, or RepoCloud. The codebase is organized as packages for the embed script, form renderer, shared types, server, and web app, so self-hosters run the server and webapp packages together while the embed library ships separately for use on external sites. Local development follows a separate set of documented steps for contributors who want to run the full monorepo, including both server and webapp, without deploying to any of the one-click targets.
The stack is TypeScript throughout, split into a Node.js server package and a React web app package, with a separate embeddable JavaScript library for embedding forms on external sites. Form submission utilities are shared between the server and webapp through a dedicated answer-utils package, keeping validation logic consistent on both sides. A shared-types-enums package centralizes type definitions so the server and webapp packages don't drift out of sync as the schema for questions, answers, and form settings evolves. A form-renderer package handles turning that schema into the actual conversational question flow shown to respondents, decoupled from both the editor and the embed script, which lets the rendering logic be reused across the hosted webapp and any embedded instance without duplicating it.