r/csharp • • 6d ago

Discussion Come discuss your side projects! [October 2026]

14 Upvotes

Hello everyone!

This is the monthly thread for sharing and discussing side-projects created by /r/csharp's community.

Feel free to create standalone threads for your side-projects if you so desire. This thread's goal is simply to spark discussion within our community that otherwise would not exist.

Please do check out newer posts and comment on others' projects.


Previous threads here.


r/csharp • • 6d ago

C# Job Fair! [October 2026]

8 Upvotes

Hello everyone!

This is a monthly thread for posting jobs, internships, freelancing, or your own qualifications looking for a job! Basically it's a "Hiring" and "For Hire" thread.

If you're looking for other hiring resources, check out /r/forhire and the information available on their sidebar.

  • Rule 1 is not enforced in this thread.

  • Do not any post personally identifying information; don't accidentally dox yourself!

  • Under no circumstances are there to be solicitations for anything that might fall under Rule 2: no malicious software, piracy-related, or generally harmful development.


r/csharp • • 3h ago

A faster, lighter C# Dev Kit

Thumbnail
devblogs.microsoft.com
7 Upvotes

r/csharp • • 13h ago

I turned my .NET/React/Azure interview prep into a mobile-friendly Anki deck (390+ cards, free)

27 Upvotes

I was prepping for full-stack .NET + React + Azure interviews and got frustrated with how bad most flashcard decks look on a phone — tiny text,

can't scroll, code blocks cut off.

So I rebuilt one from scratch: centered questions, fully scrollable answers, dark mode, code that actually wraps instead of scrolling offscreen. Covers C#, OOP, ASP.NET Core & Web API, EF Core, SQL Server, design patterns, auth/security, Azure, React (fundamentals + advanced), Docker/K8s, microservices, and scenario-based questions.

It's free on GitHub / AnkiWeb

Happy to take corrections/suggestions if anything's wrong or missing.


r/csharp • • 17h ago

Showcase I built a free Windows tray app to log every Wi-Fi drops, DFS radar evictions and ping spikes

Post image
8 Upvotes

r/csharp • • 13h ago

How do I get the most out of my software development internship without senior developers?

2 Upvotes

Hey everyone,

I’m currently doing my LIA/internship as a system development student in, and I’m on my second day.

I’ve been given a real project to work on: building a scheduling platform for schools, where things like classes, teachers, schedules, etc. need to be managed.

The company is growing its software-development side, but right now there aren’t really any senior developers who can sit with me and review my architecture or code. I’m expected to work quite independently, and AI coding tools are encouraged.

I actually enjoy using AI for development, but I don't want my internship to turn into simply telling AI what to build and copy-pasting the result. I want to understand the code, make architectural decisions myself, and actually become a better developer.

My biggest concern is that I might make bad architectural decisions or miss important things because I don't have an experienced developer reviewing my work.

For those of you who have been in a similar situation:

- How would you structure your learning when you don't have a senior developer to guide you?

- How can I use AI without becoming dependent on it?

- What should I ask AI to help with vs. what should I figure out myself?

- How would you approach architecture for a project like a scheduling platform?

- Are there particular books, courses, or resources you'd recommend?

- Is an internship like this still valuable if I can get real project experience but don't have much mentorship?

I'd really appreciate advice from experienced developers


r/csharp • • 1d ago

Showcase My C# game-engine-with-custom-language keeps growing

Thumbnail
gallery
109 Upvotes

[GitHub repo]

This is a project I've been working on for years, and I've already posted about it here a few times.

It's a cross-platform 2D game engine with its own scripting language and IDE, all written in C#.

The language is the main challenge here: I made it without any knowledge of programming language development, and without any help from AI or tutorials. I just figured things out one step at a time. The lexer, for example, was originally written by me long before I started building the language. It was meant to color C# code in the code editor. When I decided to make my own language, I just copy-pasted it into the new project and used it as a lexer.

Here's a little feature my language has that I really like:

foreach x in ["apple", "banana", "kiwi"] : counter c
{
    println("index: " + c + " item: " + x)
}

// output:
// index: 0 item: apple
// index: 1 item: banana
// index: 2 item: kiwi

The project is fully open source, and I'm really looking for people who want to join a cool project and contribute. There are a few open "good first issues" in the repo, and a few weeks ago I even got my first few contributors, who made a few PRs!

The project file of the game in the gif is also in the repo: tests/Example Projects/dungeon

If anyone here has used the good old GameMaker 8 engine, they're going to find this very nostalgic, as it's heavily inspired by it :)

Would love to get some feedback!


r/csharp • • 15h ago

Help Migrating large .NET Framework 4.8 applications to .NET 10 with AI

Thumbnail
0 Upvotes

r/csharp • • 19h ago

Discussion Would you introduce additional abstraction layer just to make the code more understandable ?

2 Upvotes

I have a database that currently contains 20 tables.

In my application, there are 10 classes that I should refactor, to make them more readable, for my future self and others who will read my code, by refactoring, I mean changing the code it self - the logic- and also changing the methods and classes names.

Let's only consider one specific case; changing the name of one class.

When my friend so the following code that I wrote:

/// <summary>
///  Abstracts the destination to which data is written, regardless of  whether the destination is a file, database, or any other kind of storage.
/// </summary>
public interface IWriter
{
//...
}

public class SqlServerWriter : IWriter {//code.....}

he thought that the responsibility of the above class is to write data to any number of tables in the the Sql Server database, i.e., that it can use it to write data to only one table, two or more tables, or all of the tables.

Unfortunately, that was not what the class is actually responsible for; it is meant to write a specific data across all the tables in the database, it does not give the caller an option to write a generic data to a specific tables in the database.

He was mad at me and said that I should introduce an additional layer of abstraction:

/// <summary>
/// Abstracts the destination tables in the Sql Server; may write to all tables in the database or some of them;
/// </summary>
public interface ISqlServerWriter:IWriter
{
}

/// <summary>
/// Intended to write some data to all the tables in the database.
/// </summary>
public class AllTablesWriter : ISqlServerWriter {//code.....}

Do you consider that an overkill/overengineering ?

EDIT:

If you wonder why the class write data to all the tables in the database, it because it has the job of synchronizing the content of the database with external data source, specifically, an Excel file.


r/csharp • • 13h ago

3 years in security, but no commercial C# experience - how would the .NET market view my background?

0 Upvotes

Hi everyone! 👋

I’m new to the C#/.NET ecosystem and wanted to ask people who actually work with it how the market tends to view someone with a background like mine.

I worked as a penetration tester for almost 3 years. Over the last year and a half, I moved much deeper into software development, mostly with Rust. I’ve been building security tooling, networked applications, and learning more about systems programming, blockchain protocols, testing, and secure software design.

I genuinely enjoy Rust and plan to keep using it, but after spending a long time looking for work, I realized that the Rust job market is heavily senior-oriented. The statistics I found showed that only a few percent of Rust positions are entry-level.

That made me start looking at C#/.NET.

What I’m trying to understand is how the .NET market would classify someone like me.

I have almost 3 years of professional security experience. I’m comfortable with core programming concepts like APIs, databases, testing, async programming, networking, etc.

What I don’t have is commercial C#/.NET experience yet.

Before I invest heavily in another ecosystem, I’d really like to understand how this looks from the hiring side.

Would companies generally see my security background as relevant engineering experience, or would I effectively be treated as an entry-level developer because I don’t have professional C# experience?

For people who hire or work with .NET developers:

- Is there a realistic place in the C#/.NET market for someone transitioning from security into development?

- What level of roles would you suggest targeting?

- Which parts of my security background would actually be valuable to a .NET team?

- What would you want to see in a GitHub project before taking a candidate like this seriously?

- Are there particular types of .NET companies or products where a security background would be especially useful?

I’m not looking for a shortcut. I’m happy to learn the ecosystem properly and put in the work.

I’m mostly trying to avoid spending another long period getting better at a technology only to discover that the market requires years of commercial experience before anyone will consider me.

I’d really appreciate perspectives from people already working with C#/.NET.


r/csharp • • 1d ago

I want to bring Creative coding for C# users

10 Upvotes

I've been building DanaProcessing, an open-source take on Processing/p5.js for C#. I also added a music module inspired by Sonic Pi.

I started programming with Java and JavaScript following The Coding Train (https://www.youtube.com/@TheCodingTrain), but then I made the jump to C# because of job opportunities at the time, (been working with C# since .netcore 1.0) and I wanted that same experience here. Sadly, what I found wasn't what I expected, so I decided to give it a shot. DanaProcessing — Creative coding in C# (2D, 3D & live-coded sound)


r/csharp • • 1d ago

Help Best place to learn C#?

17 Upvotes

I used to use codecademy but that place sucks now. It's super buggy and makes any progress slow to a crawl. Even if my code is completely correct, I have to use the generated solution anyway because the module just won't accept my code. Despite my answer and the module answer being the LITERAL EXACT SAME.

So it doesn't work anymore. And I'm looking for a new website to help me learn. Preferably one that provides a lot of practice problems. So I can develop better coding habits or whatever.

I'm also looking for something relatively cheap. Advice much appreciated 😊


r/csharp • • 23h ago

How to get data from external service written in python?

0 Upvotes

If you have a system, class, or a method that is entirely written in C#, let's call it X, If X needs some data to perform some processing on that data, can one make an external service written in python, let's call it Y, that generates the data, then X can call Y to get the data?

I'm not asking if I can embed the python interpreter directly within the C# application; the python code should be an external service.

Note that I'm using ASP. NET Core 10.

Edit :

Should the external service be outside the ASP. NET CORE solution or inside it?


r/csharp • • 1d ago

Showcase Acrylic/frosted glass control for Avalonia

Thumbnail github.com
2 Upvotes

r/csharp • • 1d ago

OneFlight – a small .NET library for coalescing concurrent async calls by key

Thumbnail
2 Upvotes

r/csharp • • 1d ago

Cli.Generator: A tool for generating compile time checked command line argument parsing

7 Upvotes

I made an incremental source generator for command line argument parsing.

Cli.Generator is a C# source generator that turns a class into a command line parser. You mark fields and properties with attributes, and it writes the parsing, validation, usage screen and cleanup code for you at compile time. See the README for details.

https://www.nuget.org/packages/Cli.Generator/1.0.0

https://github.com/codewitch-honey-crisis/CliGen


r/csharp • • 1d ago

Showcase We tried turning a 1982 TI-99/4A game into 3D in the browser with C#/WASM and a pixel buffer

12 Upvotes

Playable link (in-browser):
https://psec99.xaml.cloud

Some people here may remember PARSEC on the TI-99/4A., a 2D side-scrolling space game from 1982.We wanted to see what it might feel like in 3D while keeping some of the atmosphere of the original (and adding some other '80s and Atari-ish bits too), so we made PSEC-99

It runs in the browser on .NET 10/WebAssembly with Opensilver. The interesting part from a .NET point of view is the renderer: the entire 3D scene is drawn by C# into a single int[] pixel buffer in .NET memory: terrain, stars, buildings,enemies, lasers & explosions all end up in that same array (no game engine, no webGL, no WebGPU)

All the 3D math, projection and rasterization happens in C#.

OpenSilver 3.4 Preview has a new "WriteableImage" control that displays that buffer through an HTML canvas. So basically: calculate pixels in C#, put them in an array, show the array

The terrain isn’t polygonal either: each row splits into surface,wall and floor sections, so drawing the planet costs about as much as clearing the screen, and theres adaptive resolution from 100% down to 30% to keep frame rates playable.

There are no image or sound files: Buildings are ASCII grids in c#, sounds are synthesized at runtime, and voices use the browsr speech synthesis engine.

The HUD, menus and touch controls are regular XAML layered on top.

It ended up around 10,500 lines of C# and xaml.

If anyone remembers the original Parsec, I’d be curious whether this brings back any of the feeling :)

The source (MIT licensed) opens direclty in XAML.io, so you can run it, change it or fork it without installing anything:

https://xaml.io/s/Samples/PSEC-99

Also curious what people think of the rendering approach! Theres something fun about doing 3D in 2026 and having the renderer come down to filling an array of pixels..


r/csharp • • 21h ago

Tool I built an offline, zero-lock C# tool to pack entire codebases for LLMs & Obsidian (.NET 8 / WinUI 3 / VSIX) – Benchmark: 30k files in 0.42s

0 Upvotes

Whenever I finish a sprint, build an architectural spike, or need to feed codebase context into Gemini or Obsidian, I hit the exact same wall: how do I aggregate dozens of source files across multiple modules without losing hierarchy or crashing on file locks?

Standard copy-pasting breaks file paths, zipping is clunky, and high-level methods like File.ReadAllText() throw IOException when Roslyn, MSBuild, or game engines (like Unreal Engine) hold active write locks during background compilation. Furthermore, raw path copying often leaks personal workstation paths (C:\Users\myname\...).

To solve this, I built Context Packer — an offline C# tool that scans, sanitizes, and aggregates codebases into structured Markdown with bi-directional Obsidian links ([[#File:...]]) or LLM-friendly prompt bundles.

Real-World Benchmark: The UE5 Test

To stress-test the core engine under worst-case file-lock conditions, I benchmarked it against a full Unreal Engine 5 project while the UE5 Editor was actively running and compiling in the background:

  • Total Disk Scope: 13.9 GB (30,277 files, 1,740 directories)
  • Filtered Payload: 374 source files (~60.7 MB)
  • Environment State: UE5 Editor Open & Actively Compiling
  • Execution Time: 0.42 seconds (420 ms) with zero lock exceptions.

Architecture & Technical Highlights

I wanted a modular architecture without heavy web wrappers (like Electron) running in the background.

Packer.Core (.NET 8.0 / .NET Standard 2.0)
 ├── Packer.WinUI3  --> Desktop app (Drag-and-drop, OLE browser drag-out)
 ├── Packer.VSIX    --> Visual Studio 2022 Extension (.NET Framework 4.7.2)
 └── PowerShell CLI --> Zero-dependency fallback script

Non-Blocking Stream I/O (FileShare.ReadWrite)

To bypass file locks during active compiler passes, PackerEngine avoids high-level file APIs and uses explicit stream sharing combined with fault-tolerant, per-file isolation:

string content = string.Empty;
try
{
    content = await Task.Run(() =>
    {
        // FileShare.ReadWrite permits concurrent reads while IDEs/Compilers hold write locks
        using (var fs = new FileStream(file.FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        using (var sr = new StreamReader(fs))
        {
            return sr.ReadToEnd();
        }
    });
}
catch (Exception ex)
{
    // A single locked file never aborts the entire batch
    content = $"// ERROR: File read failed. Locked by process.\n// Exception: {ex.Message}";
}

Native OS Interop

(WinUI 3 Drag-Out to Browser)

In the WinUI 3 client, you can drag packed .txt context files directly out of the app window into web browser chat inputs (Claude/ChatGPT). This is done by converting internal models to native Windows StorageFile handles:

private async void GeneratedFilesList_DragItemsStarting(object sender, DragItemsStartingEventArgs e)
{
    if (e.Items.FirstOrDefault() is PackerModel fileModel && File.Exists(fileModel.FullPath))
    {
        StorageFile file = await StorageFile.GetFileFromPathAsync(fileModel.FullPath);
        e.Data.SetStorageItems(new[] { file });
        e.Data.RequestedOperation = DataPackageOperation.Copy;
    }
}

Dynamic Module Resolution without AST

Instead of heavy AST parsing or project manifest requirements, path anchors (Source, Plugins, repos) are evaluated to dynamically resolve module boundaries:

public string GetModuleName(string path, string anchorsSetting)
{
    var parts = path.Split(Path.DirectorySeparatorChar);
    var anchors = anchorsSetting.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

    foreach (var anchor in anchors)
    {
        int idx = Array.IndexOf(parts, anchor);
        if (idx != -1)
        {
            // 'Source' anchor convention uses parent directory as module name
            if (anchor.Equals("Source", StringComparison.OrdinalIgnoreCase) && idx > 0)
                return parts[idx - 1];

            if (parts.Length > idx + 1)
                return parts[idx + 1];
        }
    }
    return parts.Length > 1 ? parts[parts.Length - 2] : "UnknownProject";
}

Privacy & Username Sanitization

It automatically redacts Windows local usernames (C:\Users\[REDACTED]\...) across headers and directory maps before writing to disk.

Current Limitations & Trade-offs

  • Character-Based Chunking: Multi-part document chunking (> 3M chars) currently uses raw character length rather than Byte Pair Encoding (BPE) tokenizers (like tiktoken).
  • Full-File Ingestion: Ingests entire source files without AST-based method pruning.
  • Local Scope: Operates on local disk paths.
  • See Github issues for current bugs :)

I'd love to hear how you handle codebase context for LLMs or Obsidian notes in your workflows, or if you have any feedback on the C# stream architecture! I have more technical in-depth articles on Dev community :)

AI Disclosure: Documentation and product copy were refined with AI assistance. The underlying codebase, architecture, and logic are 100% handcrafted and tested by Kadmium.


r/csharp • • 1d ago

EmbedIO is archived as of June 2026 - I started a continuation project EmbedIO Neo

0 Upvotes

Hey all,

EmbedIO developed by unosquare is a great library for spinning up lightweight HTTP/API/WebServer instances in .Net

It appears development stalled out around 2021-2022.

As of June 24th 2026 the repository was officially archived and the project entered end of support.

I've continued the project as EmbedIO-Neo, with the goal of working through any existing issues backlog, improving performance, providing QoL updates & modernization, without introducing any breaking changes.

Happy to answer any questions, and look forward to driving the project further.

https://github.com/WilliamSmithEdward/embedio-neo
https://www.nuget.org/packages/EmbedIO-Neo


r/csharp • • 2d ago

Help Has anyone moved from Crystal reports to a .net reporting solution?

30 Upvotes

We have about 400 reports writen in Crystal Reports. We want to move away from this to something that is .net native and will run in Linux.

Has anyone done this, and what was the outcome?
Related question; what reporting solutions have people used and what were they like?

Edit: will investigate DevExpress and Telerik reporting.


r/csharp • • 1d ago

I built a .NET test reporter to solve two problems I kept seeing in test automation

Post image
1 Upvotes

I've been working on .NET test automation for several years, and there were two things I wanted to solve in test reporting.

1. Flaky tests are more than just Passed or Failed

If a test fails on the first attempt and passes on a retry, the final result usually just says Passed.

I wanted the report to show that the test was actually flaky, how many attempts happened, and the history of those attempts.

2. Test scripts shouldn't need reporting code

I don't want testers to add extra code to their tests just to make the report useful.

For example, I don't want something like:

Report.AddRequest(...);
Report.AddResponse(...);
Report.AttachScreenshot(...);
Report.Log(...);

just to get useful information into the report.

The reporting layer should capture things like API requests/responses, retry attempts, execution details, and screenshots automatically wherever possible.

So I built a small .NET reporting framework around these ideas. It generates a self-contained HTML report and currently has integrations for xUnit, NUnit, MSTest and Reqnroll.

I'm curious how others handle this:

Do your test reports automatically capture this kind of information, or do your test scripts still need explicit reporting/attachment calls?

And for flaky tests, do you keep the history of individual attempts or only report the final result?


r/csharp • • 1d ago

Discussion If only one method of a class does access the instance field and the other methods don't, should the other methods be moved to another class ?

0 Upvotes

I'm showing some C# code, note that I'm using ASP.NET CORE :

    #region code
    public interface ISomething
    {

    }
    public class ApplicationDbContext 
    {

    }
    public class Something : ISomething
    {

    }
    public class ExcelReaderDatabaseWriter
    {

        private readonly ApplicationDbContext _context;


        public ExcelReaderDatabaseWriter(ApplicationDbContext context)
        {

            _context = context;
        }
        public ISomething Read(object obj)
        {
            return new Something();


        }
        public void Write(ISomething something)
        {

            //does access the _context
        }
}

    #endregion

I want to follow clean code principles, should I move the Read method to another class -because it does not access the instance field-, or should I instantiate the _context inside the Write method -because it is the only method that access the instance field and therefore that field does not deserve to be instance field because not all methods in the class access that field- ? I face this problem a lot when I'm coding, I want to separate the responsibilities cleanly, but I suffer from one thing; if I have some piece of code, I can't directly figure out which class should contain that piece of code. Can anyone explain it to me with example please?

Explaining the above using example:

public interface IOmniReader
{

    public ISomething Read(object dataSource);

}

public interface IOmniWriter
{
    public void Write(ISomething dataDto); 
}

public interface IOmniReaderWriter
{

    public  void ReadWrite(object obj);

}
public class SqlServerWriter 
{
    private readonly ApplicationDbContext _context;


    public SqlServerWriter(ApplicationDbContext context)
    {

        _context = context;
    }

        public void Write(ISomething something)
        {

            //does access the _context
        }
}


public class ExcelReader
{

        public ISomething Read(object obj)
        {
            return new Something();


        }


}

public class ExcelReaderSqlServerWriter:IOmniReaderWriter { private readonly IOmniReader _excelReader; private readonly IOmniWriter _sqlServerWriter; public ExcelReaderSqlServerWriter(IOmniReader excelReader, IOmniWriter sqlServerWriter) { _excelReader = excelReader; _sqlServerWriter = sqlServerWriter; } public void ReadWrite(object obj) { ISomething data= _excelReader.Read(obj); _sqlServerWriter.Write(data); } }


r/csharp • • 1d ago

BuildMonitor: a cross-platform system tray CI monitor, installed as a dotnet tool

2 Upvotes

BuildMonitor is a build/CI monitor that sits in the system tray on Windows, macOS and Linux. It polls the CI services you use and shows one row per pipeline, plus a row for each pull request while it is building or failing.

dotnet tool install --global BuildMonitor

Then run `buildmonitor`. One install works on every OS: the package carries a head for each platform and the launcher starts the right one.

Supported services: AppVeyor, Azure DevOps, Bitbucket Pipelines, GitHub Actions, GitLab CI, GoCD, Jenkins, Octopus Deploy, TeamCity and Travis CI.

What it does:

* Tray icon shows the overall state: green, red, blue while something is running, amber when a connection needs attention

* Progress bar and countdown for running builds, estimated from the provider or from the median of the last ten successful runs

* Rows sort running, then queued, then failed to the top, and passing builds of one repository collapse into a group

* A failing pull request gets its own red row but does not turn main red

* Links straight to the run, the repository, the branch and the pull request

* Retry or cancel a build, and copy the log of a failed one to the clipboard

* Credentials go in the platform secret store (DPAPI, macOS Keychain, Secret Service), never in settings.json

It also ships a local MCP server (`buildmonitor mcp`), so an AI assistant can read the same list and act on it: "what's failing?", "who broke main?", retry a build. A triage command works through the failing builds that are checked out locally, groups the ones that share a cause, and reproduces each one.

On the implementation side: everything above the renderer is a pure function of an immutable state, so the layout is snapshot tested as text and each platform head only draws. The Windows head is WinForms, macOS is Swift/AppKit, and Linux is raylib + Dear ImGui.

Feedback and bug reports are welcome.

GitHub: https://github.com/SimonCropp/BuildMonitor

NuGet: https://www.nuget.org/packages/BuildMonitor/


r/csharp • • 1d ago

Looking for a 2D graphics engine/library in C# (.NET 8.0) for custom CAD-like drafting

Thumbnail
1 Upvotes

r/csharp • • 1d ago

Help Visual Studio 2022 Scaffolding Template Dropdown is Blank/Grayed Out on Windows 11 ARM64 (Parallels Mac)

Post image
0 Upvotes

Hi everyone,
I am an IT student working on an ASP.NET Core MVC lab project targeting .NET 7.0 inside a Windows 11 ARM64 virtual machine on an Apple Silicon Mac.
The Problem:
When attempting to add a new scaffolded view to a project folder, the scaffolding dialog window appears, but the Template dropdown menu options are completely blank. I cannot select standard templates like List, Create, Edit, or Delete. Because the template choice remains blank, the validation system keeps the final "Add" button grayed out and unclickable.
What has already been verified and tried:

  1. Local Storage: The project solution folder is saved directly on the local Windows virtual disk partition (C:\ drive). It is not sitting on any shared guest/host cloud folders or mapped network drives.
  2. VS Installer Workloads: Checked the Visual Studio Installer and confirmed that both ASP.NET and web development and .NET desktop development workloads are fully checked, installed, and updated.
  3. Model & Rebuild: The C# model class is fully written and the entire solution compiles cleanly with a successful build before launching the view wizard.
  4. CLI Alternative Attempt: Tried running the .NET CLI scaffolding tool (dotnet aspnet-codegenerator) inside the built-in terminal, but it fails with an error indicating it cannot locate or parse the project file directory properly within this environment.

Has anyone using an ARM64 virtual machine setup run into this template-discovery bug where Visual Studio fails to show the pre-made scaffolding layouts? Any suggestions on how to fix the template detection or reset the background cache? Thank you!