Skip to Content
ConceptsQuestion Types

Question Types

19 question types are declared, each checked against the Postgres question_type enum, the TS SurveyQuestionType enum, and every platform’s renderer/router — one canonical set, not per-platform lists that happen to agree:

TypeNotes
MULTIPLE_CHOICE_SINGLE
MULTIPLE_CHOICE_MULTI
TEXT_SHORT
TEXT_LONG
NPS
RATING_STAR
RATING_SCALE
NUMBER_INPUT
BINARY
SLIDER
IMAGE_SELECTION
RANKING
CONTINUOUS_SUM
MATRIX_CHOICE_SINGLEMatrix; empty column list if config.columns is missing (no numeric fallback).
MATRIX_CHOICE_MULTISame as above.
MATRIX_RATING_SCALEDerives numeric columns from config.min/config.max when config.columns is absent.
MATRIX_STAR_RATINGDerives numeric columns from config.max when config.columns is absent.
EMAIL_INPUT
DATE_TIME

Every platform’s router also asserts the negative direction — that nothing outside this set resolves successfully. DROPDOWN is not a real type: it’s guarded against explicitly as a stray alias, so a re-introduced DROPDOWN branch in any renderer fails the gate instead of silently working again. If you see it referenced in older material, it never shipped.

FILE_UPLOAD was removed (not merely unimplemented) after it turned out the web renderer had no multipart endpoint to receive uploads and mobile had no renderer at all — implementing it would have made three platforms consistent at collecting something that goes nowhere.

Randomization

config.randomizeOptions shuffles the option list for the types where that makes sense (choice-based and matrix types); it’s a no-op for types like CONTINUOUS_SUM that aren’t in the randomizable set, regardless of the flag.