For everyone who wants to know what is under the hood: languages, versions, architecture and how we enforce it.
As of release v1.0.48, October 2026. Versions change with every update; the source code on GitHub is authoritative.
| Area | Technology |
|---|---|
| Backend | C# on .NET 10 (ASP.NET Core 10.0.13), REST, SignalR, server-sent events |
| Frontend | Angular 22.0.2, TypeScript 6.0.3, RxJS 7.8.2, signals |
| Database | PostgreSQL 17 with pgvector and pg_trgm, Entity Framework Core 10 |
| AI assistant Klacksy | Function calling across 6 LLM providers plus OpenAI-compatible endpoints; embeddings and reranking run locally on ONNX Runtime |
| Scheduling engines | Genetic algorithms and a deterministic repair core in dedicated .NET libraries |
| Operations | Docker images with nginx, Windows installer (Inno Setup), signed auto-updates |
| License | AGPL-3.0-only, source code public |
Backend and frontend follow Clean Architecture with four layers. Dependencies point inwards only:
IQueryable.Commands and queries go through a custom mediator (not MediatR) with pipeline behaviors for validation (FluentValidation) and cancellation. Riok.Mapperly generates the mapping code at compile time instead of using reflection; a custom Roslyn source generator covers further boilerplate.
In the backend, the layers are folders and namespaces inside one assembly. That is why 75 architecture test classes scan the source on every test run, for example:
DateTime.Now in database-facing layers, parsing only with explicit DateTimeStyles.The frontend has its own guard specs (layer direction, one class or interface per file, license header) and strict ESLint rules (no any, no console.log, no time-zone-unsafe date handling).
To be honest: the migration is not complete. The backend lists 9 known exceptions to the layer direction, the frontend 55 legacy files (presentation calling infrastructure directly). Both lists can only shrink: a new violation fails the tests, and a fixed entry has to come off the list. There are no exceptions for file size or one type per file.
| Component | Version / implementation |
|---|---|
| Runtime | .NET 10 (net10.0), nullable reference types enabled, StyleCop analyzers |
| Web | ASP.NET Core 10.0.13, OpenAPI, rate limiting, health checks |
| ORM | Entity Framework Core 10.0.13, Npgsql 10.0.3, snake_case naming convention |
| Mapping / validation | Riok.Mapperly 4.3.1, FluentValidation 12.2.0 |
| Real time | 7 strongly typed SignalR hubs, optional Redis backplane |
| Authentication | JWT (HMAC-SHA256) with rotating refresh tokens, ASP.NET Core Identity, LDAP, OAuth2 login |
| Background services | 37 hosted services, some enabled by configuration (embeddings, escalations, ERP import, data retention, optimizer) |
| More | ClosedXML (Excel), MailKit, Cronos, ONNX Runtime 1.31.0 |
Size: about 6,400 C# files with just over 400,000 lines (excluding migrations) and 130 controllers.
Klacks speaks the Model Context Protocol: POST /mcp on the official C# SDK (ModelContextProtocol.AspNetCore 2.2.0), streamable HTTP, stateless. External AI clients sign in with a JWT or a personal access token (32 random bytes, only the SHA-256 hash is stored); an OAuth authorization server with a metadata endpoint is included. Rights over MCP are capped at supervisor level.
pgvector/pgvector:pg17) with the vector and pg_trgm extensions.multilingual-e5-base (ONNX, fp16) and reranking with the mMiniLMv2 cross-encoder (ONNX, int8) run on your own server. Model files are pinned by SHA-256.| Component | Version / implementation |
|---|---|
| Framework | Angular 22.0.2, TypeScript 6.0.3, RxJS 7.8.2 |
| Components | About 510 components, all standalone and OnPush; signals, inject() and the new control flow (@if, @for) |
| Change detection | Still zone-based (provideZoneChangeDetection), not zoneless |
| State | No NgRx: state lives in services with signals and an event bus |
| UI | Bootstrap 5.3.8, ng-bootstrap 21, FontAwesome 6, Leaflet, CodeMirror 6, Fabric.js |
| Translation | @ngx-translate 15 with a custom loader |
| Tests | Vitest 4.1.6 through the Angular builder, jsdom |
| Quality | ESLint 9 (flat config) including template accessibility rules, husky |
| Delivery | Static bundle behind nginx, built with Node 22 |
Size: about 2,700 TypeScript files (just under 200,000 lines) and 625 spec files.
25 languages: German, English, French and Italian are built in, 21 more come as language packs (UI, help, assistant texts, synonyms, calendar rules). Arabic and Hebrew run right to left, including PDF reports.
Deepgram, Groq Whisper, AssemblyAI or your own OpenAI-compatible service; also a self-hosted faster-whisper container and Whisper directly in the browser (transformers.js on WebAssembly). A local engine based on NVIDIA Parakeet is in development and not yet part of a release.
Blazor Server on .NET 10 (prerendered), Tailwind CSS 3.4.19, no cookies, no third parties.
Klacks is licensed under the GNU AGPL-3.0-only. Every source file carries an SPDX header, and a test checks it. The code is on GitHub.