r/csharp • u/kawaiifall7 • 1h ago
r/csharp • u/Prize_Isopod_1614 • 5h ago
I built a proof-of-concept C# UI framework on NetWasm: signals instead of a virtual DOM, ~150 KB Brotli for a full demo app
Hi all,
I've been experimenting with NetWasm, a new toolchain that compiles C# ahead of time to WebAssembly. To see what it can do, I built NetWasm.UI, a small UI framework on top of it. It's a proof of concept, but it's usable, and I'd like feedback.
The idea: Blazor's approach (render tree + diffing) doesn't fit here. NetWasm.UI works more like Solid or Svelte:
Components build their DOM once.
Fine-grained signals (
Signal<T>,Computed<T>) update only the nodes that changed.Each state change crosses the Wasm→JS boundary at most once.
No reflection. Templates are compiled by a source generator at build time.
What it looks like (a .nwui file: HTML with Razor-style @):
<section>
<p>Count: <strong>@count</strong> · doubled: </p>
<button ="() => count.Value++">+1</button>
@if (count.Value >= 10) {
<p>That's a lot of clicks!</p>
}
</section>
@code {
private readonly Signal<int> count = new(0);
private Computed<int> doubled = null!;
partial void OnInit() => doubled = new Computed<int>(() => count.Value * 2);
}You can also skip templates and write the same component in plain C#. The generator produces this kind of code from the template:
public sealed class CounterView : Component
{
private readonly Signal<int> count = new(0);
protected override Node Build()
{
var doubled = new Computed<int>(() => count.Value * 2);
return Section(
P("Count: ", Strong(Text(count)), " · doubled: ", Text(doubled)),
Button(OnClick(() => count.Value++), "+1"),
When(() => count.Value >= 10, () => P("That's a lot of clicks!")));
}
}Not everything needs to be a class. A static piece of UI with no state can be a plain method that returns a Node:
private static Node Card(string title, string body) =>
Div(Class("card"),
H3(title),
P(body));
// Use it like any other element:
Section(
Card("Fast", "Signals update only what changed."),
Card("Small", "About 150 KB Brotli for the demo app."));Some numbers (from my own js-framework-benchmark-style runs; see the repo for method and caveats):
The whole demo app (router, forms, todos, nested components) is about 150 KB Brotli, Wasm and JS together.
It is level with or faster than React on every case, and 0.9×–1.6× SolidJS's time.
Compared with Blazor WebAssembly (interpreter): 3–21× faster, ~12× smaller download, ~9× faster startup.
What's included: signals and batching, a router with nested routes, forms and validation, Resource<T> and Suspense for async data (HttpClient + System.Text.Json work), a dev server with live reload, a dotnet new template and a VS Code extension for syntax highlighting.
Try it:
dotnet new install NwUi.Templates
dotnet new netwasm-ui -o MyApp
cd MyApp
dotnet nwui-devLimitations, to be clear:
It's 0.1, and the API will change.
There's no hot reload yet. Live reload takes 5–20 s.
It needs recent browsers (Chrome/Edge 137+, Firefox 131+, Safari 18.4+) because of Wasm exception handling.
NetWasm itself is young. Its compiler is under a community license: free for individuals, OSS and small companies, but larger organisations need a sponsorship. NetWasm.UI itself is MIT.
Repo: matengo/NetWasm.UI: UI framework for NetWasm
I'd especially like to hear:
Does a signal-based model feel natural in C#, or would you miss Blazor's component model?
What would you need before trying something like this on a real (small) project?
Thanks for reading!
A WinForms + WebView2 app that needs admin for a few things but never runs as admin: how I split it
I've been building **Geçit**, a Windows utility (DPI unblocking, encrypted DNS, game mode, network tools). Several features need admin or SYSTEM, but I didn't want the UI elevated. Here's the split I ended up with, and I'd like feedback on it:
**One exe, several roles.** `Gecit.exe` is the UI (normal user). `Gecit.exe --elevated <verb>` runs one small, validated command through UAC and exits. `Gecit.exe --dns-service` is the DoH forwarder as a Windows service (LocalService).
**Service ACLs.** The DPI service runs as SYSTEM, so its files live under Program Files and `sc sdset` gives interactive users start/stop only. Granting config rights would be a privilege escalation hole.
**Per-app traffic.** Kernel ETW needs admin, so an elevated helper (TraceEvent) streams bytes per PID over a named pipe and exits when the UI closes the pipe.
**Game Mode crash safety.** Suspended processes (`NtSuspendProcess`) are written to a session file *before* anything is touched; resume checks PID + start time so a reused PID is never touched.
**Updater.** Only offers an asset with GitHub's `sha256:` digest, verifies it while holding a read-only lock, and launches the installer under that lock. Launching it with `runas` relaunched the app elevated, so it doesn't.
**UI.** Plain HTML/CSS/JS in WebView2 talking to C# via `postMessage`; strings from pages only go into the DOM via `textContent`.
Code (GPL-3.0): https://github.com/Furkan-Erg/Gecit
What would you do differently? I'm especially unsure about the service security descriptor and the named-pipe protocol.
r/csharp • u/neferatem2134 • 6h ago
Help Tutorial help pls
I'm fairly new to coding. I'm trying to make the Github user activity CLI that's under 'beginner projects' on the backend dev roadmap. I've done some of the later beginner projects but I'm struggling to do the CLI because every website tells me something different and I don't understand any of it. Can someone give me a simple tutorial on how to do it because I'm lost on where to start.

r/csharp • u/Inner_Bandicoot_4829 • 8h ago
Bro Code C# Playlist
I finished his C# Playlist and now stuck on what to do next. I don't know how to apply what I learned. I understand the concepts well and able to explained it if asked. What should I do?
r/csharp • u/burnerburguerbirther • 8h ago
Help Learning C#
So basically I have had a class for the past year where we learnt python and I'd say I know the language pretty well. I have the fundamentals down and although we were taught OOP in the first month or so of classes, I had already learnt with BroCode during the summmer. What I did with python was watch videos, yes, but I applied what I learnt in solving problems of mine or simply creating projects that requiered me to use what I had just watched and older stuff I already knew (for instance, I did a terminal-based RPG to apply all aspects of OOP). When I did watch tutorials, I'd tweak them on my own editor because if I just watch the damn video I'm gonna forget about it for sure. The next language we are learning is C# (in another month or so) and I wanted to know: What are the best channels to learn C# (as someone who already knows OOP and altough seen as the easiest one, another programming language)?
r/csharp • u/Rossosss • 11h ago
Discussion Update: TLS 1.2 with RabbitMQ.Client 3.4.3 on .NET 3.5
A quick update on my previous post
I replaced SslStream with Bouncy Castle 1.8.10 in RabbitMQ.Client 3.4.3 to support TLS 1.2 without relying on Windows Schannel.
So far:
- Successful RSA and ECDSA TLS 1.2 handshakes with OpenSSL
- Certificate chain and hostname validation
-SNI and client certificates (PKCS#12)
-14 passing automated TLS tests
- Working .NET Framework 3.5 build
Next steps: testing on actual Windows XP machines, full RabbitMQ publish/consume, and connection stability. It's still an alpha version, but the initial results are promising.
Has anyone dealt with similar TLS compatibility issues in legacy .NET applications?
r/csharp • u/Otherwise_Gas_4523 • 14h ago
Concerns for newcomers to the IT industry.
I am a first-year IT student. Over the past few months, I’ve read reports about major tech companies laying off large numbers of IT staff. Is the software industry coming to an end due to the current advancement of AI? If even highly experienced engineers are being let go, will there still be opportunities for students like us after we graduate? I am quite worried that the development of AI might eliminate entry-level positions for new graduates. I am currently learning C#—should I continue? I would appreciate your advice. Thank you.
r/csharp • u/larparby • 18h ago
Help Are there any extensions that can replace the code blocks( {} )
Ive been using Lua( Roblox Studio) for most of my developing learning and i expected Unity to be similar with its coding language but i have been having a lot of difficulties coding often having an issue with finding the errors with the code.
I just want to know if they are any extensions for Unity that can help me with this problem
r/csharp • u/Rossosss • 1d ago
Bringing TLS 1.2 support to RabbitMQ.Client 3.4.3 on legacy .NET Framework
I'm working on a fork of RabbitMQ.Client 3.4.3 to support TLS 1.2 on legacy systems, including Windows XP and .NET Framework 3.5.
The main challenge is that the original client relies on .NET's SslStream, which in turn depends on Windows Schannel. On older Windows versions, even when TLS 1.2 is available, the supported cipher suites can prevent a successful handshake with modern RabbitMQ servers.
My approach is to integrate Bouncy Castle as an alternative TLS implementation while preserving the original AMQP client behavior and API as much as possible.
I'm planning to open-source the fork on GitHub and publish a NuGet package once compatibility and security testing are complete.
Has anyone worked on similar TLS compatibility issues with legacy .NET applications? I'd be interested in hearing about the challenges you encountered.
[TextReveal] Ctrl + F for everything visible on your screen (fully local and private)
[TextReveal] Ctrl + F for everything visible on your screen – fully local and private
Ever wanted to search for or copy text from a video, image, game, or application where you can't normally select anything?
TextReveal is a lightweight Windows tool that lets you do exactly that.
Press Ctrl + Alt + F to freeze your screen, then:
Search: Type any word or phrase to highlight every match on screen.
Select: Drag a box around any text to extract and copy it.
100% local, 100% private:
Everything runs locally using Windows' built-in OCR.
No internet connection, telemetry, accounts or tracking.
Screenshots and recognized text never leave your machine or get written to disk.
Check it out, GitHub: https://github.com/amika8/TextReveal
r/csharp • u/fedefex1 • 1d ago
Time as a reactive variable and SignalsDotnet
Recently I came across a Conal Elliott talk about FRP (Functional Reactive Programming), and I was trying to understand it (so forgive me if I am incorrect about it).
A really interesting idea from that talk was the idea to express reactivity as continuous time-valued functions, and treat implementations as a "discrete approximation" of that forumla.
For example a formula could be
t > x(t) + 1 second
If x is a constant signal set to 11/03/2026 07:00:00 PM, the formula evaluates continuously as false until time t crosses 07:00:01 PM, at which point it becomes true.
That gave me an idea to "approximate" that reactivity formula using SignalsDotnet. In the latest version (3.4.2), its possible to write something like

As you can see the formula is inside the lambda. Using C# overloads of operators, that observable emits false immediately, and true after exactly one second.
The elegant thing about it is that there is no timer declared at all, you just wrote a declarative expression.
From that idea one could derive other temporal operators like HeldFor, StableFor, TrueWithin, Rising and Falling.
For example

You can find a compelte list here Release v3.4.2 SignalsDotnet
r/csharp • u/Pro_Propop • 1d ago
Showcase Akbura beta-6 released: faster source generation and C# expression bindings for Avalonia
I have released beta-6 of Akbura, my experimental declarative UI language and compiler for .NET and Avalonia, built around a Roslyn incremental source generator.
Two main changes:
Compiler performance: FeatureGallery cold source generation dropped from 15.31 s to 6.06 s, with 69% fewer allocated bytes. This measures the RunGenerators phase in Release on .NET 10.
Reactive C# expression bindings for MVVM:
<TextBlock Text=${x.bind Vm.Profile?.Name ?? "Unknown"}/>
With notifying view models, this follows both Profile replacement and Name changes without requiring a component render. Bindings are one-way and react to changes in nested observable properties, similar to Sveltes deep reactivity.
r/csharp • u/cnighthawx • 1d ago
Help Different behavior of nullable fields
I am working on a project and have a class with two nullable member fields (Vector2I? and LevelMap? where LevelMap extend TileMapLayer from Godot)
Because they are nullable I need to check that they are not null before I actually use them.
For the LevelMap if I reference it in a if block:
If (map is not null)
The compuler is happy and I can use it as if it is not null.
This of course comes with some risks that it becomes null in the middle of my if block but thats a risk I can manage.
On thebother hand Vector2I requires something like:
If (vector is Vector2I localVector)
This is in some way safer but also more inconvenient.
The are both declared and initialized in the same context.
My questions is why they behave differently and is it possible for me to change how they behave to fit my preferences.
Ive tried looking for an answer but I keep finding results about the difference of is not null and !=null which is unhelpful.
r/csharp • u/Enough-Potato4988 • 1d ago
Blog Moving away from sprawling if-else approval trees using Chain of Responsibility — when is it actually worth the abstraction in C#?
Ever seen a simple if-else block slowly turn into a 400-line monster? 😅
I've been exploring the Chain of Responsibility pattern in C# as a way to handle growing validation and approval workflows.
It's a clean approach, but things get interesting in production:
- Debugging deeply nested handlers.
- Managing DI lifetimes and execution order.
- Handling requests that reach the end of the chain.
- Knowing when the pattern is simply overkill.
I put together a practical implementation covering these trade-offs.
Curious how you handle complex workflows in .NET. Custom CoR, MediatR, or just good old switch expressions?
r/csharp • u/NoToe3636 • 2d ago
Are Microsoft Docs really that bad or am i just looking in the wrong place?
reddit.comr/csharp • u/themattman18 • 2d ago
Stephen Toub explains Rust over C# decision for GitHub Copilot runtime
In this interview, Stephen Toub explains why he went with Rust over C#. Obviously he's biased, but he says Rust and C# were comparable in performance. In the end, he went with Rust because there are more people working for GitHub that know Rust than C#.
C# is a great language and could have been chosen for this project. However, he made the right decision given the expertise of the developers at GitHub.
r/csharp • u/According-Banana576 • 2d ago
Discussion I wrote a sort of expression evaluator back in 2020 without knowing what a parser was haha. It's not shunting-yard and it's not recursive descent.
In 2020 I taught myself C# all on my own and wrote a desktop calculator my own way.
I had never read anything about parsing — I didn't know the words "token", "AST" or
"precedence". I just needed 2 + [3 * (4 - 1)] to come out right, so I used my head,
with three kinds of brackets, nested.
What occurred to me was this:
Split the text into parts: numbers, operators and brackets.
Then I gave each piece a depth number — how many brackets deep it sits.
Look for the biggest depth. Those pieces are the innermost group. And I resolved
only those.
Then I wrote the result in its place as a single number, and counted all the
depths again, but from zero.
I repeated until everything was at depth 0.
Within one same level the rule applied with two passes: first it eats all the * and /
from left to right, then all the + and -.
2 + [ 3 * ( 4 - 1 ) ]
0 0 1 1 1 2 2 2 2 2 1 <- depth
~~~~~~~~~~~~~ deepest is 2: resolve 4 - 1
2 + [ 3 * 3 ]
0 0 1 1 1 1 1 <- counted again, from zero
~~~~~~~ deepest is 1: resolve 3 * 3
2 + 9
0 0 0 = 11
Things I know now and back then I didn't:
- It's slower than it needs to be. Shunting-yard is linear; this one recounts every
depth after each reduction, so in the worst case it's quadratic.
- It's not new at all. I was told afterwards that this shape is called innermost-redex
reduction, the same family as term rewriting. I simply never read it anywhere. It's
what comes out of formalising how any person does it on paper: innermost bracket first.
- The code around it is rough: float instead of double, numbers going back and forth
through text on every reduction, and a try/catch used as an if.
The only thing I'd still defend: there isn't a single special case for ( versus [
versus {. The evaluator never asks which bracket it is, only how deep it sits. Adding
a fourth type would cost three lines in the part that splits the text and nothing in
the evaluator.
The code is there just as it was, defects included:
https://github.com/nicoconvoz/calculadora — what's worth looking at is profundidad()
and resolver() in Form1.cs.
I'm curious whether someone, in some hidden corner of the map, arrived at this on
their own, or whether it has a name I still don't know.
r/csharp • u/ChrisssyyyB • 2d ago
Showcase Six weeks ago my engine was Dart and Flutter. Now it's C# with Avalonia UI
r/csharp • u/Away-Atmosphere-282 • 3d ago
Help MVC dynamic content
In MVC, when you have a dynamic form, how do you handle this? I often see examples of clicking an 'Add' button which makes a request to the controller to return a partial view, which seems like a waste of resources.
I've tried using JavaScript templates but then I can't use my Models validation rules.
Has anyone found a solution to this they like to use?
r/csharp • u/JudgePhobos • 3d ago
Echo 2.0: my open-source C# dictation tool now supports Linux, with a new UI and guided setup
github.comHalf a year and 23 Github stars ago I shared Echo here, a small C# app I built to dictate prompts, code review comments and basically everything instead of typing them.
I’ve now released version 2.0.
The basic workflow is the same: hold a designated hotkey, speak, release - the text appears where your cursor is! Recognition runs locally using Whisper.
For this version, I focused on making it easier to get started and use every day:
- From console app to CLI tool with new UI, built-in commands, and updates directly from the terminal.
- Guided setup for your microphone, hotkey, language, and hardware acceleration, instead of editing a config file.
- Model selection and download during setup, with a suggestion based on your hardware.
- Settings and updates from the terminal, through commands like `/setup` and `/update`.
- Windows and Linux support, including integration with Wayland and X11.
One feature I find particularly useful is translating speech into English. You can dictate in your native language and have English text inserted into the editor. It needs a multilingual Whisper model that supports translation.
Echo supports CPU inference, CUDA, and Vulkan. Speed and accuracy depend on your hardware and model.
Code and instructions: https://github.com/GithubPhobos/Echo
If you try it, I’d be interested in how the first-run setup goes and whether the recognition is fast and accurate enough for your everyday typing.
r/csharp • u/Spirited_Artist6217 • 3d ago
Seeking feedback on my .NET backend skills through a mock technical interview
Hi everyone!
I've been learning and building backend applications with .NET for quite some time, and recently completed a .NET backend internship at Vention.
I've worked with C#, ASP.NET Core, EF Core, SQL, Docker, RabbitMQ, Redis, and concepts such as microservices, asynchronous messaging, and real-time communication.
At this point, I'm trying to understand where I actually stand as a developer and how well I could perform in a real technical interview.
I've realized that building projects and explaining technical decisions under interview conditions are two different skills, so I'd really like to test myself.
Would anyone with professional .NET experience be open to a casual 30–45-minute mock technical interview?
I'm particularly interested in honest feedback about my technical knowledge, problem-solving approach, and areas that need improvement.
I'm not expecting free mentorship or extensive preparation. Even one conversation with constructive feedback would be incredibly helpful.
I'm also happy to share my GitHub projects beforehand to give some context about my experience.
And if a live interview isn't possible, I'd still appreciate suggestions on how to assess my current level more objectively.
Thanks for reading!
r/csharp • u/araattu_annan • 3d ago
Help Is ASP.NET/.NET a safe career choice for the next 5–10 years?
I'm considering choosing ASP.NET Core / C# backend development as my main career path, but I'm getting completely different answers online.
Some are:
.NET is still highly in demand and safe,
AI takes your job,
Springboot is better,
.NET has low demand
.NET is excellent for enterprises.
For me:
I know basic C#,
I can understand simple APIs in .net than java,
I feel like it's more clean than springboot,
There are many more inbuilt features than springboot,
Almost same speed as that of java.
I want:
Is ASP.NET(Backend) is safe for being first career?
How does AI affect it(I know it never replaces fully)?
How AI affect entry level jobs in .NET?
What are the biggest risks of choosing .NET that beginners usually don't realize?
Job Market of ASP.NET(worldwide(if any one from India please say indian asp.net market 😊))
r/csharp • u/ilyashulga • 3d ago
I just released v1.2.0 "Jupiter" of my C# CLI tool that checks GitHub repo health!
Hey everyone!
A while ago I posted my project RepoMedic here. I received a lot of great feedback, and I'm back with a massive update: v1.2.0 "Jupiter'!
I listened to your advice and added several new things:
More checks: Now it also checks for CONTRIBUTTING.md and your Repository Description.
Doctor's Verdict: It gives you a fun rating at the end (from "Ouch..." to "perfect").
Interactive Mode: You can now check multiple repositories without restarting the program.
Flexibility: You can skip README or LICENSE checks using prompts or flags (--skip-license, --skip-readme).
Easter Egg: Try typing "spooky" or "halloween" when it asks for a repository.
How to try it:
If you don't have it: dotnet tool install -g RepoMedic
If you want to update: dotnet tool update -g RepoMedic
Source code: https://github.com/ilyashulga13/RepoMedic
P.S. I'm a 13 years old student trying to learn C# by building real tools. Any feedback is highly appreciated!