Simple text field — single line.
TextField::text("username").label("Username").required()
TextField::textSimple text field — single line.
TextField::text("username").label("Username").required()
TextField::emailEmail — automatically lowercased.
TextField::email("email").label("Email address").required()
TextField::passwordPassword — hashed via Argon2 by default. Disable with .no_hash().
TextField::password("password").min_length(10, "10 characters minimum").no_hash()
TextField::textareaMulti-line text area.
TextField::textarea("bio").label("Biography").rows(5)
TextField::richtextRich text — sanitised server-side.
TextField::richtext("content").label("Content").required()
TextField::urlURL — validated server-side.
TextField::url("website").label("Website")
NumericField::integerInteger — min/max validation.
NumericField::integer("age").min(0.0, "Positive").max(120.0, "Max 120").label("Age")
NumericField::floatDecimal number.
NumericField::float("price").min(0.0, "Positive").label("Price")
NumericField::percentPercentage — restricted between 0 and 100.
NumericField::percent("discount").label("Discount (%)")
NumericField::rangeSlider — min, max, default value.
NumericField::range("volume", 0.0, 100.0, 50.0).label("Volume")
BooleanField::newCheckbox — returns true/false.
BooleanField::new("accept").label("I''accept the terms").required()
BooleanField::radioYes/No radio button.
BooleanField::radio("newsletter").label("Subscribe").checked()
ChoiceField::newDropdown — static or dynamic options.
let opts = vec![ChoiceOption::new("fr", "France"), ChoiceOption::new("be", "Belgium")];
ChoiceField::new("country").label("Country").choices(opts).required()
RadioField::newRadio button group.
RadioField::new("role").label("Role")
.add_choice("admin", "Administrator")
.add_choice("user", "User")
CheckboxField::newMultiple checkboxes — returns Vec<String>.
CheckboxField::new("tags").label("Categories")
.add_choice("rust", "Rust").add_choice("web", "Web")
DateField::newDate — YYYY-MM-DD format.
DateField::new("birth_date").label("Date of birth").required()
TimeField::newTime — HH:MM format.
TimeField::new("meeting_time").label("Meeting time")
DateTimeField::newCombined date and time.
DateTimeField::new("event_start").label("Event start").required()
FileField::imageImage — 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::documentDocument — pdf doc docx txt odt.
FileField::document("cv").upload_to("media/docs").max_size_mb(10).required()
FileField::anyAny file type — customisable extensions.
FileField::any("data").allowed_extensions(vec!["csv", "json"]).upload_to("media/imports")
SlugField::newURL-friendly slug — validated server-side.
SlugField::new("slug").label("Slug").required()
ColorField::newHex colour picker.
ColorField::new("theme_color").label("Colour").default_color("#3b82f6")
UUIDField::newUUID — validated server-side.
UUIDField::new("ref_id").label("Reference").required()
JSONField::newJSON textarea — validated server-side.
JSONField::new("config").label("JSON configuration").rows(10)
IPAddressField::newIP address — IPv4 or IPv6.
IPAddressField::new("server_ip").label("Server IP").ipv4_only().required()