Available fields

TextField
TextField::text

Simple text field — single line.

TextField::text("username").label("Username").required()
TextField::email

Email — automatically lowercased.

TextField::email("email").label("Email address").required()
TextField::password

Password — hashed via Argon2 by default. Disable with .no_hash().

TextField::password("password").min_length(10, "10 characters minimum").no_hash()
TextField::textarea

Multi-line text area.

TextField::textarea("bio").label("Biography").rows(5)
TextField::richtext

Rich text — sanitised server-side.

TextField::richtext("content").label("Content").required()
TextField::url

URL — validated server-side.

TextField::url("website").label("Website")
NumericField
NumericField::integer

Integer — min/max validation.

NumericField::integer("age").min(0.0, "Positive").max(120.0, "Max 120").label("Age")
NumericField::float

Decimal number.

NumericField::float("price").min(0.0, "Positive").label("Price")
NumericField::percent

Percentage — restricted between 0 and 100.

NumericField::percent("discount").label("Discount (%)")
NumericField::range

Slider — min, max, default value.

50
NumericField::range("volume", 0.0, 100.0, 50.0).label("Volume")
BooleanField
BooleanField::new

Checkbox — returns true/false.

BooleanField::new("accept").label("I''accept the terms").required()
BooleanField::radio

Yes/No radio button.

BooleanField::radio("newsletter").label("Subscribe").checked()
ChoiceField
ChoiceField::new

Dropdown — static or dynamic options.

let opts = vec![ChoiceOption::new("fr", "France"), ChoiceOption::new("be", "Belgium")];
ChoiceField::new("country").label("Country").choices(opts).required()
RadioField::new

Radio button group.

RadioField::new("role").label("Role")
    .add_choice("admin", "Administrator")
    .add_choice("user", "User")
CheckboxField::new

Multiple checkboxes — returns Vec<String>.

CheckboxField::new("tags").label("Categories")
    .add_choice("rust", "Rust").add_choice("web", "Web")
DateField
DateField::new

Date — YYYY-MM-DD format.

DateField::new("birth_date").label("Date of birth").required()
TimeField::new

Time — HH:MM format.

TimeField::new("meeting_time").label("Meeting time")
DateTimeField::new

Combined date and time.

DateTimeField::new("event_start").label("Event start").required()
FileField
FileField::image

Image — jpg jpeg png gif webp avif. Dimension validation possible.

FileField::image("avatar").upload_to("media/uploads").max_size_mb(5).max_dimensions(500, 500)
FileField::document

Document — pdf doc docx txt odt.

FileField::document("cv").upload_to("media/docs").max_size_mb(10).required()
FileField::any

Any file type — customisable extensions.

FileField::any("data").allowed_extensions(vec!["csv", "json"]).upload_to("media/imports")
SpecialField
SlugField::new

URL-friendly slug — validated server-side.

SlugField::new("slug").label("Slug").required()
ColorField::new

Hex colour picker.

ColorField::new("theme_color").label("Colour").default_color("#3b82f6")
UUIDField::new

UUID — validated server-side.

UUIDField::new("ref_id").label("Reference").required()
JSONField::new

JSON textarea — validated server-side.

JSONField::new("config").label("JSON configuration").rows(10)
IPAddressField::new

IP address — IPv4 or IPv6.

IPAddressField::new("server_ip").label("Server IP").ipv4_only().required()
HiddenField
HiddenField::new

Hidden field — value submitted without visible rendering.

<input type="hidden" value="..."> — invisible in final rendering
HiddenField::new("redirect_to")