Describe the module. Ship it this afternoon.

Serenity is the ASP.NET Core and TypeScript framework for line-of-business apps. You describe a table, its columns and its form in a few attributed classes. Serenity builds the grid, the edit dialog, the endpoint and the permission checks around them.

Serenity and the Serene template are free and open source under MIT. StartSharp adds premium modules, themes and support.

Trusted by teams at Bosch, Telstra, Xerox, Yokogawa and more

Bosch Telstra Xerox Yokogawa SoftwareOne Schenck Process Brevan Howard Signum NextGen Megasoft Matrix Lucrasoft Elypsia Svam Plus Eyenoa Tinint WN1IT

Three classes describe a whole module.

Serenity handles all the plumbing behind the scenes. This is the Orders module from the demo above. The row describes the table, and the list and the dialog read their fields from it. Each class maps to a screen your users get.

OrderRow.cs

The table

Fields, joins, lookups and who may read or change them. Validation and permission checks come from these attributes.

LookupsCalculated fieldsPermission checksAudit log
[ConnectionKey("Northwind"), Module("Northwind"), TableName("Orders")]
[DisplayName("Orders"), InstanceName("Order")]
[ReadPermission(PermissionKeys.General)]
public sealed class OrderRow : Row<OrderRow.RowFields>, IIdRow
{
    [DisplayName("Order ID"), Identity, IdProperty]
    public int? OrderID { … }

    [DisplayName("Customer"), NotNull]
    [ForeignKey(typeof(CustomerRow)), LeftJoin("c")]
    [LookupEditor(typeof(CustomerRow))]
    public string CustomerID { … }

    [DisplayName("Order Date"), NotNull]
    public DateTime? OrderDate { … }
}
OrderColumns.cs

The list

Which columns show, their width, links and quick filters. Everything else about each field comes from OrderRow.

Reads its fields from OrderRow

Paging & sortingFiltersExcel & PDF export
[ColumnsScript("Northwind.Order")]
[BasedOnRow(typeof(OrderRow), CheckNames = true)]
public class OrderColumns
{
    [EditLink, AlignRight, Width(80)]
    public string OrderID { get; set; }

    [EditLink, Width(220)]
    public string CustomerCompanyName { get; set; }

    [QuickFilter, Width(100)]
    public DateTime? OrderDate { get; set; }
}
OrderForm.cs

The dialog

Tabs, categories, editors and the master-detail grid for order lines.

Reads its fields from OrderRow

ValidationTabsMaster-detail
[FormScript("Northwind.Order")]
[BasedOnRow(typeof(OrderRow), CheckNames = true)]
public class OrderForm
{
    [Tab("General"), Category("Order")]
    public string CustomerID { get; set; }
    public DateTime? OrderDate { get; set; }

    [Category("Order Details")]
    public List<OrderDetailRow> DetailList { get; set; }
}

The screens your users will work in.

Taken from the StartSharp demo with its default Azure theme. Every module you add looks and behaves like these.

A platform that keeps up with .NET.

Serenity ships often. These are from this year's releases.

10.1.NET 10Current runtime, import maps and tighter content security policy.
10.2Developer Tools for ChromeA Chrome extension built for Serenity developers.
10.5Async request handlersAsync end to end, and generated code follows.
10.6Security by defaultPermission checks fail closed and sensitive fields are protected automatically.
10.6.1175,000 iconsSVG mask icons, with a browser at serenity.is/icons.
MITOpen source coreSerenity and Serene are free for any project.

Proven since 2007.

Serenity is thoroughly tested, and StartSharp customers get professional support from the team that builds it.

19,000+Automated tests.NET and TypeScript tests cover Serenity and StartSharp.
Since 2007Customer experienceShaped by real projects and customers since 2007.
SupportProfessional supportDirect help from the Serenity team with StartSharp.

What teams say after shipping.

StartSharp editions.

The premium template with extra modules, samples and themes, plus direct support from the Serenity authors. Prices are per 12 months.

Details are in the StartSharp documentation. Questions about licensing: sales@serenity.is