VulCode

C# and .NET: what we build with it and why

C# with Avalonia is our pick for native desktop apps on Windows, macOS and Linux, and .NET for libraries, emulators and plugins for Unity-based games.

All technologies

C# and .NET in real screenshots

The projects on this page on the screens from the portfolio and the case studies, each with a short description and the way to the full one.

Plazer on the desktop: the chat list, the conversation and the other person's profile

Plazer: desktop app

A native Avalonia client: servers, channels, roles, voice calls and live messages.

When C# and .NET, and when something else

A technology has to fit the place the code will run and the team that will take it over. The final choice is made in the quote, together with you.

We pick C# and .NET

Apps for three systems

Avalonia gives one codebase for Windows, macOS and Linux, and Skia draws the controls the same way on every system. The Flaem and Plazer desktop apps stand on it.

A program open all day

An admin keeps the Flaem panel open next to a console and a game. With no browser engine inside, the program starts fast and has its own taskbar icon, system shortcuts and access to files on disk.

A core kept apart from the window

The logic lives in a .NET library that knows nothing about the interface, and MVVM with CommunityToolkit ties the view to it. xUnit tests check the core without opening a window.

Plugins for Unity games

nCatalogue for SCP: Secret Laboratory collects player stats, links accounts with Discord and adds admin commands on Discord. The game is written in C#, so a plugin with LabAPI and Harmony goes straight into its code.

Emulators and libraries with a clean core

We check chip8-sharp against test ROMs, and gameboy-sharp has a UI-free core. Such a core runs in the program, in a test and in someone else's project that plugs it in.

Tools for admins

vantage controls Docker in a homelab and checks services over HTTP and TCP. CancellationToken in .NET tells a check timeout apart from closing the program, so the dashboard does not report false outages.

This is how we write it in our services

We pick something else

Websites

We write websites and browser panels in TypeScript with prerendering. Blazor in WebAssembly downloads the .NET runtime on the first visit, and a site has to show its content at once.

Phone apps

Flaem and Plazer have separate phone apps in Kotlin and Swift. Widgets, notifications and gestures then work exactly the way the system expects.

An interface shared with a website

When the program should be the same interface as a website, we build it in Rust and Tauri from web code. That is how studio was made; we pick Avalonia when the interface should be native.

An agent on client servers

A self-contained .NET release carries the whole runtime inside. The Flaem agents in client machines are in Go, as small single binaries.

Cryptography for many platforms

Plazer's encryption has to run in the browser, on phones and on the desktop as the same code. That is why it is in Rust, and the C# client calls it instead of writing the cryptography again.

A standalone bot or script

We write Discord bots and diagnostic scripts in Python, because they are ready sooner and can be fixed without a build. We write a bot in C# when it is part of a game plugin and shares its code.

C# and .NET compared, point by point

Each need on a row of its own, with what each of the two columns gives you on it side by side.

Desktop appC# and AvaloniaElectron

Program size

Smaller, no Chromium
Larger, with a whole browser

Code shared with a website

No
Yes

Native feel

Closer to the system
Like a page in a window

Memory over a full working day

One process with no browser engine
Several Chromium processes

Access to files and the system

Directly from .NET
Through the Node main process and messages to the window

Security updates

Cover your code and libraries
Every Chromium patch needs a new release

People to develop it

.NET developers
Any web developer

C# in all our code

How many lines we have written in C#, and what part of everything we have written that is. We count the lines added in the commits of our repositories, language by language.

162,872
lines written in C#
3.0%
of all the lines we have written
8
repositories with C# code
5th
place among 26 languages

The libraries these projects stand on

From the dependency files of our repositories. With each, one sentence on what we use it for.

Server roles in Plazer: permissions switched for each role on its own
  • Avalonia 11

    The interface on Windows, macOS and Linux.

  • CommunityToolkit.Mvvm

    The MVVM pattern without boilerplate.

  • xUnit

    Logic tests in a separate project.

  • LabAPI, Harmony, Discord.Net

    SCP: Secret Laboratory plugins and their bots.

Our changes to other people's C# projects

11 merged changes in 7 repositories. The maintainers of these projects reviewed our code and merged it into theirs.

Week by week

The languages of our changes

Other technologies, and where their code runs

Each has its own page with projects on real screens and a comparison with the alternatives.

Websites and web apps

What you see in a browser, and its back end.

Mobile apps

Native Android and iOS clients.

Desktop apps

Programs for Windows, macOS and Linux without a browser inside.

Back end and infrastructure

Cores, server agents and real-time services.

Bots and automation

Discord, scripts and monitoring.

Questions about C# and .NET

Answers about C# and .NET, our projects and the numbers on this page.

A project in C# and .NET?

Describe what you want to build. We reply within an hour and tell you plainly whether this technology is a good choice.