moneyField returns a Number field that stores an amount in one currency. The admin panel shows the amount formatted in that currency and edits it in a money input, and agents and generated types are told what the number means. You don’t name any components or write a formatter.
number field, so it works anywhere a field does, including inside groups, arrays, tabs and blocks.
Config options
A money field holds one amount, so
hasMany, minRows and maxRows are not accepted. TypeScript rejects them, and hasMany: true from JavaScript fails at startup.
Invalid options fail when the config is built, with an error naming the field:
Admin options
Money fields support the standard field admin options, plus these options:
FrogBot stores the field’s currency and precision in
admin.custom.frogbot.kind. Your own admin.custom keys, and other keys under admin.custom.frogbot, are kept.
Display and editing
Withprecision: 'auto', amounts of at least one minor unit of the currency (one cent for USD, ¥1 for JPY, 0.001 for BHD) use the currency’s standard decimals. Smaller amounts that aren’t zero show up to 3 significant digits, so a real amount never reads as zero. Negative amounts follow the same rule by size.
A number
precision always shows exactly that many decimals: precision: 4 shows 1.5 as $1.5000, and precision: 0 shows 1234.5 as $1,235.
Amounts are formatted in the admin’s selected language, so the same value shows as $1,234.50 in English and 1.234,50 $ in German. The currency always comes from the field.
An empty value (missing, null, or not a number) shows nothing: no placeholder and no dash. A stored 0 is an amount and shows as $0.00.
Money looks the same in the List, on Board cards and in Calendar events. In the document view, an editable money field is a number input with the currency symbol before it. Type the amount in whole units, such as 12.5 for $12.50; it is saved as typed, and clearing the input saves an empty value. The label, description, validation errors, min, max, required and a custom validate work as on a Number field.
When the field is read-only, because of admin.readOnly, because it is virtual, or because the user may not update it, the document view shows the formatted amount as text with no input. An empty value shows no amount.
If a money field is the first List column, a row with an empty value has no link to open the document from that column.
Stored value
Amounts are stored as decimals in whole currency units:1.5 means $1.50, and 0.000173 is valid. Nothing is rounded on save. The REST API, GraphQL and the Local API return a plain number, and the generated TypeScript type is the same as a Number field’s, such as price?: number | null.
Agents and generated types
A money field describes itself to agents using FrogBot’s MCP tools and in generated types. The text names the field’s currency:admin.description, or a translated one with an en entry, the money text is added after it in parentheses. The admin panel still shows only your description.
admin.description isn’t copied, so the money text stands alone. The text is English only.
Generated types show the text as a comment above the property. In the MCP plugin’s create and update tools, min and max also become the value’s minimum and maximum, so agents see the allowed range. Generated types don’t include limits, and virtual fields don’t appear in MCP tool inputs.
To change the text, add your own jsonSchema entry. It runs after the money field’s entry, so it can adjust or replace the description:
Formatting in your code
formatMoney is the formatter money fields use. Import it from frogbot/fields, which is safe to use in browser code:
formatMoney returns the formatted string, or '' for an empty value. frogbot/fields also exports the FormatMoneyArgs, MoneyKind and MoneyPrecision types.
Custom components
The money cell and input areMoneyCell and MoneyField from @frogbotai/ui/admin. Your own admin.components.Cell or admin.components.Field replaces them, and other components such as Label, Description, Error, beforeInput and afterInput work with the money input as they do on a Number field.
A custom Cell can draw the standard money display inside its own markup with FieldCell: