Sign in

Gerald Versluis

@jfversluis.dev
2K followers 163 following 1.2K posts

Engineer @microsoft.com (.NET) | content creator | speaker | gamer | .NET MAUI, Blazor, C# | posts & opinions on personal title | He/Him | Talk about what you love, not what you don't. 📍 Maastricht, NL 🎥 YouTube.com/@jfversluis 🔌 jfversluis.dev

PostsRepliesMedia
Gerald Versluis @jfversluis.dev · 25/09/2026
.NET MAUI on iPhone Duo anyone? 👀
030
Gerald Versluis @jfversluis.dev · 15/09/2026
Your app feels slow. The process you are profiling might be innocent. This Visual Studio walkthrough separates CPU work from waiting, then finds 50 ms added to every streamed update. devblogs.microsoft.com/visualstudio…
Visual Studio Performance Profiler showing CPU usage results for a distributed .NET application.
010
Gerald Versluis @jfversluis.dev · 14/09/2026
That thing you learned the hard way? It might be a .NET Conf talk. Community Days CFP is open: remote 30-minute sessions, Nov 12-13. .NET 11 demos are preferred, but any useful .NET topic can be considered. Submit by Oct 6: sessionize.com/dotnetconf-community…
Official .NET Conf 2026 Community Days promotional banner.
001
Gerald Versluis @jfversluis.dev · 12/09/2026
Long press is built into .NET MAUI 11. This sample covers MinimumPressDuration, AllowableMovement, GestureStatus, commands, touch position, tap coexistence, and a two-finger iOS/Mac example. github.com/dotnet/maui-samples/tree…
Illustrated .NET MAUI 11 long-press sample card with a phone showing a press-and-hold box, completed status and coordinates, plus API notes for duration, movement, commands, position, and gesture lifecycle.
030
Gerald Versluis @jfversluis.dev · 11/09/2026
Friday .NET tip: scanning text for the same substrings repeatedly? Build SearchValues<string> once, then use ContainsAny. Need the position? Use IndexOfAny. .NET 9+, Ordinal or OrdinalIgnoreCase only. learn.microsoft.com/dotnet/api/syst…
C# code card showing a static SearchValues<string> containing error, fatal, timeout, and circuit open, reused with ContainsAny to scan each log line.
010
Gerald Versluis @jfversluis.dev · 10/09/2026
I'm live on .NET Unboxed right now, showing some of the new .NET MAUI 11 bits 🎁 The team is opening .NET 11 RC1, with Jon Galloway, Daniel Roth, Mads Torgersen, and more. Come hang out: www.youtube.com/watch?v=5fvi7m1QxIY
Official YouTube thumbnail for .NET Unboxed: .NET 11 Release Candidate 1.
030
Gerald Versluis @jfversluis.dev · 10/09/2026
C# 15 preview lets break and continue target an enclosing labeled loop. That can remove a state flag or awkward goto from genuinely nested control flow. For a simple loop, keep it simple. devblogs.microsoft.com/dotnet/dotne…
C# 15 code example with two nested foreach loops. The outer loop is labeled scanRows, continue scanRows moves to the next row, and break scanRows exits both loops.
110
Gerald Versluis @jfversluis.dev · 10/09/2026
Per-solution themes make Visual Studio 2026 windows easy to spot. The useful part is settings.VisualStudio.json beside the solution. Commit it for team settings, or keep it personal with .gitignore. devblogs.microsoft.com/visualstudio…
Official Visual Studio image framed in a social card, showing two Visual Studio 2026 windows with contrasting color themes and notes about solution-scoped settings.VisualStudio.json.
020
Gerald Versluis @jfversluis.dev · 09/09/2026
Tomorrow I'm joining .NET Unboxed for .NET 11 RC1 🎁 I'll show some of the new .NET MAUI 11 bits, alongside Jon Galloway, Daniel Roth, Mads Torgersen, and more. Thursday, 20:00 CEST / 18:00 UTC www.youtube.com/watch?v=5fvi7m1QxIY Which MAUI 11 bit are you most curious about?
Official YouTube thumbnail for .NET Unboxed: .NET 11 Release Candidate 1.
000
Gerald Versluis @jfversluis.dev · 09/09/2026
A GitHub Actions job that only reads Dependabot alerts should not get unrelated token access. Use vulnerability-alerts read at job level. Once you specify permissions, omitted ones become none. docs.github.com/actions/reference/w…
Editor-style diagram showing a GitHub Actions job with the vulnerability-alerts GITHUB_TOKEN permission set to read, plus notes that omitted permissions become none and the permission accepts read or none.
010
Gerald Versluis @jfversluis.dev · 09/09/2026
A green managed test run does not prove the Native AOT publish behaves the same. Keep the fast lane. Add one representative native test lane. Verify test count and outcomes. A passing subset is still a false green. MSTest 4.4: devblogs.microsoft.com/dotnet/mstes…
Official .NET Blog diagram showing familiar MSTest code moving through source generation, which creates a test registry, delegates, and roots, before producing a Native AOT test executable.
000
Gerald Versluis @jfversluis.dev · 08/09/2026
Content exclusions now carry into agentic work. The GitHub Copilot app and Copilot CLI keep excluded files out of context. Available for Copilot Business and Enterprise. github.blog/changelog/2026-09-02-co…
Official GitHub release graphic with a green shield-like GitHub mark and the text Content exclusions in the Copilot app and CLI, labeled new release.
000
Gerald Versluis @jfversluis.dev · 08/09/2026
Stop creating every XAML resource at startup. .NET MAUI 11 XAML Source Generation turns dictionary entries into factories and creates them on demand. The benchmark shows up to ~8× faster dictionary initialization. No XAML rewrite. github.com/dotnet/maui/pull/33826
Diagram comparing eager creation of every .NET MAUI resource at startup with .NET MAUI 11 registering resource factories and creating each resource only when first requested, with up to roughly eight times faster ResourceDictionary initialization for large dictionaries.
130
Gerald Versluis @jfversluis.dev · 07/09/2026
The code is written. The PR still has review feedback, failed checks, and a merge conflict. VS Code 1.136 adds Agent Merge (preview). It can keep working through those blockers until the PR is ready. Which one would you hand off first? aka.ms/VSCode/136
VS Code Insiders Agents window with the Agent Merge menu open, showing options to address reviews, fix CI failures, resolve conflicts and behind branches, while automatic pull request merging is turned off.
000
Gerald Versluis @jfversluis.dev · 05/09/2026
MAUI Day Skopje is 12 days away 🇲🇰 September 17. One free, in-person day focused on .NET MAUI, with sessions, speakers, and plenty of time to talk with the community. If Skopje is within reach, go check it out: mauiday.net/skopje Anyone here joining?
Screenshot of the MAUI Day Skopje event page showing the September 17, 2026 date, MAUI Day Skopje badge, event description, and Get a Ticket and Submit a Talk buttons over a conference photo.
100
Gerald Versluis @jfversluis.dev · 04/09/2026
Tasks rarely finish in the order you started them. Since .NET 9, `Task.WhenEach` lets you process them as they complete with `await foreach`. No `WhenAny` loop. No removing finished tasks yourself. learn.microsoft.com/dotnet/api/syst…
Side-by-side C# code comparison showing a manual Task.WhenAny loop that removes completed tasks and the shorter Task.WhenEach await foreach pattern, with reminders to process in completion order and await each task.
110
Gerald Versluis @jfversluis.dev · 03/09/2026
We're live! .NET MAUI meets GitHub Copilot Canvas 🤝 Join David Ortinau, Dominik Titl, and me as we inspect running MAUI apps, analyze layouts, record interactions as tests, and use captured evidence to diagnose failures. Watch now: www.youtube.com/watch?v=A5Pr5N999tc
Official thumbnail for the .NET MAUI Community Standup titled Inspect, Record, Create: .NET MAUI Meets GitHub Copilot Canvas, with portraits of Gerald Versluis, David Ortinau, and Dominik Titl.
010
Gerald Versluis @jfversluis.dev · 03/09/2026
Capture it. Keep it. .NET MAUI 11 Preview 7 adds `SaveToGallery` for Media Picker photo and video capture. It is opt-in and works on Android, iOS, and Mac Catalyst. learn.microsoft.com/dotnet/api/micr…
Editorial-style .NET MAUI SaveToGallery flow showing a phone capturing media, an opt-in SaveToGallery toggle defaulting to false, and photos arriving in the gallery, with supported and unsupported platform notes.
131
Gerald Versluis @jfversluis.dev · 03/09/2026
Half-finished work, no stash required. Visual Studio 2026 now supports Git worktrees. Create one from a branch or commit, open it in a new window, and delete it when done. learn.microsoft.com/visualstudio/re…
Visual Studio Git Repository window for CalculatorApp showing worktrees alongside feature and fix branches, plus a detached worktrees section.
121
Gerald Versluis @jfversluis.dev · 02/09/2026
Tomorrow at 20:00 CEST / 18:00 UTC: .NET MAUI meets GitHub Copilot Canvas 🤝 Join David Ortinau, Dominik Titl, and me to see a tool inspect apps, analyze layouts, record interactions as tests, and capture evidence when things fail. www.youtube.com/watch?v=A5Pr5N999tc
Official thumbnail for the .NET MAUI Community Standup titled Inspect, Record, Create: .NET MAUI Meets GitHub Copilot Canvas, with portraits of Gerald Versluis, David Ortinau, and Dominik Titl.
000
Gerald Versluis @jfversluis.dev · 02/09/2026
Bot PR or very large PR? Copilot code review covers both. Copilot cloud agent PRs now get full agentic reviews. The old 300-file / 20,000-line limit no longer applies. github.blog/changelog/2026-08-27-co…
GitHub pull request review menu for resolving a Copilot code review comment, with Addressed, Won't fix, and Incorrect options and short descriptions.
110
Gerald Versluis @jfversluis.dev · 02/09/2026
Your MAUI page can stay alive while its XAML changes underneath it. .NET MAUI 11 Preview 7's Incremental Hot Reload patches every live instance of an affected page or control. It works with `dotnet watch` too. devblogs.microsoft.com/dotnet/dotne…
Diagram showing a .NET MAUI XAML TextColor edit generating one patch that updates three live StatusCard instances without recreating their pages, with limitations for x:Name, root-type, C#, file, and NuGet changes.
120
Gerald Versluis @jfversluis.dev · 01/09/2026
Start in Copilot CLI. Continue in VS Code. VS Code 1.135 shows recent external Copilot sessions in the Sessions list. Open one to view the conversation and keep going. code.visualstudio.com/updates/v1_13…
Official VS Code 1.135 release graphic with the blue Visual Studio Code logo above the text "VS Code v1.135 New release" on a dark background.
100
Gerald Versluis @jfversluis.dev · 01/09/2026
I like this C# 15 preview feature: `closed` hierarchies. The compiler knows every direct subtype, so your switch can be exhaustive without a fallback. Add another subtype later and the switch is flagged for you. learn.microsoft.com/dotnet/csharp/l…
Blueprint-style C# 15 code card showing a closed PaymentResult record with sealed Success and Declined records, followed by an exhaustive switch expression with no default arm.
160
Gerald Versluis @jfversluis.dev · 31/08/2026
.NET Conf returns November 10-12! 🎉 Three days, free and online, with the official launch of .NET 11. The schedule is still coming together. For now, save the dates. What are you hoping to see this year? devblogs.microsoft.com/dotnet/dotne…
Official .NET Conf 2026 banner for the November 10-12 virtual event and launch of .NET 11.
100
Gerald Versluis @jfversluis.dev · 22/08/2026
Last week I said: send a PR to add your app to Built with .NET MAUI. You no longer need one. 😅 There is now a static showcase with search and filters, plus an issue form with automated validation. Huge shoutout to @james.montemagno.com! jfversluis.dev/built-with-maui
Screenshot of the new Built with .NET MAUI website showing 73 community apps, search and platform filters, and a grid of app cards in the dark theme.
141
Gerald Versluis @jfversluis.dev · 21/08/2026
A log call on a hot path can box values, allocate temporary objects, and parse its template at runtime. `LoggerMessageAttribute` generates a strongly typed logging method at compile time instead. learn.microsoft.com/dotnet/core/ext…
Nord-style code graphic comparing a regular LogInformation call, which can perform repeated runtime work, with a LoggerMessage partial method generated at compile time. The graphic highlights no value-type boxing, compile-time template parsing, and fewer allocations.
100
Gerald Versluis @jfversluis.dev · 20/08/2026
Shell routes can carry values in the path now. .NET MAUI 11 Preview 7 adds route templates: `trip/{tripId}` matches `//routes/trip/SEA-204`, then delivers `tripId` through the existing navigation-data APIs. devblogs.microsoft.com/dotnet/dotne…
Blueprint-style graphic showing a .NET MAUI Shell route template flow: register trip/{tripId}, navigate to //routes/trip/SEA-204, and receive tripId with the value SEA-204.
110
Gerald Versluis @jfversluis.dev · 19/08/2026
One property. One null check. No manual backing field. C# 14 lets a custom accessor use the compiler-generated field through `field`. Keep `get;`, customize `set`, and remove the extra member. learn.microsoft.com/dotnet/csharp/w…
Side-by-side code comparison of a C# property with a manually declared backing field and the shorter C# 14 version using the compiler-generated field keyword for null validation.
110
Gerald Versluis @jfversluis.dev · 19/08/2026
One plugin. VS Code, Copilot CLI, and the GitHub Copilot app. Agent Plugins 1.0 support is GA. Skills and MCP server config share a portable package across supported clients. github.blog/changelog/2026-08-12-ag…
VS Code Extensions view open to the Agent Plugins section, showing several marketplace plugins with Install buttons.
110
Gerald Versluis @jfversluis.dev · 18/08/2026
That long prompt no longer disappears when the answer gets interesting. VS Code 1.133 keeps the active prompt pinned while you scroll. Select it to jump back, or use the arrows to move between prompts. code.visualstudio.com/updates/v1_13…
VS Code Chat scrolled to a response about null-conditional assignments while the prompt "Tell me more about null-conditional assignments" remains pinned at the top with a 2/2 position indicator.
110
Gerald Versluis @jfversluis.dev · 18/08/2026
Native passkeys, without three platform bridges. .NET MAUI 11 Preview 7 adds `CreateAsync` and `AssertAsync`. Your relying-party server still verifies the WebAuthn response. Official sample: github.com/dotnet/maui/tree/11.0.10…
iPhone simulator showing a .NET MAUI 11 Preview 7 app behind the native iOS 'Save a passkey?' sheet for preview7@example.test, with an Add Passkey button.
100
Gerald Versluis @jfversluis.dev · 14/08/2026
Local AI gets more interesting beyond chat. This .NET 10 sample uses Foundry Local for live, on-device speech-to-text with interim and final results. The microphone demo is Windows-only: devblogs.microsoft.com/dotnet/found…
Console showing cyan interim and white final speech-to-text output beside a GPU monitor.
110
Gerald Versluis @jfversluis.dev · 13/08/2026
Not assigning is useful. Skipping the work to create the value is better. C# 14 allows: `customer?.Order = GetCurrentOrder();` If `customer` is null, the right side is not evaluated. learn.microsoft.com/dotnet/csharp/w…
Screenshot of VS Code showing C# 14 null-conditional assignment. The terminal output reports zero CreateOrder calls for a null customer and one call for a non-null customer.
110
Gerald Versluis @jfversluis.dev · 13/08/2026
MAUI binding typos should fail the build, not wait for you to tap the right screen. Use `x:DataType` where context changes, type each `DataTemplate`, then promote XC0022/XC0023/XC0025 in CI. I made a video on compiled bindings: youtu.be/RAuW8NvRDns
Thumbnail for Gerald Versluis’s video “Better Performance with Compiled Bindings - .NET MAUI 101.”
120
Gerald Versluis @jfversluis.dev · 12/08/2026
Not every PR needs the same review depth. Lite and Balanced are generally available for GitHub Copilot code review. Pick per review or set an org default. Which would you use? github.blog/changelog/2026-08-07-co…
GitHub organization settings for Copilot code review showing the default review-effort menu with Lite for an essential low-cost review, Balanced for deep analysis at moderate cost, and Max marked as coming soon.
000
Gerald Versluis @jfversluis.dev · 12/08/2026
A red build should show evidence, not send you log hunting. Microsoft.Testing.Platform 2.3 puts test failures and summaries directly in GitHub Actions. The reporter is still preview. devblogs.microsoft.com/dotnet/micro…
GitHub Actions test summary generated by Microsoft.Testing.Platform, showing one failed test with its error message and stack trace directly on the workflow page.
111
Gerald Versluis @jfversluis.dev · 11/08/2026
Issues can be related without blocking or duplicating each other. GitHub's new "Relates to" relationship is in public preview, adding a neutral connection for cross-cutting work. github.blog/changelog/2026-08-07-co…
100
Gerald Versluis @jfversluis.dev · 10/08/2026
One quick question shouldn't derail the agent that's already working. VS Code 1.132 adds `/btw`: a side chat that shares the current context and prompt cache without interrupting the active turn. Small feature. Very practical. code.visualstudio.com/updates/v1_132
VS Code Agents window showing a C# test project while a primary test investigation continues and a /btw side chat identifies xUnit as the repository's test framework.
010
Gerald Versluis @jfversluis.dev · 07/08/2026
Very millennial of me: I will happily type a small novel before talking to my computer. Then I tried VS Code 1.131's built-in dictation. Chat, editors, even the terminal. Honestly? Much faster than I expected. code.visualstudio.com/updates/v1_131
100
Gerald Versluis @jfversluis.dev · 07/08/2026
Upgraded a .NET MAUI app to .NET 10 and content moved under Android system bars? `ContentPage` now defaults to edge-to-edge. Set `SafeAreaEdges="Container"` to restore .NET 9-style behavior. learn.microsoft.com/dotnet/maui/use…
Android screenshot of a .NET MAUI app with a large purple .NET bot image extending edge-to-edge behind the status and navigation bars, with an overlay explaining edge-to-edge content.Android screenshot of a .NET MAUI form titled "Respect All Safe Areas," with the app bar below the status bar and the Submit button above the home indicator.
140
Gerald Versluis @jfversluis.dev · 06/08/2026
We’re live! 🔴 Matt Goldman, David Ortinau, and I are recapping MAUI UI July: the highlights, community contributions, latest updates, and what’s next for building beautiful .NET MAUI apps. Come join us: www.youtube.com/watch?v=XH19sR5AzuA
Promotional thumbnail for the .NET MAUI Community Standup "MAUI UI July Recap." Text lists David Ortinau, Gerald Versluis, and Matt Goldman, with circular headshots of all three on a purple gradient background.
020
Gerald Versluis @jfversluis.dev · 06/08/2026
MAUI UI July was a month of UI inspiration, tips, demos, and community contributions. This Thursday, Matt Goldman, David Ortinau, and I recap the highlights and what’s next for building beautiful .NET MAUI apps. 🗓️ Aug 6, 21:00 CEST www.youtube.com/watch?v=XH19sR5AzuA
Promotional thumbnail for the .NET MAUI Community Standup "MAUI UI July Recap." Text lists David Ortinau, Gerald Versluis, and Matt Goldman, with circular headshots of all three on a purple gradient background.
113
Gerald Versluis @jfversluis.dev · 05/08/2026
Our midlife crisis has a registration page now. Mark and I signed up for HYROX Utrecht: 8 km running plus sleds, wall balls and burpees. The name is silly. The cause is serious. We're raising €1,500 for KWF cancer research ❤️ acties.kwf.nl/fundraisers/MarkandGe…
Fundraiser graphic titled “Midlife crisis, but make it painful,” combining Mark and Gerald in a red convertible with their HYROX arena image and €1,500 KWF cancer-research goal.
130
Gerald Versluis @jfversluis.dev · 05/08/2026
“Generate unit tests” leaves a lot unsaid. A new open-source test agent learns the repo, framework, and test command before writing tests. It completed 140/152 benchmark tasks vs 120/152 for stock Copilot. devblogs.microsoft.com/dotnet/polyg…
Diagram titled "A repository-aware unit-test workflow" showing five stages: research the repository, plan test scenarios, implement and register unit tests, build and run the suite, then check assertions, coverage gaps, and test discovery at a quality gate.
200
Gerald Versluis @jfversluis.dev · 05/08/2026
Publishing to NuGet.org with an API key? Aug 17: new keys max out at 30 days. Nov 1: older keys expire. If CI still uses a key, look at Trusted Publishing now. devblogs.microsoft.com/dotnet/stren…
Graphic summarizing NuGet.org API key changes: new keys are limited to 30 days starting August 17, 2026; older keys expire November 1, 2026; Trusted Publishing with OIDC is recommended.
001
Gerald Versluis @jfversluis.dev · 18/07/2026
One shot with GitHub Copilot Desktop: @mauiday.net event app with data coming from Sessionize, branding taken from the website, used MAUI DevFlow so that the agent could self-verify and adjust. Is it perfect? Not yet, but also I could not have done this in the time Copilot did.
050
Gerald Versluis @jfversluis.dev · 13/07/2026
Copilot CLI tip: restrict tools before the task starts. If I only want repo work, I do not want the agent trying web searches or unrelated commands. Use available/denied tools to shape the session up front. Fewer detours. Less approval noise. Less wasted context.
Terminal screenshot in Windows PowerShell showing the command copilot --excluded-tools='web_fetch,web_search' at a C source prompt, demonstrating how to start Copilot CLI with web fetch and web search tools excluded.
100
Gerald Versluis @jfversluis.dev · 13/07/2026
Copilot CLI remote control feels like a small feature until you use it. Start a session with --remote, walk away, then steer it from GitHub.com or GitHub Mobile when it needs approval or direction. Very handy for long-running fixes where the terminal is not where you are.
Desktop screenshot of GitHub Copilot CLI showing the slash command /remote with options to enable or disable remote control, alongside a code diff and session details.Mobile screenshot of a GitHub Copilot remote session in GitHub Mobile showing a conversation about merging a pull request, a branch-policy question, and a reply box to continue from the phone or web.
110
Gerald Versluis @jfversluis.dev · 10/07/2026
The one thing I want for the GitHub Copilot desktop app now is a way to go over all my sessions that have an open PR that is not merged and tell me the latest state of each so I don't have to poll them all myself with: news?
Screenshot of a GitHub Copilot chat showing a PR status update: CI passed on the previous commit, one unresolved review thread remains, and a new CI run is pending.
120