Skip to content
View dmitrat's full-sized avatar

Highlights

  • Pro

Block or report dmitrat

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
dmitrat/README.md

OutWit: outwit complexity, embrace efficiency

.NET Apache 2.0 NuGet packages ratner.io

Welcome

I'm Dmitry Ratner, a .NET architect and the author of the OutWit ecosystem. It is a growing collection of modules that I use to build desktop, web, service, and distributed applications.

The earliest parts date back to 2009. Around 2014, the separate libraries began to form an intentional modular system. It has kept evolving ever since, with new capabilities, regular refactoring, and plenty of production feedback.

Why OutWit exists

Most applications need a familiar set of supporting capabilities: communication, persistence, logging, configuration, notifications, security, navigation, and deployment plumbing. Rebuilding that foundation for every project takes time and leaves less attention for the part that makes the product useful.

With OutWit, I can assemble a working application skeleton from modules, choose the providers that fit the deployment, and then spend most of the project on its actual domain logic.

Each reusable capability has a small contract. Concrete implementations live in separate packages and can be selected at the composition root. A product gets only the modules it needs, and a provider can change without sending vendor-specific code through the rest of the application.

This approach keeps changes local and makes the architecture easy to reuse. It also gives coding agents a clear map of the work: a contract, a reference implementation, a predictable project layout, and tests that describe when the job is done.

The open-source foundation

Work with a remote object through a native C# contract.

Methods, properties, and events keep the shape of an ordinary .NET interface, so remote interaction feels much like using a local object. A server can start directly, with no required Kestrel or ASP.NET host. Transports and serializers are pluggable, and clients can target NativeAOT or Blazor WebAssembly.

Native contracts WebSocket TCP IPC NativeAOT

Documentation · NuGet

A pure .NET relational file database.

ACID transactions, WAL recovery, MVCC, B+Tree and LSM storage, encryption, WitSQL, ADO.NET, and Entity Framework Core. IndexedDB storage also brings the database to Blazor WebAssembly.

SQL ADO.NET EF Core ACID Blazor

Documentation · NuGet

The low-level application foundation.

Value-oriented models, MVVM for WPF and Avalonia, navigation, configuration, plugin discovery and isolation, source-generated proxies and controls, serialization helpers, logging, and testing utilities.

ModelBase MVVM Plugins Source Generators

Explore the packages

Reusable infrastructure capabilities and provider contracts.

Vendor-neutral logging, email, messenger, blob-storage, secret-store, and Blazor-shell modules with reference providers for files, Loki, New Relic, SMTP, Resend, Telegram, disk storage, and native OS credential stores.

Logging Email Messaging Storage Secrets

Explore the providers

A Blazor WebAssembly platform for content-driven static websites. It combines Markdown content, SEO support, and automatic content generation in a reusable application layer.

Blazor WASM Markdown Static Sites SEO

How the pieces fit

The ecosystem has a simple layered shape:

  1. Common supplies small technical primitives and the plugin runtime.
  2. Shared packages recurring infrastructure concerns as neutral contracts with replaceable providers.
  3. WitRPC and WitDatabase provide substantial standalone subsystems without forcing a product architecture around them.
  4. Applications compose only what they need and keep their domain logic outside the reusable foundation.

For example, a deployment can use PostgreSQL or an embedded database. Logging can go to local files, Loki, or New Relic. Email can use SMTP or Resend. These choices stay close to the application startup and packaging code.

Built for composition, useful with agents

I started building OutWit long before coding agents appeared. The structure happens to suit them well because the intended path is visible in the repository:

  • narrow contracts define the change boundary;
  • a working provider acts as an executable example;
  • predictable names reduce repository navigation;
  • conformance tests define completion;
  • independent packages keep the blast radius visible;
  • deterministic builds and module layouts make results verifiable.

Agents are especially helpful with the routine coordination around small modules. They can follow dependency graphs, update package versions, reproduce provider layouts, run compatibility checks, and carry a mechanical change across several repositories. Good module boundaries still matter. They tell both a developer and an agent where a change belongs.

Choose a starting point

If you need… Start with
A remote object that keeps its native C# contract WitRPC
An embedded relational database without a native runtime WitDatabase
Plugin loading, MVVM, models, generators, or shared .NET utilities OutWit.Common
Replaceable logging, email, messaging, storage, secrets, or a Blazor shell OutWit.Shared
A Markdown-driven static site built with Blazor WitDocs

Open foundation

The repositories above are available under Apache 2.0 and can be used in independent and commercial applications. I use the same libraries in my own commercial work, which gives the open components regular production use.

The reusable foundation stays public. Application-specific code remains with the applications where it belongs.

ratner.io  ·  LinkedIn  ·  NuGet

Built in .NET. Refined through real projects. Ready for the next one.

Pinned Loading

  1. WitRPC WitRPC Public

    WitRPC: a lightweight, high-performance RPC framework for modern .NET that simplifies communication in distributed systems.

    C# 8 1

  2. Common Common Public

    OutWit Common projects

    C# 1

  3. WitDatabase WitDatabase Public

    Pure .NET relational file database

    C# 1 2

  4. Shared Shared Public

    C#

  5. WitDocs WitDocs Public

    A Blazor WebAssembly platform for building content-driven static websites with markdown content, SEO optimization, and automatic content generation.

    C#