Ruby gem by Nick Sutterer providing a declarative API for form objects with properties, collections, nested forms and contextual validations as a class separate from the model. Works with both HTML views (simple_form compatible) and API use cases. Motivated by dissatisfaction with Rails' accepts_nested_attributes_for, which only supported one form per model and forced ifs/else into models. Reform 2's runtime API centered on one mutable form instance used for rendering, validation and persistence (form.validate, form.save, populators for nested object creation); this proved error-prone and was the main source of bugs and misuse. Reform 3 (presented at wroclove.rb 2022) keeps the DSL but replaces the runtime with class methods returning immutable objects: Reform.present, Reform.validate (returns a result object), persist. Rewritten internally on top of Trailblazer activities for tracing and composable step pipelines, makes strong_parameters obsolete, supports dry-validation or Active Record validations, and can use ROM (change sets) instead of Active Record. Part of the Trailblazer framework but usable standalone; Reform 2 and Reform 3 can coexist in one app.