Good First Issues in C#
Explore curated starter issues in high-scoring C# repositories. Every listed issue belongs to a welcoming repository scored by C-Rankβ’ on PR merge rates, review responsiveness, and first-timer acceptance.
Arm Issue Sniper for fresh C# beginner issues
Beginner issues in welcoming S/A-Tier repositories get snatched within 15 minutes. Receive instant alerts on Discord, Telegram, or Email the minute a maintainer opens a new task.
Live Good First Issues (30)
Real-Time Open GitHub IssuesOn which page? π https://platform.uno/docs/articles/features/accessibility/index.html (source: doc/articles/features/accessibility/index.md), plus automation-properties.md and migrating-to-uno-7.md in the same docs tree. What's wrong? β The accessibility docs still describe the Skia Android and iOS accessibility support as unfinished, even though it has landed on master. The platform table on the accessibility overview page lists Android (TalkBack) and iOS (VoiceOver) as WIP: uno/doc/articles/features/accessibility/index.md Lines 18 to 19 in ec5e85c | Android | Skia | TalkBack | WIP | | iOS | Skia | VoiceOver | WIP | The "How it works" list on the same page only describes Windows (Win32), macOS and Web (WASM). There are no Android or iO
What problem does this solve The Hebrew UI preview (?lang=he, #193) has all its interface text in unity/Assets/UI/strings.he.yaml. It was written by the maintainers with AI help and has not been read by a native Hebrew speaker as a whole. A careful read catches unnatural wording, wrong gender agreement and inconsistent terms before more players see it. What you propose A native Hebrew speaker reads strings.he.yaml against strings.en.yaml, line by line, and suggests fixes. How to start (no setup needed): Open unity/Assets/UI/strings.he.yaml and unity/Assets/UI/strings.en.yaml side by side on GitHub. Each key has the same name in both files. For any line that reads badly, post a comment here with: the key, the current Hebrew, your suggested Hebrew, and one line on why. Keep {0}-style placeholders exactly as they are. Already decided, please keep: ΧΧΧΧΧΧ for both the Security meter and the Defence screen; ΧΧΧ©ΧΧ¨ΧΧ; ΧΧΧ¦Χ ΧΧΧΧΧΧΧ Χ; ΧΧ ΧΧΧΧ (Knesset) / ΧΧΧ¨Χ
What problem does this solve The player golden workflow (player-golden.yml, #533) checks the macOS player's x86_64 slice on GitHub's macos-15-intel runner. GitHub's runner-images team says that image is "available from now until August 2027. This will be the last available x86_64 image from Actions" (actions/runner-images#13045, 19 September 2025). Once it is retired, the x86_64 slice of the Universal Mac build would ship unchecked. What you propose Before August 2027, decide how the x86_64 slice is checked once macos-15-intel is gone: run it under Rosetta on an arm64 runner (arch -x86_64; the arm64 images install Rosetta); or a self-hosted Intel Mac; or drop x86_64 from the Mac build, if Unity and the player base allow. Done when the workflow no longer depends on macos-15-intel, and a test pins the replacement. Refs #533. Needs Unity? No: the workflow and tools/player_golden_check.py only.
Current behavior Uno declares a public enum Windows.Storage.ThumbnailMode (MusicView, VideosView) in src/Uno.WinRT/Storage/ThumbnailMode.cs. WinRT has no such type: the real one is Windows.Storage.FileProperties.ThumbnailMode, which Uno also ships (generated). Any file that imports both namespaces and uses ThumbnailMode fails to compile: error CS0104: 'ThumbnailMode' is an ambiguous reference between 'Windows.Storage.FileProperties.ThumbnailMode' and 'Windows.Storage.ThumbnailMode' Expected behavior Compiles, as it does on WinUI, where only Windows.Storage.FileProperties.ThumbnailMode exists. (using Windows.Storage; + using Windows.Storage.FileProperties; is a very common pair, e.g. the WinUI Gallery StoragePickers sample.) How to reproduce it Create a net10.0 class library and reference Uno.WinRT 7.0.0-dev.763: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net10.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Uno.WinRT"
Current behavior π An event {x:Bind} whose path starts with an x:Named element fails to compile with UXAML0001. This is not specific to BitmapImage or to <Image.Source>: it fails for a named StackPanel too. error UXAML0001: Unable to find member PlaySource on type Repro.MainPage error UXAML0001: Unable to find member Pnl on type Repro.MainPage Property {x:Bind} to the same named elements compiles fine (Text="{x:Bind PlaySource.PixelWidth, Mode=OneWay}", Text="{x:Bind PlaySource.ToString()}", and a named SolidColorBrush declared in <Border.Background>). Found while porting the WinUI Gallery Image sample (Click="{x:Bind ClickToPlaySource.Play}" on a BitmapImage named inside <Image.Source>). Expected behavior π― It compiles and calls the method on the named element, as on WinUI. The WinUI generated code is this.dataRoot.PlaySource.Play();. How to reproduce it (as minimally and precisely as possible) π¬ Create an app with dotnet new unoapp (or use any existing Uno app). Use this M
Current behavior On Android, SimpleOrientationSensor has two cleanup bugs (confirmed by code inspection on master 77e2e558c3d; no device was available for a runtime repro): StopListeningOrientationChanged(), in the branch used when the gravity sensor isn't available (or Android < 8), calls ContentResolver.RegisterContentObserver(...) instead of UnregisterContentObserver(...). Removing the last OrientationChanged handler therefore leaves the observer registered and registers it one more time: uno/src/Uno.WinRT/Devices/Sensors/SimpleOrientationSensor.Android.cs Line 188 in 77e2e55 context.ContentResolver!.RegisterContentObserver(accelerometerRotationUri, true, contentObserver); (an exact copy of the registration in StartListeningOrientationChanged at L155). Initialize() (called from the constructor) registers a gravity-sensor listener with _sensorManager.RegisterListener(new
Current behavior π On Skia, when a RichTextBlock's Blocks are replaced (Clear() + Add(), Blocks[0] = ..., or Add() + RemoveAt(0)) and no layout pass happens in between, the linked RichTextBlockOverflow columns do not pick up the new content. In my runtime test the overflow ends up painting nothing at all, and keeps the ActualHeight of the previous content (171.6 instead of 261.5), while the master RichTextBlock correctly shows the new text. In an app (a multi-column "story" page that swaps trips) this showed up as the overflow columns still displaying the previous story's text. If the app waits for a layout pass between Clear() and Add(), the overflow updates correctly, so this only hits the "replace content in one go" case. Expected behavior π― The overflow chain re-lays out from the new master content. In WinUI, CRichTextBlock::OnContentChanged calls CRichTextBlock::InvalidateContent, which invalidates the whole chain with CRichTextBlockOverflow::InvalidateAllOverflowContent (fu
Current behavior On the Skia renderer, the internal CrossFadeEffect weight is applied the wrong way round compared to WinUI: weight 1.0 shows Source1, weight 0.0 shows Source2. In SkiaEffectFuser, CrossFadeEffectNode fuses SourceB (Source2) into filter1 and SourceA (Source1) into filter2, returns filter1 for weight <= 0 and filter2 for weight >= 1, and blends filter2 * weight + filter1 * (1 - weight) in between: uno/src/Uno.UI.Composition.Skia/Composition/Uno/Drawing/SkiaEffectFuser.cs Lines 473 to 529 in 4393a80 case CrossFadeEffectNode crossFade: { var filter1 = Fuse(crossFade.SourceB, bounds); if (filter1 is null && !_isSource) { return null;
Current behavior π StringUtil.FormatString is the helper ported MUX controls use to format localized resource strings (%1!s!, %2!u! style). It rewrites %n!x! to {n} and then calls string.Format. Any literal { or } already in the format string is not escaped, so string.Format throws a FormatException. StringUtil.FormatString("{Unsaved} %1!s!", "Doc"); // FormatException: Input string was not in a correct format. Failure to parse near offset 1. Expected an ASCII digit. Call sites that pass localized resource strings (and so would throw if a translation or override contained a brace): ColorPickerSlider, ColorPickerSliderAutomationPeer, ColorSpectrumAutomationPeer, InfoBar (opened notification), PersonPicture (badge automation names), RatingControlAutomationPeer, TeachingTip, TreeViewList (drag/drop descriptions). None of the strings Uno ships today contain braces, so this is latent for the built-in resources. It bites when a string does contain braces, e.g. an app overriding one of the
Current behavior π In InputManager.RaiseLeaveEnter (managed pointer path, used by Skia and WASM), the explicit pointer capture branch raises Enter twice in step "#2 ENTER": publicly on the capture target (enterCaptureResult), then silently on the whole branch from originalSource (enterResult). After the second raise, the stale flag is updated with the wrong result: var enterCaptureResult = Raise(Enter, captureTarget, args, enterCaptureCtx); ... isOriginalSourceStale |= enterCaptureResult.VisualTreeAltered; result += enterCaptureResult; var enterResult = Raise(Enter, originalSource, args, enterCtx); isOriginalSourceStale |= enterCaptureResult.VisualTreeAltered; // <-- should be enterResult result += enterResult; enterCaptureResult.VisualTreeAltered was already ORed in a few lines earlier, so this line is a no-op. enterResult.VisualTreeAltered is never observed. If an Enter handler on the non-capture part of the branch changes the visual tree, originalSource is not refreshed by the
Current behavior π On Skia, mutating Pivot.Items while an item at or after the mutation point is selected throws ArgumentOutOfRangeException out of Items.Insert / Items.RemoveAt. The exception also aborts the remaining VectorChanged handlers, so Pivot never rebuilds its headers: the header row stays stale or disappears and the old content stays visible. A second, related case: if SelectedIndex is set on a Pivot before its template is applied, OnApplyTemplate throws the same exception, so no headers are ever created. First-chance stacks: ArgumentOutOfRangeException at Pivot.SynchronizeSelectedItem() <- Pivot.UpdateItems(args) <- ItemsControl.OnItemsSourceSingleCollectionChanged <- ItemsControl.OnItemsVectorChanged <- ItemCollection.Insert ArgumentOutOfRangeException at Pivot.SynchronizeSelectedItem() <- Pivot.UpdateItems(null) <- Pivot.OnApplyTemplate() Found while running the Windows Calculator app, which removes/re-inserts a PivotItem when switching modes. Expected behavior π―
content/events/bernadotte_assassination.yaml, line 14 (a YAML comment, not text the player sees), says "About 200 Lehi members were arrested". The figures cited in the same comment add up to more than that: Ben-Gurion to the Provisional State Council: 184 in Jerusalem and 62 in the Tel Aviv district, 246 in all (also lines 54-55 of the file); UN document S/1315: 184 in Jerusalem and 82 in Tel Aviv and other parts of the country by 23 September, 266 in all (lines 88-89); JTA: "hundreds", with 200 moved to Jaffa. To do: reword the comment so it states the sourced counts rather than "about 200". For example: "About 250 Lehi members were arrested (Ben-Gurion: 246; S/1315: 266 by 23 September; JTA: hundreds, 200 moved to Jaffa)". Comment only. No card text, effect, golden or sources: change, and no CHANGELOG line, since the comment is not player-visible. Check that dotnet test sim/Statecraft.sln still passes. Good first issue: one line in one file, with the sources already in the file.
Describe the bug When trying to print an image on Windows 11, PicView gets stuck in an infinite loading state (the loading spinner keeps spinning indefinitely) and no print job is executed. To Reproduce Steps to reproduce the behavior: Open an image in PicView (v5.1.4). Press Ctrl + P (or open the Print dialog). Select a printer (e.g., default Windows printer or "Microsoft Print to PDF") and click the "Print" button. The loading indicator (SpinWaiter) appears and keeps spinning indefinitely. Nothing prints, and no error message is displayed. Expected behavior The print job should complete and be sent to the selected printer (or display an error notification if it fails), and the loading overlay should dismiss. Additional context & Technical details OS: Windows 11 (64-bit) PicView Version: 5.1.4 Technical findings from examining the printing implementation in PicView.Avalonia.Win32/Printing and PicView.Core.WindowsNT/Printing: Thread blocking in GDI StartDocW: In Win32PrintEngine.c
What: towns round 2 (#31, branch promo-towns-2) draws Jerusalem's Old City as a symbolic walled square 4 km across, about 4 times the real one (0.9 km^2), so the walls hold the Haram and a quarter of houses at the kits' scale. The drawn 1948 roads (300 m ribbons) meet by Jaffa Gate and loop round the north and east. At this size they cross inside the square, through gaps in the walls, and that causes three departures from the real city: the walls have gaps wherever a road crosses, and each gap is drawn as a gate, so the census counts 13 gates (the real walls have seven open gates and the sealed Golden Gate); the Haram's platform is wider than long (1.3 x 1.1 km; the real one is about 488 x 315 m, long north-south), because only one place in the south-east quadrant is clear of every route; Al-Aqsa stands in the platform's south-east corner, not across its south end, and the citadel is moved east off the drawn Hebron road. Done when: The 1948 roads near the Old City run round the wall
Current behavior π A Lottie stroke whose dash array ("d") has no offset entry ("n": "o") renders with the wrong gap size on the Skottie-backed Lottie renderer. The offset entry is optional in the Lottie schema, but Skottie treats the last entry of "d" as the offset whatever its "n" says. With "d": [{"n":"d","v":4}, {"n":"g","v":14}] on a 104px-diameter circle (stroke width 6): JSON Dashes drawn Pixels lit along the stroke d + g (no offset) 41 49% d + g + o (offset 9) 18 22% The first case should look like the second (dash 4, gap 14, 18 dashes). The gap is lost because Skottie reads the intervals as [4] (an odd array, repeated to [4, 4]) with a phase of 14. Expected behavior π― The dash pattern is read by entry name, as lottie-web and LottieGen do, so a missing offset means offset 0 and the gap is honoured. This is also how the WinUI LottieVisualSource renders the file (compared side by side with the same JSON). How to reproduce it (as minimally and precisely as possibl
title, it isn't clear what you current have selected nor that they are actually buttons
Current behavior π In the SamplesApp WinAppSDK (Windows) head, unchecking Quick settings > "Use Fluent styles" (or the Fluent styles toggle in Settings) crashes the app within a few seconds. Windows reports an Application Error in Microsoft.UI.Xaml.dll with exception 0xc000027b (stowed exception), HRESULT 80070057 (E_INVALIDARG). It reproduced 3 times on the net11.0-windows10.0.19041.0 head (Microsoft.UI.Xaml.dll 3.2.3.0). The crash happened even when the Settings view was never opened, so the Settings ToggleSwitch code is not involved. Expected behavior π― The toggle should not crash the app on the WinUI head. Skia heads toggle fine. How to reproduce it (as minimally and precisely as possible) π¬ Build and run the SamplesApp WinAppSDK head. Open Quick settings and uncheck "Use Fluent styles". Wait a few seconds: the app dies with the error above. Workaround π οΈ Do not toggle it on the WinUI head. Anything else we need to know? π¬ Root cause (suspected, from code inspect
Current behavior π In SamplesApp, removing a sample from favorites leaves its star filled when the sample is not in the currently selected library category. The stored favorites list and the star then disagree, and the next toggle looks like it "does nothing" (it re-adds a sample whose star already looks set). Expected behavior π― The star reflects the stored favorites list immediately after every toggle, regardless of which category is selected in the library. How to reproduce it (as minimally and precisely as possible) π¬ Run SamplesApp (Skia desktop). Open a sample that is not in the library's selected category, for example via a deep link such as sample=Input_InputScope_Email (category TextBox) while another category is selected. Toggle favorite with the star button or Ctrl+Shift+D: the sample is added and the star fills. Toggle again (remove): the sample is removed from the stored favorites, but the star stays filled. Toggle again: the sample is re-added instead of the sta
Current behavior π In SamplesApp, removing a sample from favorites leaves its star filled when the sample is not in the currently selected library category. The stored favorites list and the star then disagree, and the next toggle looks like it "does nothing" (it re-adds a sample whose star already looks set). Expected behavior π― The star reflects the stored favorites list immediately after every toggle, regardless of which category is selected in the library. How to reproduce it (as minimally and precisely as possible) π¬ Run SamplesApp (Skia desktop). Open a sample that is not in the library's selected category, for example via a deep link such as sample=Input_InputScope_Email (category TextBox) while another category is selected. Toggle favorite with the star button or Ctrl+Shift+D: the sample is added and the star fills. Toggle again (remove): the sample is removed from the stored favorites, but the star stays filled. Toggle again: the sample is re-added instead of the sta
Current behavior src/Uno.UI/UI/Xaml/Controls/CalendarView/RowOrColumnMajor.cs declares an internal enum RowOrColumnMajor : uint in the Microsoft.UI.Xaml.Controls namespace. The public Microsoft.UI.Xaml.Automation.RowOrColumnMajor enum already exists. Any friend assembly (via InternalsVisibleTo on Uno.UI, e.g. Uno.UI.RuntimeTests) that has both using Microsoft.UI.Xaml.Automation; and using Microsoft.UI.Xaml.Controls; gets: error CS0104: 'RowOrColumnMajor' is an ambiguous reference between 'Microsoft.UI.Xaml.Automation.RowOrColumnMajor' and 'Microsoft.UI.Xaml.Controls.RowOrColumnMajor' I hit this porting the WinUI TableView_AutomationPeer_APITests test to the runtime tests. Expected behavior The same source compiles unchanged against WinUI, where the CalendarView equivalent lives in internal C++ code and never shows up in Microsoft.UI.Xaml.Controls. How to reproduce it In a project with InternalsVisibleTo access to Uno.UI (e.g. Uno.UI.RuntimeTests), add a file with: using Microsoft.UI.
Current behavior π VisualStateManager.GoToState does not follow WinUI's precedence when a CustomVisualStateManager is set on the template root: It calls the root's GoToElementStateCore before looking at the custom VSM. If the override returns true, the custom VSM is never called. If the state name is not found in the root's VisualStateGroups, it returns false without calling the custom VSM's GoToStateCore. Expected behavior π― Like WinUI, when a custom VSM is present, GoToState should call only its GoToStateCore: GoToElementStateCore on the root is skipped (it is only used when there is no custom VSM). GoToStateCore is called even if the state/group was not found (with null group and state), because the custom VSM may want to handle states the default implementation doesn't know about. Backed by the WinUI C++ sources, VisualStateManager::GoToStateImpl: https://github.com/microsoft/microsoft-ui-xaml/blob/winui3/release/2.5.1/src/dxaml/xcp/dxaml/lib/VisualStateManager_Partial.cp
Context and positive outcome We observed four people live while they configured the Google Health connector. The participants had little or no technical experience. All four successfully connected their accounts. This is a positive result: the connection flow was achievable. However, most experienced it as difficult because the interface did not provide enough direct guidance about where to start, what each step expected, and what to do after connecting. This issue collects the first usability feedback for a later follow-up. It covers first-time setup guidance and user-facing documentation. Findings and proposed improvements 1. Make Google Cloud setup an obvious starting point The Google Cloud setup section sits relatively far down the connector page. Participants did not immediately recognize that it was clickable or that it was the place to begin on their first installation. Bring the setup entry point near the top of the first-time flow. Give it a clear action label, such as Start
Current behavior In a reorderable ListView, if the item content contains an element with AllowDrop="True", the reorder is applied but DragItemsCompleted reports e.DropResult == DataPackageOperation.None. With AllowDrop left false on the content, the same drag reports Move. The ListView's Drop event is raised in both cases, and the items are reordered in both cases. Only the reported result differs. Expected behavior DragItemsCompleted.DropResult is Move for a completed reorder, whatever the item content looks like. On WinUI, ListViewBase::OnDrop explicitly sets AcceptedOperation = Move when the drop causes a reorder, so the result does not depend on a previous DragOver: https://github.com/microsoft/microsoft-ui-xaml/blob/8463f45162149de0ec3ad7df752596893fe3e13e/dxaml/xcp/dxaml/lib/ListViewBase_Partial_Reorder.cpp (ListViewBase::OnDrop) (Backed by the WinUI C++ source, not by a native WinUI run.) How to reproduce it Create a ListView with AllowDrop, CanDragItems and CanReorderItems all
Current behavior π ContainerVisual.Children.InsertAbove(newChild, sibling) puts newChild below sibling (it ends up before it in the list, so it renders first). InsertBelow(newChild, sibling) inserts one slot too low, and throws ArgumentOutOfRangeException when sibling is the first child. Given children [A, B] and a new visual C: Call Uno result Expected InsertAbove(C, A) [C, A, B] [A, C, B] InsertBelow(C, B) [C, A, B] [A, C, B] InsertBelow(C, A) ArgumentOutOfRangeException [C, A, B] Expected behavior π― Per the VisualCollection docs, InsertAbove inserts the new visual directly above the sibling in z-order (rendered after it), and InsertBelow directly below it (rendered before it). Uno's own InsertAtTop (append, rendered last) already follows that meaning of "above", so InsertAbove contradicts it. How to reproduce it (as minimally and precisely as possible) π¬ Runtime-backed: a unit test in Uno.UI.UnitTests (Skia build, net11.0, master 951b7b464b8) fails on all thre
Current behavior π Selector.GetItemsHostOrientations() only recognizes StackPanel and IOrientedPanel. ItemsStackPanel does not implement IOrientedPanel, so when a ListView/ComboBox uses a horizontal ItemsStackPanel (Orientation="Horizontal"), the method still reports Vertical for both the physical and logical orientation. // Selector.cs, GetItemsHostOrientations() // TODO Uno: This implementation is simplified, should be ported from WinUI if (panel is StackPanel sp) { ... } else if (panel is IOrientedPanel orientedPanel) { ... } // only VariableSizedWrapGrid implements it // otherwise (Vertical, Vertical) Expected behavior π― Like WinUI, a horizontal ItemsStackPanel reports Horizontal/Horizontal. In WinUI ItemsStackPanel implements IOrientedPanel: get_LogicalOrientation returns Orientation and get_PhysicalOrientation forwards to it. ItemsWrapGrid does the same, with the physical orientation being the opposite of Orientation. How to reproduce it (as minimally and precisely as pos
Status (2026-10-14): the derived rule is done (#302) and no hex is mislabelled under it; #401 has merged. Left: the info-panel note naming a town in a neighbouring water hex (Tiberias). Whether 25 km is the right threshold is a design question with the owner. The integration play-through found that the Tiberias hex reads "Coastal plain Β· elevation 70 m". Tiberias stands on the shore of the Sea of Galilee, at about β200 m. What happens Which hex Tiberias lands on: Tiberias (35.5333 E, 32.7944 N) falls in the lake hex q11 r8, which is at β214.5 m and is a lake. So tools/hexgrid.py moves it to the nearest land hex, q10 r8. That hex's centre (35.476 E, 32.807 N) is on the slopes west of the lake, at 70.4 m. The elevation shown is that hex centre's, which is correct for the hex. The wrong label: classify() in tools/hexgrid.py gives every land hex with a median of 0β200 m and enough rain the fallback biome coastal_plain (rule 7, "everything else"). So inland lowlands far from the sea
What feature would you like? This issue tracks implementation of different block interactions. This is not expected to be implemented in a single pass, this issue aims to just track implementation. 1. Doors, Switches & Mechanical Blocks Wooden doors β Open/close Copper doors β Open/close Wooden trapdoors β Open/close Copper trapdoors β Open/close Fence gates β Open/close Levers β Toggle redstone signal Buttons β Activate temporary redstone signal Note blocks β Change pitch and play notes Repeaters β Cycle redstone delay Comparators β Toggle subtraction mode Daylight detectors β Toggle inverted mode Redstone ore β Light up on interaction Bells β Ring when activated Crafters β Toggle crafting slots Iron doors β Respond to redstone Iron trapdoors β Respond to redstone 2. Containers & Inventory Blocks Chests β Open inventory Double chests β Combined inventory Trapped chests β Open inventory and emit redstone Ender chests β Play
Before reporting I searched existing issues I tried in private/incognito browser What went wrong? MudNavGroup renders <nav aria-label="{Title}"> and wraps its children in a nested MudNavMenu, which outputs a second, unnamed <nav>. Every expanded group therefore adds an unnamed navigation landmark inside a named one. With two expanded groups axe reports landmark-unique, and screen-reader landmark lists fill with nameless "navigation" entries. Actual: <nav aria-label="Catalogue" class="mud-nav-group"><button β¦>Catalogue</button> <div class="mud-collapse-container β¦"><div class="mud-collapse-wrapper-inner"> <nav id="k2dya4v5a" class="mud-navmenu β¦">β¦linksβ¦</nav> Expected: the inner container is not a landmark (a div, or role="none"), or it carries the group's name. Source: Components/NavMenu/MudNavGroup.razor lines 7 and 42β44; Components/NavMenu/MudNavMenu.razor line 4. Found with axe-core 4.14 in Chrome while auditing a gallery of MudBlazor examples (https://jonath
Before reporting I searched existing issues I tried in private/incognito browser What went wrong? Three controls the grid renders itself are unnamed: the settings menu shown with ShowMenuIcon has no AriaLabel (axe button-name); the column-reordering drag handles, in the header and in the columns panel, have no label (axe button-name); the Loading progress bar has no label (axe aria-progressbar-name). MudTable's equivalent was fixed in #12618; MudDataGrid's was not. Actual: <button class="mud-icon-button ... mud-menu-icon-button-activator" aria-haspopup="menu" aria-expanded="false" type="button"> <button class="mud-icon-button ... drag-icon-options" type="button"> <div role="progressbar" aria-busy="true" ... class="mud-progress-linear ... mud-table-loading-progress"> Expected: localized names for all three. Existing keys could cover two of them (MudDataGrid_Columns for the menu, MudTable_Loading for the bar); the drag handle needs a new key. Source: Components/DataGrid/MudDataGrid
Before reporting I searched existing issues I tried in private/incognito browser What went wrong? The "Rows per page:" caption is plain text that is not associated with the MudSelect next to it, so the combobox is unnamed (axe aria-input-field-name, WCAG 4.1.2). Actual: <div class="mud-table-pagination-information">Rows per page:</div> β¦ <div class="mud-input-slot ... mud-select-input" tabindex="0" role="combobox" aria-haspopup="listbox" aria-expanded="false"> Expected: the combobox is named by the caption (aria-labelledby) or by the localized text as aria-label. Source: Components/Table/MudTablePager.razor lines 17β21; Components/DataGrid/MudDataGridPager.razor lines 12β14. Found with axe-core 4.14 in Chrome while auditing a gallery of MudBlazor examples (https://jonathanperis.github.io/blazor-mudblazor-starter/demo/components). The code is identical on dev (b137a4d). Reproduction link https://mudblazor.com/components/table Reproduction steps <MudTable Items="@Enumerable.Ran
Top C# Repositories with Beginner Issues (20)
Updated Daily via GitHub GraphQLβ’οΈ Fallout β The C#/.NET Build System
Self-hosted optimization, monitoring (NMS), and security audit tool for UniFi Networks. Includes Wi-Fi Optimizer for wireless health scoring and channel optimization, advanced DNS/VLAN/firewall security checks, config optimization suggestions, centralized WAN and LAN speed test server w/ L2 tracing, CM, ONT, SFP, 5G modem stats +more.βββββββββββββ
Open-source platform for building cross-platform native Mobile, Web, Desktop, and Embedded apps from a single C#/XAML codebase. Work from any IDE/CLI with Hot Reload, Visual Designer, MCPs, and Skills built for modern .NET workflows. 200M+ NuGet downloads.
.NET for the NES game console
A next-generation platform for diabetes management
A modern, fast and flexible .NET testing framework
Blazor Component Library based on Material Design principles. Do more with Blazor, utilizing CSS and keeping JavaScript to a bare minimum.
Next generation open source Altinn platform and applications.
.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
PixiEditor is a Universal Editor for all your 2D needs
The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.
The original unitystation
Highly Performant & Scalable Ultima Online Server Emulator
This repository contains set of components extending functionality of the OpenTelemetry .NET SDK. Instrumentation libraries, exporters, and other components can find their home here.
MobiFlight is an open source project that allows you to create your own home cockpit for your favorite flight simulator in a flexible, affordable and extremely user-friendly way.
Garnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, key migration, and replication features. Garnet can work with existing Redis clients.
Powerful .NET library for benchmarking
The agent harness for .NET: embeddable, extensible, remotely controllable and ready to use.
A multiplayer game about paranoia and chaos on a space station. Remake of the cult-classic Space Station 13.
The OpenTelemetry .NET Client
How to make your first C# open-source pull request
Finding approachable Good First Issues in C# allows you to build real-world software engineering experience. Instead of submitting PRs to abandoned repositories, GetMerged verifies maintainer review speeds and first-timer acceptance rates before you write a single line of code.
Select any issue above to claim it directly on GitHub, or click a repository to inspect full maintainer review turnaround metrics and triage guidance!
Get this week's top welcoming repos + fresh Good First Issues for C#
Free weekly email, scoped to C#. No account needed - confirm once and unsubscribe anytime.