DotVVM Tailwind UI

Build beautiful, modern web apps
with Tailwind CSS-powered DotVVM controls.

Tailwind CSS styling

All controls are styled with Tailwind CSS. Customize the look and feel using your Tailwind config — no extra CSS needed.

Full MVVM support

Use data-binding on every control: menus, tables, badges, or notifications — all driven directly from your viewmodel.

Clean, readable markup

Replace complex Tailwind utility class stacks with concise DotVVM components. IntelliSense helps you discover every property.

30+ ready-made controls

From buttons and forms to data grids, modals, menus and notifications — everything you need to ship a polished app fast.

30+ controls built for modern apps

DotVVM Tailwind UI supports Tailwind CSS v3 and v4.

Buttons & Actions

The Button control renders a styled Tailwind button with support for types (primary, secondary, danger…), sizes, icons, and disabled states — all data-bindable. ButtonGroup and DropDownButton let you compose richer toolbars with minimal markup.

<t:Button Type="Primary" Text="Save" 
          Click="{command: Save()}" />
<t:Button Type="Secondary" Text="Cancel" />
<t:Button Type="Danger" Text="Delete" 
          Click="{command: Delete()}">
    <PostBack.Handlers>
        <t:ModalConfirmPostBackHandler 
            Message="Do you really want to delete the item?" />
    </PostBack.Handlers>
</t:Button>

<t:ButtonGroup>
    <t:Button Text="Day" />
    <t:Button Text="Week" />
    <t:Button Text="Month" />
</t:ButtonGroup>

<t:DropDownButton Text="Actions">
    <t:DropDownItem Text="Save changes" 
                    Click="{command: Save()}" />
    <t:DropDownItem Text="Delete item" 
                    Click="{command: Delete()}" />
</t:DropDownButton>

Forms & Inputs

Build validated forms quickly using TextBox, ComboBox, CheckBox, and RadioButton wrapped in the Form layout control. All controls integrate with DotVVM validation out of the box.

<t:Form>
    <t:TextBoxFormField LabelText="Name" 
                        Text="{value: Name}" />
    <t:ComboBoxFormField LabelText="Country"
                        DataSource="{value: Countries}"
                        SelectedValue="{value: Country}" />
    <t:DateTimePickerFormField LabelText="Date" 
                               SelectedDate="{value: Date}" />
    <t:CheckBoxFormField Text="I accept the terms" 
                         Checked="{value: AcceptTerms}" />
    <t:Button Type="Primary" Text="Submit" 
              Click="{command: Submit()}" />
</t:Form>

<t:Alert Type="Success" Text="Thanks! Your demo form is ready." 
         Visible="{value: Submitted}" />

GridView & DataPager

Display and page through data sets with the Tailwind-styled GridView and DataPager. Server-side sorting and paging work the same as with built-in DotVVM controls — just swap the tag prefix.

<t:GridView DataSource="{value: Orders}">
    <dot:GridViewTextColumn HeaderText="#"
                            ValueBinding="{value: Id}"
                            Width="56px"
                            AllowSorting="true" />
    <dot:GridViewTextColumn HeaderText="Customer"
                            ValueBinding="{value: Customer}"
                            AllowSorting="true" />
    <dot:GridViewTextColumn HeaderText="Total"
                            ValueBinding="{value: Total}"
                            FormatString="c"
                            Width="84px"
                            AllowSorting="true" />
</t:GridView>
<t:DataPager DataSet="{value: Orders}" />

Navigation: TopMenu & SideMenu

Build complete app shells with the TopMenu and SideMenu controls. Both are data-bindable, support active route highlighting, and render a responsive layout automatically.

<t:TopMenu>
    <StartTemplate>
        <t:SideMenuToggleButton />
    </StartTemplate>
    <EndTemplate>
        <t:MenuDropDownItem Text="Actions" Icon="Bolt">
            <t:MenuItem Text="Dashboard" Icon="Home" 
                        NavigateUrl="/Tailwind/Block4?page=Dashboard" />
            <t:MenuItem Text="Orders" Icon="ListBullet" 
                        NavigateUrl="/Tailwind/Block4?page=Orders" />
            <t:MenuItem Text="Customers" Icon="User" 
                        NavigateUrl="/Tailwind/Block4?page=Customers" />
        </t:MenuDropDownItem>
    </EndTemplate>
</t:TopMenu>

<t:SideMenu>
    <t:SideMenuSection Title="Workspace">
        <t:MenuItem Text="Dashboard" Icon="Home" 
                    NavigateUrl="/Tailwind/Block4?page=Dashboard" />
        <t:MenuItem Text="Orders" Icon="ListBullet" 
                    NavigateUrl="/Tailwind/Block4?page=Orders" />
        <t:MenuItem Text="Customers" Icon="User" 
                    NavigateUrl="/Tailwind/Block4?page=Customers" />
    </t:SideMenuSection>
</t:SideMenu>

Notifications & Alerts

Inform users without interrupting their workflow. The Notifications control shows toast messages triggered from the viewmodel, while Alert renders inline dismissible messages for validation feedback or status updates.

<t:Notifications Items="{value: Notifications}" />

<t:Button Type="Primary" Text="Save" 
          Click="{command: Save()}" />
<t:Button Type="Warning" Text="Review" 
          Click="{command: Review()}" />

<t:Alert Type="Success" Text="Changes saved successfully." 
         Visible="{value: ShowSuccess}" />
<t:Alert Type="Warning" Text="Please review the form." 
         Visible="{value: ShowWarning}" />