# Simple Form

The migration bridge from Simple Form: one initializer re-maps f.input onto Poetry fields, so existing forms restyle without a rewrite.

The migration bridge from Simple Form: `bin/rails g poetry:simple_form:install` writes one initializer (`Poetry::SimpleForm.activate!`) that re-maps the input types onto classes rendering whole Poetry fields through `Poetry::Ui::FormBuilder`, so existing `f.input` calls keep working with label, hint, error, and aria derived from the model on the same path the native builder uses. Every stock type maps to a Poetry control (`:datetime` to the composite date-time field) and the types Simple Form never had are reached through `as:` (`:switch`, `:slider`, `:otp`, `:sensitive`, `:tag_group`, `:date_picker`, `:calendar`, `:combobox`, `:autocomplete`, `:native_select`); the table is `Poetry::SimpleForm::COVERAGE`, gated by a parity test. `f.association` works unchanged with `label_method:` / `value_method:` honored, `required:` overrides the presence inference (aria only), `poetry:` options merge last, `input_html` lands on the control minus class and id, and `simple_form.*` i18n keys keep resolving. `:rich_text_area`, `:hidden`, and `:country` stay stock on purpose. Simple Form contributes only type resolution; its wrapper tree is bypassed by design. Delete the initializer to restore stock rendering instantly; the end state is `form_with(model:, builder: Poetry::Ui::FormBuilder)` per the [form builder guide](/forms).
