DotVVM is an open-source framework for ASP.NET. It lets you create web apps using the MVVM pattern, with just C# and HTML.
DotVVM can be used to build new ASP.NET Core web apps, or to modernize legacy ASP.NET apps and migrate them to .NET 8.

Ready-made controls

Save your time with GridView, FileUpload and other components shipped with the framework.

Lightweight

DotVVM needs less than 100 kB of JavaScript code. It's smaller than other ASP.NET-based frameworks.

Skip building APIs

Don't spend the time building an API. Just load data from the database and use data-binding to display them.

Fits in .NET ecosystem

DotVVM offers a free Visual Studio extension giving you all the comfort you are used to.

Easy to learn

Use DotVVM components in markup

DotVVM comes with ready-made components you can use in your HTML files.

Write ViewModels in C#

The state and user interactions are handled in viewmodels - C# classes.

Use CSS to style controls

The controls render simple HTML which can be styled easily.

<div class="form-group">
    <dot:TextBox Text="{value: Number}" />

    <dot:Button Text="Increment"
                Click="{command: Increment()}" />
</div>
public class IncViewModel 
{
  public int Number { get; set; }

  public void Increment() 
  {
    Number++;
  }
}
<dot:Button Text="Increment"
            Click="{command: Increment()}"
            class="btn btn-default" />
<dot:ComboBox DataSource="{value: Category}" 
    SelectedValue="{value: SelectedCategory}" />

<dot:TextBox Text="{value: OtherCategory}" 
    Enabled="{value: Category == "Other"}" />
[Required]
[EmailAddress]
public string CustomerEmail { get; set; }
<div Validator.InvalidCssClass="has-error" 
     Validator.Value="{value: FirstName}">
  <dot:TextBox Text="{value: FirstName}" />
</div>

<dot:ValidationSummary 
    class="alert alert-danger" />

Take advantage of powerful data-binding

MVVM pattern and data-binding expressions are used to access the UI components.

Validate with data annotation attributes

DotVVM integrates with common .NET validation mechanisms and practices.

Define how the validation should look like

You have plenty of options how to indicate invalid fields, for example using a CSS class.

HTML enhanced with DotVVM components

<div class="form-group">
    <dot:TextBox Text="{value: Number}" />

    <dot:Button Text="Increment"
                Click="{command: Increment()}" />
</div>

ViewModels written in C#

public class IncViewModel 
{
    public int Number { get; set; }

    public void Increment() 
    {
        Number++;
    }
}
DotVVM Academy illustration

Try DotVVM in the browser

Take a few short lessons and learn the basic principles of DotVVM at the DotVVM academy, or get the Visual Studio extension and start a new project.

You can find videos about DotVVM on our channel.

Not sure if DotVVM is the best good choice for you?

We'll be happy to talk with you and see whether DotVVM can help in your scenario.