I have this form control which I slot in a label and an input. When I pass the attribute required to the attribute I can see in the HTML source code that its required="required". If I don't use Blade and plain old HTML it just says required in the HTML source code.
Yes, this is normal behavior for Laravel/Blade components.
When you use Blade components and pass attributes like required, Blade will render boolean attributes as required="required". This is valid HTML and is functionally identical to just required.
Both required and required="required" are equivalent from the browser's perspective.
The "short" form (required) is allowed in HTML5, but the long form is also valid and more explicit.
This behavior comes from PHP itself and how attributes are rendered when using functions like htmlspecialchars or attribute bag in Blade.
Example — Both are valid:
<input required>
<input required="required">
Blade just always outputs the "expanded" form for clarity and consistency, but it makes zero functional difference.