text
Odoo's Multiline Text widget: the auto-growing textarea behind every notes box. Two documented options, two undocumented ones, and a quiet type change in Odoo 19.
| Studio name | Multiline Text |
|---|---|
| Technical name | text |
| Field types | text, char, html |
| Views | form, list, kanban |
| Also registered as | list.text |
| Module | web, present in every Odoo database |
| Used in core | 25 explicit occurrences across 17 modules, including mail, project, hr_holidays, website_slides, hr_timesheet, product, plus every Text field rendered by default |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0 |
| No-code setup | Yes, via Odoo Studio (Enterprise): the Multiline Text field type |
| Alternatives | char, html, text_emojis, sol_text |
What the Multiline Text field does
What this means for your team
Setting it up in Odoo Studio (no code)
What Studio cannot do here
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
line_breaks | boolean | When false, the Enter key is suppressed, the field renders one row high and the autoresize floor drops to zero. Stored newlines are not stripped.(default: true) |
placeholder_field | field name | Declared in supportedOptions but never read by this widget's extractProps in 19.0. Setting it has no effect here; the dynamic placeholder feature uses the two options below. |
dynamic_placeholder | boolean | Enables the dynamic placeholder picker, inserting {{object....}} expressions at the cursor. Read in extractProps; appears in no documentation.(default: false) |
dynamic_placeholder_model_reference_field | field name | Field on the current record naming the model the placeholder picker browses. Used with dynamic_placeholder. Also undocumented. |
line_breaks: false changes three things at once, all visible in the source: the Enter key is suppressed in the input hook, the rendered height drops to a single row, and the minimum height falls to zero. It does not strip newlines already stored in the value.
Working examples
Trim rules, the unread option, and the 19-only char support
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. The development branch shows identical options and types; internals only. See below. |
| Odoo 19.0 | Verified | Verified against the shipped source. char joins html and text as a declared type. |
| Odoo 18.0 | Partial / changed | Same options, but declared types are html and text only; char is not a supported combination. |
| Odoo 17.0 | Verified | Widget present with the same registry name. Not re-verified line by line for this page. |
| Odoo 16.0 | Verified | Widget present with the same registry name. Not re-verified line by line for this page. |
Upgrade note. Views from 16 through 18 carry over unchanged. The one addition to know: putting widget="text" on a char field only became a declared, supported combination in 19, so backport that pattern with care.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| Enter key does nothing in the field | line_breaks is set to false, which suppresses it by design. Remove the option if multiline entry is wanted. |
| placeholder_field option has no effect | The option is declared but never read by this widget's extractProps in 19. Use dynamic_placeholder with dynamic_placeholder_model_reference_field instead. |
| Trailing spaces disappear on save | The field definition carries the ORM trim flag; the widget trims on blur when it does. Define the field with trim disabled if trailing whitespace is meaningful. |
| HTML field shows raw tags instead of the editor | widget="text" on an html field edits markup without the editor, by design. Remove the widget override to get the rich-text editor back. |
| Field starts too short on the form | The default starting height is two rows. Set rows="5" or similar on the field in the view. |
| Same field renders one row in the list but taller on the form | The separately registered list.text variant starts at one row inside list cells. Expected behavior; no action needed. |
Multiline Text field vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
text | Plain multiline text: notes, descriptions, instructions | Auto-growing textarea with spellcheck, translation flag and placeholder support |
char | Single-line values and identifiers | One line, no growth, size-capped storage |
html | Formatted content: descriptions, emails, terms | Full rich-text editor storing markup |
text_emojis | Multiline text with an emoji picker, as in SMS composers | Adds the emoji button to the same textarea |
sol_text | Sale order line descriptions | Sale-specific variant tuned for line notes |
Frequently asked questions
What is the text widget in Odoo?+
How do I make a Text field start taller?+
How do I stop users entering line breaks?+
Can I use the text widget on a char field?+
What does the text widget do on an HTML field?+
How does the dynamic placeholder work?+
Will the text widget change in Odoo 20?+
Forms that collect the right words?
Notes fields sized to their job, single-line rules where reports demand them, and template placeholders your team can actually use: small text-field tuning with outsized data-quality payoff. We polish Odoo forms like this across 16 to 19.
Book a free consultation