Stonehenge 4
Open Source · MIT-Lizenz · .NET 8 und .NET 10
Web-Oberflächen für .NET-Anwendungen – nur mit C# und HTML
Stonehenge ist ein Open-Source-Framework für .NET nach dem MVVM-Muster. Sie schreiben ViewModels in C# und Views in HTML; Datenbindung, Aktionen und Live-Updates erledigt Stonehenge. Dieselbe Anwendung läuft als Desktop-Fenster oder als Web-App im Browser.
app/start.html
<!--ViewModel:StartVm-->
<div>
<p>Hallo von {{ComputerName}}!</p>
<p>Geklickt: {{CountPressed}}</p>
<button class="btn btn-primary"
@click="ButtonPressed()">
Klick mich
</button>
</div> ViewModels/StartVm.cs
public class StartVm : ActiveViewModel
{
public string ComputerName => Environment.MachineName;
public int CountPressed { get; private set; }
[ActionMethod]
public void ButtonPressed()
{
CountPressed++;
}
} Hallo Stonehenge Start
Hallo von WERKSTATT-PC!
Geklickt: 3
- in Entwicklung seit
- 2013
- Lizenz, auch kommerziell frei
- MIT
- unterstützte .NET-Versionen
- .NET 10 · 8
- Betriebssysteme: Windows, Linux, macOS
- 3
Warum Stonehenge
Die Oberfläche im Browser, die Logik in C#
Stonehenge verbindet bewährte Web-Technik mit dem MVVM-Muster, das .NET-Entwickler kennen. Kein eigener Client-Code nötig, keine API von Hand.
-
Ein Code für Desktop und Web
Die Anwendung öffnet sich in einem eigenen Fenster des installierten Browsers – Chrome, Edge, Brave, Firefox oder Safari – oder läuft als Web-Server für viele Nutzer.
-
Keine API von Hand
Öffentliche Properties und mit [ActionMethod] markierte Methoden sind automatisch an die View gebunden. Kein REST-Controller, kein Client-Proxy, kein JSON-Mapping.
-
Live-Updates vom Server
Server-Sent Events oder Polling: Ändert sich ein Wert im ViewModel, sieht der Browser es sofort. Ein Update-Timer liefert Messwerte und Status im Takt.
-
Anmeldung eingebaut
Basic Auth mit .htpasswd-Datei (bcrypt, Apache MD5, SHA), NTLM unter Windows und Keycloak – jeweils mit einer Host-Option.
-
Mehrsprachig, mit Themes
Texte aus .resx-Ressourcen, die Sprache auf Wunsch aus dem Browser. Themes als CSS-Dateien, wählbar auch über die Subdomain.
-
Kestrel, IIS oder Reverse-Proxy
Selbst gehostet mit Kestrel oder hinter IIS; Basispfad und X-Forwarded-Header werden berücksichtigt. Sitzungen ganz ohne Cookies.
So funktioniert es
MVVM über die Leitung
Jede Seite besteht aus einer HTML-View und einem C#-ViewModel mit passendem Namen. Stonehenge liefert die View aus, hält das ViewModel je Sitzung auf dem Server und gleicht beide automatisch ab.
View
HTML mit Vue.js-2-Vorlagen und Bootstrap 5: {{Bindung}}, @click, v-for
Aktionen und Eingaben
geänderte Werte
Stonehenge
Sitzung, Datenbindung, Aktionen, Server-Push per SSE oder Polling
Aktionen und Eingaben
geänderte Werte
ViewModel
C#-Klasse, abgeleitet von ActiveViewModel: Properties und [ActionMethod]
Schnellstart
In drei Schritten zur ersten Anwendung
Voraussetzung ist das .NET SDK 8 oder 10. Wichtig: Das Projekt nutzt das SDK Microsoft.NET.Sdk.Web – die Vorlage „web“ legt es so an.
-
Projekt anlegen, Paket hinzufügen
Ein leeres Web-Projekt anlegen und das NuGet-Paket IctBaden.Stonehenge4 hinzufügen. Damit die Views mit ausgeliefert werden, kommt der Ordner app in die Projektdatei.
Terminal
dotnet new web -n HalloStonehenge cd HalloStonehenge dotnet add package IctBaden.Stonehenge4*.csproj
<ItemGroup> <Content Include="app\**\*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup> -
Server starten
Program.cs wählt Vue.js als Client-Framework und Kestrel als Host. HostWindow öffnet die Anwendung als Desktop-Fenster; für den Betrieb als Web-Server wartet das Programm stattdessen auf Strg+C.
using IctBaden.Stonehenge.Hosting; using IctBaden.Stonehenge.Kestrel; using IctBaden.Stonehenge.Resources; using IctBaden.Stonehenge.Vue; using var loggerFactory = LoggerFactory.Create(b => b.AddConsole()); var logger = loggerFactory.CreateLogger("stonehenge"); var options = new StonehengeHostOptions { Title = "Hallo Stonehenge", ServerPushMode = ServerPushModes.ServerSentEvents }; var vue = new VueResourceProvider(logger); var loader = StonehengeResourceLoader.CreateDefaultLoader(logger, vue); var host = new KestrelHost(loader, options); if (!host.Start("localhost", 32000)) return 1; // Als Desktop-Anwendung: eigenes Fenster, Ende beim Schließen using var window = new HostWindow(logger, host.BaseUrl, options.Title); window.Open(); host.Terminate(); return 0; -
View und ViewModel schreiben
Zur View app/start.html gehört per Konvention die Klasse StartVm. Danach dotnet run – die Anwendung läuft unter http://localhost:32000.
app/start.html
<!--ViewModel:StartVm--> <div> <p>Hallo von {{ComputerName}}!</p> <p>Geklickt: {{CountPressed}}</p> <button class="btn btn-primary" @click="ButtonPressed()"> Klick mich </button> </div>ViewModels/StartVm.cs
public class StartVm : ActiveViewModel { public string ComputerName => Environment.MachineName; public int CountPressed { get; private set; } [ActionMethod] public void ButtonPressed() { CountPressed++; } }
Mehr in der Anleitung „Getting started“ und in der Referenz im Repository. Zur Anleitung (externer Link)
Bausteine
Fertige Komponenten für Anwendungen im Betrieb
Das NuGet-Paket enthält neben dem Kern Erweiterungen für typische Aufgaben in Fach- und Industrieanwendungen.
-
TreeView
Baumansicht für Hierarchien wie Anlagen, Ordner oder Gerätegruppen.
-
Forms
Editierbare Auswahlliste, Datumsauswahl, Splitter und Fehlermeldungen.
-
Charts
Diagramme auf Basis von C3: Linien, Balken, Torten, Gauges und Sankey.
-
Mermaid
Fluss-, Ablauf- und Zustandsdiagramme aus Text.
-
SyntaxHighlight
Editor mit Syntaxhervorhebung für C#-Quelltext.
-
AppDialog
Modale Dialoge und Meldungsfenster, gesteuert aus dem ViewModel.
Eigene Komponenten
Wiederverwendbare Bausteine bestehen aus einer HTML-Datei und einer von StonehengeComponent abgeleiteten Klasse. Der Dateiname wird zum HTML-Tag.
app/computer-info.html
<!--CustomElement:model-->
<!--ViewModel:ComputerInfo-->
<div class="card">
<p>{{model.Name}}</p>
</div> ComputerInfo.cs
public class ComputerInfo : StonehengeComponent
{
public string Name => Environment.MachineName;
} app/start.html
<computer-info :model="Info"></computer-info> KI-fähig
Vorbereitet für KI-Coding-Assistenten
Im Repository liegt eine Integrationsanleitung für KI-Coding-Agenten: Konventionen, Dateilayout, Pflichtmuster und typische Fehlerquellen. Als AGENTS.md ins eigene Projekt kopiert, schreibt der Assistent Stonehenge-Code nach den Regeln des Frameworks.
Integrationsanleitung lesen (externer Link)Technik
Bewährter Stack, seit 2013 gepflegt
Vier Generationen
-
Version 1
.NET Framework
ServiceStack und Knockout
-
Version 2
.NET Framework
Katana und Aurelia
-
Version 3
.NET Core 3.1
Kestrel, Aurelia, dann Vue.js
-
Version 4
.NET 8 und .NET 10
Kestrel oder IIS, Vue.js 2, ohne Cookies
Häufige Fragen
Was ist Stonehenge 4?
Ein Open-Source-Framework für .NET, mit dem Anwendungen eine Web-Oberfläche nach dem MVVM-Muster bekommen: ViewModels in C#, Views in HTML. Die Anwendung läuft als Desktop-Fenster oder als Web-App.
Ist Stonehenge kostenlos?
Ja. Stonehenge steht unter der MIT-Lizenz und darf auch kommerziell frei verwendet werden. Unterstützung beim Einstieg, Erweiterungen und Entwicklung im Auftrag bietet ICT Baden auf Anfrage an.
Welche .NET-Versionen werden unterstützt?
.NET 10 mit Paketversion 10.x und .NET 8 mit Paketversion 8.8.x. Das Projekt muss das SDK Microsoft.NET.Sdk.Web verwenden; .NET Framework wird von Version 4 nicht mehr unterstützt.
Brauche ich JavaScript-Kenntnisse?
Nein. Views sind HTML mit der Vorlagensyntax von Vue.js 2 – zum Beispiel {{Name}}, @click und v-for. Den JavaScript-Teil liefert Stonehenge selbst aus; eigene Skripte sind möglich, aber nicht nötig.
Läuft Stonehenge als Desktop-Anwendung?
Ja. HostWindow öffnet die Anwendung in einem eigenen Fenster eines installierten Browsers, etwa Chrome, Edge, Brave, Firefox oder Safari. Dieselbe Anwendung kann auch als Web-Server für viele Nutzer laufen.
Warum Vue.js 2 und nicht Vue 3?
Die genutzten Bootstrap-Vue-Komponenten unterstützen Vue 3 noch nicht. Stonehenge bleibt deshalb bei Vue.js 2 und Bootstrap 5.
Kontakt
Stonehenge im eigenen Projekt?
Wir helfen beim Einstieg, entwickeln Erweiterungen oder ganze Anwendungen mit Stonehenge – und beantworten Fragen zum Framework.