Back to Explorer
Beginner Friendly Open-Source C#

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.

Updated: Thu, 15 Oct 2026 UTC (Live GitHub Sync)
Real-Time Radar

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 Issues
unoplatform/uno10,082 Tier S Β· 74 pts
#25501Opened today
Accessibility docs still list Skia Android and iOS as WIP after the mobile bridges merged

On 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

good first issueplatform/android πŸ€–platform/ios 🍎triage/untriaged
#564Opened today
Hebrew UI: a native-speaker review of strings.he.yaml

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) / Χ—Χ‘Χ¨Χ™

good first issuetranslation
eyalgolan/statecraft-israel266 Tier D Β· 19 pts
#548Opened today
CI: plan for the macos-15-intel runner's retirement (about August 2027) in the player golden workflow

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.

good first issuearea: tools
1
unoplatform/uno10,082 Tier S Β· 74 pts
#25479Opened 1 day ago
Windows.Storage.ThumbnailMode is not a WinRT type and makes ThumbnailMode ambiguous with Windows.Storage.FileProperties

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"

kind/buggood first issuetriage/untriagedarea/storage πŸ“¦
unoplatform/uno10,082 Tier S Β· 74 pts
#25477Opened 1 day ago
Event x:Bind to a method of an x:Name'd element fails with UXAML0001 (property x:Bind and WinUI work)

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

kind/buggood first issuetriage/untriagedarea/code-generation
unoplatform/uno10,082 Tier S Β· 74 pts
#25473Opened 1 day ago
Android SimpleOrientationSensor registers the content observer on Stop and leaks the Initialize sensor listener

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

kind/buggood first issueplatform/android πŸ€–triage/untriaged
unoplatform/uno10,082 Tier S Β· 74 pts
#25468Opened 1 day ago
RichTextBlockOverflow shows no content after RichTextBlock.Blocks is replaced in one layout pass (Skia)

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

kind/buggood first issuetriage/untriagedproject/text πŸ”€
unoplatform/uno10,082 Tier S Β· 74 pts
#25445Opened 1 day ago
Skia CrossFadeEffect weight is inverted vs WinUI (weight 1 shows Source1), breaking AcrylicBrush's dormant cross-fade path

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;

kind/buggood first issuetriage/untriagedarea/skia ✏️
unoplatform/uno10,082 Tier S Β· 74 pts
#25441Opened 1 day ago
StringUtil.FormatString throws FormatException on literal braces, unlike WinUI FormatMessage

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

kind/buggood first issuetriage/untriagedproject/resources 🈷️
unoplatform/uno10,082 Tier S Β· 74 pts
#25440Opened 1 day ago
InputManager capture branch ORs enterCaptureResult instead of enterResult into isOriginalSourceStale

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

kind/buggood first issueplatform/wasm 🌐triage/untriaged
unoplatform/uno10,082 Tier S Β· 74 pts
#25438Opened 1 day ago
Pivot: Items.Insert/RemoveAt throw ArgumentOutOfRangeException on Skia and headers are not rebuilt

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 🎯

kind/buggood first issuetriage/untriagedarea/skia ✏️
eyalgolan/statecraft-israel266 Tier D Β· 19 pts
#516Opened 1 day ago
Content: the Bernadotte event's comment says "about 200" arrests, but its sources give 246-266

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.

good first issuehistorical-accuracycontent
Ruben2776/PicView3,650 Tier A Β· 63 pts
#411Opened 1 day ago
[Bug]: Print stuck in infinite loading state on Windows 11

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

bughelp wanted
2
eyalgolan/statecraft-israel266 Tier D Β· 19 pts
#319Opened 2 days ago
Art: Jerusalem's symbolic Old City has 1948 roads crossing inside its walls

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

enhancementgood first issuehistorical-accuracyarea: unity
unoplatform/uno10,082 Tier S Β· 74 pts
#25354Opened 3 days ago
Lottie dash array without an offset entry renders with the wrong gaps (Skottie treats the last entry as the offset)

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

kind/buggood first issuetriage/untriagedarea/skia ✏️
#46415Opened 3 days ago
Agent ID should clearly show what section is selection

title, it isn't clear what you current have selected nor that they are actually buttons

Beginner Friendly
unoplatform/uno10,082 Tier S Β· 74 pts
#25306Opened 3 days ago
SamplesApp: unchecking "Use Fluent styles" crashes the WinAppSDK head

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

kind/buggood first issuetriage/untriagedarea/tests πŸ§ͺ
unoplatform/uno10,082 Tier S Β· 74 pts
#25305Opened 3 days ago
SamplesApp: removing a favorite leaves the star set when the sample is outside the selected category

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

kind/buggood first issuetriage/untriagedarea/skia ✏️
unoplatform/uno10,082 Tier S Β· 74 pts
#25304Opened 3 days ago
SamplesApp: removing a favorite leaves the star set when the sample is outside the selected category

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

kind/buggood first issuetriage/untriagedarea/skia ✏️
unoplatform/uno10,082 Tier S Β· 74 pts
#25290Opened 3 days ago
Internal CalendarView RowOrColumnMajor enum collides with the public Automation RowOrColumnMajor in friend assemblies

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.

kind/buggood first issuetriage/untriagedarea/a11y
unoplatform/uno10,082 Tier S Β· 74 pts
#25283Opened 3 days ago
VisualStateManager.GoToState ignores a CustomVisualStateManager in favor of GoToElementStateCore, and skips it for unknown states

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

kind/buggood first issuetriage/untriagedproject/styling πŸ‘”
1
nightscout/nocturne143 Tier S Β· 72 pts
#2068Opened 3 days ago
Google Health connector: improve first-time setup guidance and add a screenshot-based walkthrough

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

documentationenhancementgood first issueportal
2
unoplatform/uno10,082 Tier S Β· 74 pts
#25282Opened 3 days ago
Reordering a `ListView` whose item content has `AllowDrop` reports `DragItemsCompleted.DropResult = None`

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

kind/buggood first issuetriage/untriagedarea/skia ✏️
unoplatform/uno10,082 Tier S Β· 74 ptsPR #25309 In Progress
#25281Opened 3 days ago
`VisualCollection.InsertAbove` and `InsertBelow` insert at the wrong index

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

kind/buggood first issuetriage/untriagedarea/skia ✏️
unoplatform/uno10,082 Tier S Β· 74 pts
#25266Opened 3 days ago
Selector.GetItemsHostOrientations reports Vertical for a horizontal ItemsStackPanel

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

kind/buggood first issuetriage/untriagedarea/listview πŸ“ƒ
eyalgolan/statecraft-israel266 Tier D Β· 19 pts
#204Opened 4 days ago
Map: inland lowlands are labelled "Coastal plain" (e.g. the Tiberias hex)

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

buggood first issuecontentarea: tools
3
ObsidianMC/Obsidian481 Tier D Β· 15 pts
#538Opened 6 days ago
Block interaction tracking

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

enhancementhelp wantedepicnbt
MudBlazor/MudBlazor10,634 Tier S Β· 72 pts
#13980Opened 7 days ago
MudNavGroup: renders an unnamed nested <nav> landmark for its items

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

good first issueaccessibility
#13979Opened 7 days ago
MudDataGrid: settings menu, column drag handles and loading bar have no accessible name

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

good first issueaccessibility
MudBlazor/MudBlazor10,634 Tier S Β· 72 pts
#13978Opened 7 days ago
MudTablePager / MudDataGridPager: rows-per-page select has no accessible name

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

good first issueaccessibility

Top C# Repositories with Beginner Issues (20)

Updated Daily via GitHub GraphQL
Fallout-build
Fallout
Fallout-build/Fallout
Sβ€’Elite
164Β·C#

☒️ Fallout β€” The C#/.NET Build System

81%
Merge Rate
4h
Review Time
100%
1st-Timers
2 GFI
Scorecard
Ozark-Connect
NetworkOptimizer
Ozark-Connect/NetworkOptimizer
Sβ€’Elite
1.1kΒ·C#

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.​​​​​​​​​​​​​

#bufferbloat#docker#network-optimization
95%
Merge Rate
-
Review Time
80%
1st-Timers
1 GFI
Scorecard
unoplatform
uno
unoplatform/uno
Sβ€’Elite
10.1kΒ·C#

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.

#android#mvvm#roslyn
65%
Merge Rate
-
Review Time
75%
1st-Timers
91 GFI
Scorecard
jonathanpeppers
dotnes
jonathanpeppers/dotnes
Aβ€’WelcomingLow Sample
780Β·C#

.NET for the NES game console

#csharp#dotnet#emulation
100%
Merge Rate
<1h
Review Time
100%
1st-Timers
5 GFI
Scorecard
nightscout
nocturne
nightscout/nocturne
Sβ€’Elite
143Β·C#

A next-generation platform for diabetes management

#cgm#cgm-remote-monitor#diabetes
78%
Merge Rate
-
Review Time
56%
1st-Timers
3 GFI
Scorecard
thomhurst
TUnit
thomhurst/TUnit
Sβ€’Elite
4.0kΒ·C#

A modern, fast and flexible .NET testing framework

#csharp#dotnet#test
94%
Merge Rate
5d
Review Time
100%
1st-Timers
1 GFI
Scorecard
MudBlazor
MudBlazor
MudBlazor/MudBlazor
Sβ€’Elite
10.6kΒ·C#

Blazor Component Library based on Material Design principles. Do more with Blazor, utilizing CSS and keeping JavaScript to a bare minimum.

#blazor#blazor-components#component
71%
Merge Rate
-
Review Time
57%
1st-Timers
14 GFI
Scorecard
Altinn
altinn-studio
Altinn/altinn-studio
Sβ€’Elite
170Β·C#

Next generation open source Altinn platform and applications.

#altinn#apis#containers
79%
Merge Rate
-
Review Time
81%
1st-Timers
1 GFI
Scorecard
dotnet
runtime
dotnet/runtime
Sβ€’Elite
18.4kΒ·C#

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.

#dotnet#hacktoberfest#help-wanted
69%
Merge Rate
-
Review Time
70%
1st-Timers
27 GFI
Scorecard
PixiEditor
PixiEditor
PixiEditor/PixiEditor
Sβ€’Elite
8.1kΒ·C#

PixiEditor is a Universal Editor for all your 2D needs

#csharp#dotnet-core#dotnetcore
81%
Merge Rate
12h
Review Time
67%
1st-Timers
1 GFI
Scorecard
dotnet
roslyn
dotnet/roslyn
Sβ€’Elite
20.7kΒ·C#

The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.

#csharp#hacktoberfest#roslyn
67%
Merge Rate
-
Review Time
57%
1st-Timers
13 GFI
Scorecard
unitystation
unitystation
unitystation/unitystation
Aβ€’Welcoming
734Β·C#

The original unitystation

#hacktoberfest#ss13#unity
93%
Merge Rate
-
Review Time
100%
1st-Timers
2 GFI
Scorecard
modernuo
ModernUO
modernuo/ModernUO
Aβ€’Welcoming
362Β·C#

Highly Performant & Scalable Ultima Online Server Emulator

#csharp#csharp-core#dotnet
86%
Merge Rate
-
Review Time
67%
1st-Timers
1 GFI
Scorecard
open-telemetry
opentelemetry-dotnet-contrib
open-telemetry/opentelemetry-dotnet-contrib
Aβ€’Welcoming
676Β·C#

This repository contains set of components extending functionality of the OpenTelemetry .NET SDK. Instrumentation libraries, exporters, and other components can find their home here.

#dotnet#dotnet-core#opentelemetry
79%
Merge Rate
-
Review Time
69%
1st-Timers
2 GFI
Scorecard
MobiFlight
MobiFlight-Connector
MobiFlight/MobiFlight-Connector
Aβ€’Welcoming
359Β·C#

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.

#arduino#flight-simulation#flight-simulator
83%
Merge Rate
22h
Review Time
64%
1st-Timers
7 GFI
Scorecard
microsoft
garnet
microsoft/garnet
Sβ€’Elite
12.1kΒ·C#

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.

#cache#cache-storage#cluster
79%
Merge Rate
-
Review Time
87%
1st-Timers
1 GFI
Scorecard
dotnet
BenchmarkDotNet
dotnet/BenchmarkDotNet
Aβ€’Welcoming
11.5kΒ·C#

Powerful .NET library for benchmarking

#benchmark#benchmarking#c-sharp
84%
Merge Rate
7h
Review Time
100%
1st-Timers
1 GFI
Scorecard
DotHarness
dotcraft
DotHarness/dotcraft
Sβ€’Elite
404Β·C#

The agent harness for .NET: embeddable, extensible, remotely controllable and ready to use.

#agent#agent-runtime#coding-agents
90%
Merge Rate
-
Review Time
100%
1st-Timers
1 GFI
Scorecard
space-wizards
space-station-14
space-wizards/space-station-14
Aβ€’Welcoming
3.9kΒ·C#

A multiplayer game about paranoia and chaos on a space station. Remake of the cult-classic Space Station 13.

#c-sharp#game#space-station-13
56%
Merge Rate
-
Review Time
49%
1st-Timers
23 GFI
Scorecard
open-telemetry
opentelemetry-dotnet
open-telemetry/opentelemetry-dotnet
Aβ€’Welcoming
3.8kΒ·C#

The OpenTelemetry .NET Client

#asp-net#asp-net-core#distributed-tracing
82%
Merge Rate
-
Review Time
78%
1st-Timers
1 GFI
Scorecard

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.

Best C# Good First Issues | GetMerged