<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Announcement on XAML.io Blog</title><link>https://blog.xaml.io/tags/announcement/</link><description>Recent content in Announcement on XAML.io Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 06 Jul 2026 04:00:00 -0400</lastBuildDate><atom:link href="https://blog.xaml.io/tags/announcement/index.xml" rel="self" type="application/rss+xml"/><item><title>Migrate Your WPF App to the Web, From Your Browser</title><link>https://blog.xaml.io/post/migrate-wpf-to-the-web/</link><pubDate>Mon, 06 Jul 2026 04:00:00 -0400</pubDate><guid>https://blog.xaml.io/post/migrate-wpf-to-the-web/</guid><description>&lt;img src="https://blog.xaml.io/" alt="Featured image of post Migrate Your WPF App to the Web, From Your Browser" /&gt;&lt;p&gt;XAML.io v0.8 introduces &lt;strong&gt;Migrate from WPF&lt;/strong&gt;, a set of free, in-browser tools for bringing an existing WPF application to the web. You can (1) point them at a compiled build and get an instant, feature-by-feature compatibility report, (2) import a project and run it in the browser, or (3) hand a production application to our team for an end-to-end migration. The technology underneath is &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt;, the open-source framework that runs WPF-style C# and XAML on the web by compiling C# to WebAssembly and rendering XAML as &lt;strong&gt;real HTML DOM elements&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;WPF developers are right to be skeptical of the phrase &amp;ldquo;runs in the browser,&amp;rdquo; so this post is deliberately heavy on code, screenshots, and a reference migration you can open and inspect yourself. The aim is to show how the tooling works and where its limits are, not to win you over with an adjective.&lt;/p&gt;
&lt;div class="video-square" style="position:relative;width:100%;max-width:500px;margin:0 auto;aspect-ratio:1/1;"&gt;
 &lt;iframe loading="lazy" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
 src="https://www.youtube.com/embed/53bqIEH-aSI"
 referrerpolicy="strict-origin-when-cross-origin"
 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
 allowfullscreen
 title="YouTube Video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A one-minute look at Migrate from WPF, from importing a WPF app to running it in the browser.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/migrate-wpf-to-the-web/migrate-from-wpf-button.png"
	width="1314"
	height="828"
	loading="lazy"
	
		alt="The new “Migrate from WPF” entry point in XAML.io."
	
 
	
		class="gallery-image" 
		data-flex-grow="158"
		data-flex-basis="380px"
	
&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;New to XAML.io?&lt;/strong&gt; &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io&lt;/a&gt; is a free, browser-based IDE for building .NET apps with C# and XAML: a drag-and-drop designer with 100+ controls, a code editor, and in-browser .NET compilation via WebAssembly. No install, no signup. Built by &lt;a class="link" href="https://userware.dev" target="_blank" rel="noopener"
 &gt;Userware&lt;/a&gt;, powered by open-source &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt;. &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;Try it →&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="what-migrate-from-wpf-is"&gt;What &amp;ldquo;Migrate from WPF&amp;rdquo; is
&lt;/h2&gt;&lt;p&gt;It is a single window in the IDE, organized around three tasks that correspond to three different starting points:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Check compatibility.&lt;/strong&gt; Drop in your build output and get a report. Free, works at any size, no signup, and &lt;strong&gt;your code never leaves your computer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import and run.&lt;/strong&gt; Import a project and see it compile and run in the browser. Self-serve, currently a Technology Preview, best suited to small and mid-size projects today.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Have us migrate it.&lt;/strong&gt; For a production application, our team handles the migration end to end at a fixed cost.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/migrate-wpf-to-the-web/migrate-wizard.png"
	width="2248"
	height="1612"
	loading="lazy"
	
		alt="The Migrate from WPF window, showing the three paths."
	
 
	
		class="gallery-image" 
		data-flex-grow="139"
		data-flex-basis="334px"
	
&gt;&lt;/p&gt;
&lt;p&gt;The rest of this post follows the path a developer actually takes: run the analyzer, import the source, review what the tooling changed, and decide what remains. First, the reasonable question that comes before any of that.&lt;/p&gt;
&lt;h3 id="why-move-a-wpf-application-to-the-web"&gt;Why move a WPF application to the web
&lt;/h3&gt;&lt;p&gt;WPF is a mature, capable framework, and it is not going away on the desktop. The reason teams put these applications on the web has to do with delivery, security, reach, accessibility, and compliance, not with the language or the UI model.&lt;/p&gt;
&lt;p&gt;A Windows-only application has to be installed and kept current on every machine that runs it. On the web, it is deployed once and updated for everyone in a single step, and it is reachable from any device with a browser rather than only from a managed Windows PC. It also runs inside the browser&amp;rsquo;s security sandbox instead of as a desktop process with full access to the user&amp;rsquo;s machine, which is a meaningful change in regulated environments. And because OpenSilver renders real HTML rather than painting to a canvas, a migrated app inherits genuine accessibility: screen readers, keyboard navigation, find-in-page, browser zoom, and translation all work, which is the foundation that standards such as Section 508 and EN 301 549 require. The same C# and XAML can keep shipping as a desktop build in parallel for as long as you need it.&lt;/p&gt;
&lt;p&gt;If none of that applies to your situation, the sections below still work as a technical tour of how far OpenSilver&amp;rsquo;s WPF compatibility has come.&lt;/p&gt;
&lt;h3 id="does-your-code-actually-run-and-is-it-fast-enough"&gt;Does your code actually run, and is it fast enough?
&lt;/h3&gt;&lt;p&gt;This is the question most WPF developers ask first, so to be precise about it: OpenSilver is &lt;strong&gt;not&lt;/strong&gt; a XAML-only trick, and it is &lt;strong&gt;not&lt;/strong&gt; a transpile-to-JavaScript layer. It compiles your C# to the .NET runtime for WebAssembly. Your code-behind, your view models, your services, and most non-UI NuGet packages, meaning anything that already runs on Blazor WebAssembly, execute as &lt;strong&gt;real .NET, unchanged&lt;/strong&gt;. The part that gets reimplemented lives inside the framework, not in your code: OpenSilver provides the UI layer, so each XAML control knows how to render itself as DOM. Your own C# and XAML stay as they are.&lt;/p&gt;
&lt;p&gt;Performance follows from that. After a one-time download of the runtime, the application runs as compiled .NET in the browser, and production builds can use AOT compilation. For the software that is usually written in WPF, forms, data grids, navigation, and reporting, it is comfortably responsive. It is not a native game engine, so if your application does heavy real-time rendering, benchmark it before you commit. We would rather you measure your own app than take a number from us. In practice, though, performance has not been a wall: modern browser engines are heavily optimized for laying out large amounts of text and complex DOM, and OpenSilver is a thin layer on top of that. The easiest way to judge it for yourself is to try two live examples. XAML.io itself is built on OpenSilver: the drag-and-drop designer, IDE, and in-browser compiler at &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;xaml.io&lt;/a&gt; are one demanding OpenSilver application running in the browser. And &lt;a class="link" href="https://familyshow.xaml.io" target="_blank" rel="noopener"
 &gt;familyshow.xaml.io&lt;/a&gt; is a migrated WPF app you can open and use. As you interact with it, you are running compiled .NET code that renders to real DOM in the browser.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="step-1-the-free-compatibility-report"&gt;Step 1: the free compatibility report
&lt;/h2&gt;&lt;p&gt;Drop in the contents of your &lt;code&gt;bin&lt;/code&gt; folder: the &lt;code&gt;.exe&lt;/code&gt;, the &lt;code&gt;.dll&lt;/code&gt; files, and any third-party libraries you ship. XAML.io reads the compiled IL with &lt;a class="link" href="https://github.com/jbevain/cecil" target="_blank" rel="noopener"
 &gt;Mono.Cecil&lt;/a&gt;, walks every method, and classifies what your application &lt;em&gt;actually uses&lt;/em&gt; across 34 WPF and platform feature areas:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/migrate-wpf-to-the-web/compatibility-report.png"
	width="2248"
	height="1612"
	loading="lazy"
	
		alt="A WPF compatibility report in XAML.io."
	
 
	
		class="gallery-image" 
		data-flex-grow="139"
		data-flex-basis="334px"
	
&gt;&lt;/p&gt;
&lt;p&gt;Two design choices make the report useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Your code never leaves your computer.&lt;/strong&gt; The analysis runs entirely in your browser: XAML.io reads your assemblies locally, and the only thing sent to our server is an aggregated list of the unsupported features it found, which is a list of API names, not your code. Your binaries, your IL, and your source stay on your machine, and you can export the full report to &lt;code&gt;.xlsx&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It works for an application of any size.&lt;/strong&gt; This is the honest answer to &amp;ldquo;how big is this job?&amp;rdquo; before you commit to anything.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The score is a map, not a verdict. A &amp;ldquo;blocking&amp;rdquo; item may be a single Win32 call you can swap out, and many &amp;ldquo;needs adaptation&amp;rdquo; items have a one-click fix, which is the subject of the next step.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="step-2-import-the-source-and-review-every-change"&gt;Step 2: import the source, and review every change
&lt;/h2&gt;&lt;p&gt;Import a &lt;code&gt;.zip&lt;/code&gt; or a folder, and XAML.io builds a solution, switches to the WPF theme automatically (more on that below), and attempts to compile and run it on OpenSilver.&lt;/p&gt;
&lt;p&gt;The most important design decision in the tooling is what it does &lt;em&gt;not&lt;/em&gt; do: &lt;strong&gt;it does not rewrite your code with AI.&lt;/strong&gt; A tool that regenerates your UI can silently change behavior, and for a working business application that is exactly the risk you are trying to avoid. Instead, the approach is to keep your original code and make the &lt;em&gt;framework&lt;/em&gt; support it. Wherever possible, we implement the WPF feature directly in OpenSilver; for everything else, a compatibility layer called &lt;code&gt;OpenSilver.WpfCompat&lt;/code&gt; fills in the gaps. Both live under the original WPF namespaces, so your type names and &lt;code&gt;using&lt;/code&gt; directives do not change. When the tooling does have to modify your code, it does so with small, mechanical, &lt;strong&gt;visible&lt;/strong&gt; edits that you can review, not a regenerated file you have to trust.&lt;/p&gt;
&lt;p&gt;Here is what those edits look like in practice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A supported-but-different API becomes a one-click fix.&lt;/strong&gt; A synchronous WPF file dialog becomes its asynchronous OpenSilver equivalent:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// before&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; dlg = &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; OpenFileDialog();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (dlg.ShowDialog() == &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LoadDocument(dlg.FileName);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// after the code fix (OS0001 → FileDialogAsync)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; dlg = &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; OpenFileDialog();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; dlg.ShowDialogAsync() == &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LoadDocument(dlg.FileName);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Going async has consequences, and the tooling accounts for them: a companion fix marks the method &lt;code&gt;async&lt;/code&gt; and propagates &lt;code&gt;await&lt;/code&gt; up the call chain, so you are not left with a half-converted method that will not compile.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opening a URL with &lt;code&gt;Process.Start&lt;/code&gt; becomes a browser navigation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// before&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Process.Start(helpUrl);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// after the code fix (OSWC0015 → ProcessStartUrl)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;HtmlPage.Window.Navigate(helpUrl, &lt;span style="color:#e6db74"&gt;&amp;#34;_blank&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Something that genuinely cannot run in a browser is wrapped, not deleted.&lt;/strong&gt; Your original line is preserved behind a compiler directive, and the browser build gets a non-fatal notice instead:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#if&lt;/span&gt; !OPENSILVER &lt;span style="color:#75715e"&gt;// workaround to compile, address this later&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; NativeMethods.SetWindowComposition(_hwnd, &lt;span style="color:#66d9ef"&gt;ref&lt;/span&gt; data);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OpenSilver.WpfCompat.Porting.AlertCodeWasDisabled(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Win32 window composition isn&amp;#39;t available in the browser.&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Unsupported XAML is commented out, not silently dropped:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!-- XAML_IO: Unsupported attribute removed: TickFrequency=&amp;#34;2&amp;#34; --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;Slider&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Minimum=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Maximum=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Every one of these edits appears in the IDE as a &lt;strong&gt;Warning&lt;/strong&gt;, so you get a complete, reviewable list of everything the tooling touched. Nothing is hidden in a file you will never reopen. Two Roslyn analyzers, &lt;code&gt;OSWC0004&lt;/code&gt; and &lt;code&gt;OSWC0005&lt;/code&gt;, exist specifically to flag this migration scaffolding so you can clean it up before you ship.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/migrate-wpf-to-the-web/auto-fix-warnings.png"
	width="1992"
	height="1523"
	loading="lazy"
	
		alt="Automatic migration edits surfaced as reviewable Warnings."
	
 
	
		class="gallery-image" 
		data-flex-grow="130"
		data-flex-basis="313px"
	
&gt;&lt;/p&gt;
&lt;h3 id="runtime-porting-alerts-what-breaks-when-you-run-it"&gt;Runtime porting alerts: what breaks when you run it
&lt;/h3&gt;&lt;p&gt;Compile-time lists are useful, but the question that matters during a migration is what breaks when the app actually &lt;em&gt;runs&lt;/em&gt;. So when execution reaches code that was disabled, or a method that is still a stub, OpenSilver reports it as it happens, with the message, the method, and the file and line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[OpenSilver Porting] Code was disabled during migration:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Win32 window composition isn&amp;#39;t available in the browser.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; at MainWindow.ApplyBlur() in MainWindow.xaml.cs:line 142
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (execution continued, the app did not stop)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It reads like an exception with a stack trace, but it &lt;strong&gt;does not propagate and does not stop the application&lt;/strong&gt;. You can run a half-migrated app immediately and work through these one at a time, instead of facing a wall of compile errors before you can see a single screen. The mechanism is &lt;code&gt;Porting.AlertCodeNotImplemented&lt;/code&gt; and &lt;code&gt;AlertCodeWasDisabled&lt;/code&gt;; the output channel is configurable (debug output, the console, an in-app notification, or a .NET event carrying a full stack trace), and it de-duplicates to one alert per location per session. It only ever appears in a migrated application, never in one you build from scratch.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/migrate-wpf-to-the-web/runtime-alert.png"
	width="2346"
	height="1554"
	loading="lazy"
	
		alt="A non-fatal porting alert at runtime, with file and line."
	
 
	
		class="gallery-image" 
		data-flex-grow="150"
		data-flex-basis="362px"
	
&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; in-browser source import is a &lt;strong&gt;Technology Preview&lt;/strong&gt;. It works best on small and mid-size, self-contained projects; on a large application with third-party UI suites you &lt;em&gt;will&lt;/em&gt; hit gaps. That is exactly why the analyzer in Step 1 exists: run it first so there are no surprises. We add WPF features, analyzers, and fixes every week, so the set of projects that &amp;ldquo;just import and run&amp;rdquo; keeps growing.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="a-reference-migration-you-can-inspect-familyshow"&gt;A reference migration you can inspect: Family.Show
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/fredatgithub/FamilyShow" target="_blank" rel="noopener"
 &gt;Family.Show&lt;/a&gt; is the family-tree application Vertigo built for Microsoft shortly after WPF shipped, and it has served as a canonical WPF reference sample ever since. It is a real, polished application with custom controls, animations, data templates, drag-and-drop, and photo handling, which is what makes it a fair test rather than a rigged demo. It runs in the browser on OpenSilver with only minor changes, with &lt;strong&gt;97% of the original code untouched&lt;/strong&gt;, measured as a line-by-line diff of the C# and XAML between the original and migrated codebases.&lt;/p&gt;
&lt;p&gt;We have published every artifact so you can verify that instead of trusting the number:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Run the migrated app:&lt;/strong&gt; &lt;a class="link" href="https://familyshow.xaml.io" target="_blank" rel="noopener"
 &gt;familyshow.xaml.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open the migrated source on XAML.io&lt;/strong&gt; and fork it: &lt;a class="link" href="https://xaml.io/s/Samples/Source/FamilyShow" target="_blank" rel="noopener"
 &gt;xaml.io/s/Samples/Source/FamilyShow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff it against the original WPF source:&lt;/strong&gt; &lt;a class="link" href="https://github.com/fredatgithub/FamilyShow" target="_blank" rel="noopener"
 &gt;Family.Show on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/migrate-wpf-to-the-web/family-show-running.png"
	width="3080"
	height="1650"
	loading="lazy"
	
		alt="Family.Show as the original Windows WPF desktop app (left) and running in the browser after migration to OpenSilver (right). 97% of the original code is unchanged."
	
 
	
		class="gallery-image" 
		data-flex-grow="186"
		data-flex-basis="448px"
	
&gt;&lt;/p&gt;
&lt;p&gt;The migrated app is also light for what it is. The running application, including the entire .NET runtime, is 8.1 MB compressed, with no plugin to install, so over a CDN it loads in a few seconds and is then cached for return visits.&lt;/p&gt;
&lt;p&gt;Open the original and the migrated source side by side, and diff them. That diff is the most honest specification we can offer for &amp;ldquo;minimal changes.&amp;rdquo;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="your-app-should-still-look-like-your-app"&gt;Your app should still look like your app
&lt;/h2&gt;&lt;p&gt;XAML.io ships three themes, which are the default styles and control templates its built-in controls use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modern:&lt;/strong&gt; contemporary and flat; the default for new projects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WPF:&lt;/strong&gt; the classic Windows (Aero2) look, ported from WPF&amp;rsquo;s own default templates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Silverlight:&lt;/strong&gt; the original Silverlight defaults, for pixel-faithful Silverlight migrations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you import a WPF solution, XAML.io applies the &lt;strong&gt;WPF theme automatically&lt;/strong&gt;, so the app looks like itself on the first run. If the classic look feels dated, you are not stuck with it: switch to the &lt;strong&gt;Modern&lt;/strong&gt; theme, adopt responsive layouts, and restyle individual controls to modernize the UI incrementally, all on the same C# and XAML, with no rewrite. All three themes are open source; the WPF theme lives in &lt;a class="link" href="https://github.com/OpenSilver/OpenSilver.Themes.Wpf" target="_blank" rel="noopener"
 &gt;OpenSilver.Themes.Wpf&lt;/a&gt; under the MIT license, so you can retheme everything or override a single control template.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/migrate-wpf-to-the-web/theme-selector.png"
	width="293"
	height="208"
	loading="lazy"
	
		alt="Choosing the Modern, WPF, or Silverlight theme in XAML.io."
	
 
	
		class="gallery-image" 
		data-flex-grow="140"
		data-flex-basis="338px"
	
&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="common-questions-answered-directly"&gt;Common questions, answered directly
&lt;/h2&gt;&lt;p&gt;If you are evaluating this seriously, you have objections. Here are the ones we hear most.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What about my Telerik, DevExpress, or Syncfusion controls?&lt;/strong&gt; Third-party &lt;em&gt;UI&lt;/em&gt; control suites do not work out of the box in the self-serve tools yet. This is the real ceiling on fully automatic WPF migration today, and we are not going to pretend otherwise. There is a path forward: a Telerik Compatibility Pack exists now (&lt;a class="link" href="https://opensilver.net/contact" target="_blank" rel="noopener"
 &gt;contact us&lt;/a&gt;), a ComponentOne port is underway, and in managed migrations we port or replace vendor controls as part of the project. It is worth knowing that non-UI libraries that already run on Blazor WebAssembly generally run on OpenSilver as-is, so the work concentrates in the UI controls. We are also in active conversations with the major component vendors, and we expect broader out-of-the-box compatibility over time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How much really carries over?&lt;/strong&gt; The expensive, risky parts come with you: business logic, view models, converters, data binding, styles, resources, and most custom controls. That is the entire reason to stay in C# and XAML rather than rewrite in a different language and UI model. Less work, fewer regressions, and a codebase your team still recognizes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Will it look identical?&lt;/strong&gt; When a feature is supported, it renders identically; we are not currently aware of a supported feature that looks different from its WPF original. Visual differences come up only when something is not yet supported and has to be replaced, for example when a complex piece is more easily swapped for a JavaScript library, and cases like that keep getting rarer as coverage grows.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WPF apps look dated. Isn&amp;rsquo;t a rewrite the only way to modernize the UI?&lt;/strong&gt; No, and this is a common reason teams reach for a rewrite they do not need. The look and the code are separate concerns. You keep the code and change the styling: move from the WPF theme to the Modern one, add responsive layouts, and restyle controls incrementally. You get a contemporary, responsive UI without rebuilding the application in another framework.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What can never work in a browser?&lt;/strong&gt; Some things genuinely cannot, and we flag them explicitly rather than stubbing them silently: Win32 and P/Invoke, native interop, and direct hardware access. Where a feature is simply not implemented &lt;em&gt;yet&lt;/em&gt;, we say so, and that list keeps shrinking. Where it is a hard browser boundary, we tell you, so you can plan an alternative.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Does my code get uploaded to your servers?&lt;/strong&gt; It does not have to. The entire self-serve flow (analyze, import, fix, run, and export a Visual Studio solution) runs locally in your browser, with no signup, and your source is never sent to us. Even the compatibility analyzer processes your binaries locally and uploads only an aggregated list of unsupported features. Cloud save, sharing, and AI features are opt-in, and those are the only parts that involve our servers. If your policy forbids handing proprietary code to a SaaS, you can still do the entire migration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Am I locked into your browser IDE?&lt;/strong&gt; No. You can download a standard Visual Studio solution at any time and continue in Visual Studio, VS Code, Rider, Cursor, or another editor. XAML.io is as much a migration tool as an IDE: the output is a normal solution you own, and you can use it purely to get your app onto OpenSilver, which is free and open-source, and then work wherever you prefer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-it-works-rendering-xaml-as-real-html-dom"&gt;How it works: rendering XAML as real HTML DOM
&lt;/h2&gt;&lt;p&gt;Among the .NET frameworks that target the web, OpenSilver stays the &lt;strong&gt;closest to the WPF API&lt;/strong&gt; (close enough that Family.Show ports with minor changes) and it is the most &lt;strong&gt;browser-native&lt;/strong&gt;. It renders XAML as real DOM: a &lt;code&gt;TextBox&lt;/code&gt; is a &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;, an &lt;code&gt;Image&lt;/code&gt; is an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;, a &lt;code&gt;Path&lt;/code&gt; is an &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt;. Open a migrated app&amp;rsquo;s developer tools and you see your actual UI as inspectable HTML.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/migrate-wpf-to-the-web/devtools-dom.png"
	width="2107"
	height="1618"
	loading="lazy"
	
		alt="Browser devtools showing a migrated XAML UI rendered as real HTML DOM."
	
 
	
		class="gallery-image" 
		data-flex-grow="130"
		data-flex-basis="312px"
	
&gt;&lt;/p&gt;
&lt;p&gt;This is not a cosmetic detail; it is the first thing to check when comparing ways to get a desktop app onto the web. Some approaches paint the UI onto a single canvas or a WebGPU surface. The result looks like a web page but is not one: it is essentially one big pixel buffer, so it gives up most of what makes a browser useful. Because OpenSilver emits real DOM instead, a migrated app keeps everything an ordinary web page has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accessibility.&lt;/strong&gt; Screen readers and ARIA, keyboard navigation, and browser zoom, the foundation for standards such as Section 508 and EN 301 549.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Text that behaves like text.&lt;/strong&gt; Find-in-page (Ctrl+F), selection and copy/paste, and one-click browser translation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discoverability.&lt;/strong&gt; Content search engines can index, so the app can be SEO-friendly where you want it to be.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The rest of the browser platform.&lt;/strong&gt; Browser extensions and mobile gestures such as long-press keep working.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mix and match.&lt;/strong&gt; Combine XAML with plain HTML and JavaScript, drop Blazor components into a XAML app, and reach the entire ecosystem of web libraries.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You get the WPF programming model and the full web platform at the same time, with effectively no ceiling on how far you can extend through JS interop.&lt;/p&gt;
&lt;p&gt;The runtime has also caught up to a large amount of real WPF. The recent OpenSilver 3.4 preview added, among much else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Layout and geometry:&lt;/strong&gt; &lt;code&gt;LayoutTransform&lt;/code&gt; (long one of the hardest WPF features to bring to the web), &lt;code&gt;CombinedGeometry&lt;/code&gt;, &lt;code&gt;StreamGeometry&lt;/code&gt;, geometry hit-testing and flattening, and length units in XAML.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controls:&lt;/strong&gt; &lt;code&gt;GroupBox&lt;/code&gt;, &lt;code&gt;Menu&lt;/code&gt; and &lt;code&gt;MenuItem&lt;/code&gt; (checkable, with input-gesture text), &lt;code&gt;MultiSelector&lt;/code&gt;, &lt;code&gt;AccessText&lt;/code&gt;, &lt;code&gt;Button.IsDefault&lt;/code&gt; and &lt;code&gt;IsCancel&lt;/code&gt;, and an enhanced &lt;code&gt;Window&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Styling and binding:&lt;/strong&gt; WPF-style triggers, &lt;code&gt;SystemColors&lt;/code&gt; keys, &lt;code&gt;ResourceKey&lt;/code&gt; and &lt;code&gt;ComponentResourceKey&lt;/code&gt;, &lt;code&gt;OneWayToSource&lt;/code&gt;, and &lt;code&gt;TemplateBinding&lt;/code&gt; converters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Text and input:&lt;/strong&gt; &lt;code&gt;AccessKeyManager&lt;/code&gt;, &lt;code&gt;TextCompositionManager&lt;/code&gt;, and WPF-style keyboard focus and input-device architecture.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The compatibility layer behind the import tooling, &lt;code&gt;OpenSilver.WpfCompat&lt;/code&gt;, is &lt;strong&gt;307 source files&lt;/strong&gt;, a &lt;strong&gt;420-row&lt;/strong&gt; porting reference, and &lt;strong&gt;8 Roslyn analyzers with 16 code-fix providers&lt;/strong&gt;, on top of the one-click XAML fixes XAML.io applies in the editor. As pieces of WpfCompat mature, they graduate into OpenSilver itself, and new features and fixes land continuously. You can follow them commit by commit on the &lt;a class="link" href="https://github.com/OpenSilver/OpenSilver/commits/develop/" target="_blank" rel="noopener"
 &gt;OpenSilver develop branch&lt;/a&gt;: the 3.4 preview package is rebuilt on every commit there, and XAML.io updates to the latest build regularly.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="when-you-would-rather-have-it-done-for-you"&gt;When you would rather have it done for you
&lt;/h2&gt;&lt;p&gt;The self-serve tools are free, with no time limit and no feature paywall. They are built to do real work and are well suited to evaluation and to migrating small and mid-size projects yourself.&lt;/p&gt;
&lt;p&gt;A production migration of a large application is a bigger undertaking, and it is the work we do for a living. We are the team behind both XAML.io and OpenSilver, and we have spent more than 13 years migrating enterprise XAML applications, across Silverlight, LightSwitch, and WPF, to the web: over 10 million lines of production code for organizations including &lt;strong&gt;DENSO&lt;/strong&gt;, &lt;strong&gt;Tata Communications&lt;/strong&gt;, &lt;strong&gt;Symcor&lt;/strong&gt;, &lt;strong&gt;LiveData&lt;/strong&gt; (surgical software in healthcare), and &lt;strong&gt;Repton&lt;/strong&gt; (education), among many others across financial services, manufacturing, and the public sector.&lt;/p&gt;
&lt;p&gt;The engagement model is deliberately low-risk:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It begins with a &lt;strong&gt;free compatibility analysis and a fixed-cost quote&lt;/strong&gt;, broken into milestones with a timeline.&lt;/li&gt;
&lt;li&gt;Rather than rewriting your app, &lt;strong&gt;we extend OpenSilver itself&lt;/strong&gt; to support what your app uses, so as much of your original code as possible stays untouched.&lt;/li&gt;
&lt;li&gt;You receive &lt;strong&gt;milestone deliveries as Visual Studio solutions&lt;/strong&gt; you can compile and test. Your codebase stays intact, you keep working while we work, and we merge your changes.&lt;/li&gt;
&lt;li&gt;We help you ship to production, with optional ongoing priority support.&lt;/li&gt;
&lt;li&gt;If you need a WPF feature OpenSilver does not support yet, you can &lt;strong&gt;fund its development&lt;/strong&gt;, and it ships to everyone in the open-source framework, not only to you.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is what funds the free tools and the open-source framework. So if you have a WPF application that needs to be on the web, &lt;a class="link" href="https://opensilver.net/talk-to-expert/" target="_blank" rel="noopener"
 &gt;talk to us&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="also-new-in-v08"&gt;Also new in v0.8
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Example gallery, built into the IDE.&lt;/strong&gt; A gallery of example projects inside XAML.io: open any of them in the online IDE in one click, run it in the browser, make and test changes, or fork it as a starting point for your own project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static web build export.&lt;/strong&gt; Generate a set of static files, straight from the online IDE, that you can host anywhere: Azure, AWS, GitHub Pages, Netlify, Cloudflare Pages, or any plain HTTP server.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Latest OpenSilver 3.4 preview&lt;/strong&gt;, with the WPF features listed above and &lt;a class="link" href="https://github.com/OpenSilver/OpenSilver/commits/develop/" target="_blank" rel="noopener"
 &gt;new work landing continuously&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Also soft-launched since v0.7:&lt;/strong&gt; a revamped New item menu with Class Library projects, incremental compilation, and Navigate Backward and Forward.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s next
&lt;/h2&gt;&lt;p&gt;WPF is where most of the team&amp;rsquo;s effort goes right now. Ahead: more WPF support every week; more ways to publish a finished app, including one-click deployment to an xaml.io-hosted URL, native iOS and Android apps, and signed desktop apps; and VB.NET support under consideration. Expect a fair amount of IDE polish too, along with a few larger features we are not ready to talk about yet. These are directions rather than promises.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="try-it"&gt;Try it
&lt;/h2&gt;&lt;p&gt;Open &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;xaml.io&lt;/a&gt;, choose &lt;strong&gt;Migrate from WPF&lt;/strong&gt;, and drop in your &lt;code&gt;bin&lt;/code&gt; folder for a free compatibility report. It is the fastest way to find out how far your WPF application already is from the web. And if you hit something missing, tell us; there is a good chance it is already on the roadmap.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;xaml.io&lt;/a&gt;&lt;/strong&gt; | Free. No install. No signup. · &lt;a class="link" href="https://opensilver.net/talk-to-expert/" target="_blank" rel="noopener"
 &gt;Talk to our migration team →&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Writing about this? A press kit with logos, high-resolution screenshots, a fact sheet, and quotes is available at &lt;a class="link" href="https://blog.xaml.io/post/press-kit-v0.8/" target="_blank" rel="noopener"
 &gt;blog.xaml.io/post/press-kit-v0.8&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Powered by OpenSilver.&lt;/strong&gt; XAML.io is built on &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt;, the open-source framework that runs WPF-style C# and XAML in the browser via WebAssembly, and, through MAUI Hybrid and Photino, natively on mobile and desktop. Migrating a WPF, Silverlight, or LightSwitch application? &lt;a class="link" href="https://opensilver.net/contact" target="_blank" rel="noopener"
 &gt;Our team can help →&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>Compile C#+XAML to a Native Windows, macOS, or Linux App, From Your Browser</title><link>https://blog.xaml.io/post/publish-native-desktop-apps/</link><pubDate>Tue, 26 May 2026 10:00:00 +0200</pubDate><guid>https://blog.xaml.io/post/publish-native-desktop-apps/</guid><description>&lt;img src="https://blog.xaml.io/" alt="Featured image of post Compile C#+XAML to a Native Windows, macOS, or Linux App, From Your Browser" /&gt;&lt;p&gt;What if you could turn a C#+XAML project edited in your browser into a native Windows, macOS, or Linux desktop app, without leaving the browser, and without your code ever touching a server?&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s what XAML.io v0.7 can now do. Click &lt;strong&gt;Publish&lt;/strong&gt;, pick a platform, and a self-contained &lt;code&gt;.exe&lt;/code&gt;, &lt;code&gt;.app&lt;/code&gt; bundle, or Linux executable lands in your Downloads folder in well under a minute on a modern laptop. Everything runs in your browser tab: the compilation, the packaging, and even the Apple Mach-O ad-hoc code-signing pass for macOS bundles.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Preview status.&lt;/strong&gt; This feature is in &lt;strong&gt;Preview / Alpha&lt;/strong&gt; in XAML.io v0.7 (May 2026). Expect rough edges, occasional breakages, and changes between releases. We&amp;rsquo;d rather ship the rough version and iterate with you than wait for everything to be perfect. Bug reports and &amp;ldquo;this is missing X&amp;rdquo; notes are both welcome.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/publish-native-desktop-apps/publish-menu.png"
	width="1093"
	height="989"
	loading="lazy"
	
		alt="The Publish menu open in XAML.io, showing the three OS buttons under “Download as a desktop app”."
	
 
	
		class="gallery-image" 
		data-flex-grow="110"
		data-flex-basis="265px"
	
&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;New to XAML.io?&lt;/strong&gt; &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io&lt;/a&gt; is a free, browser-based IDE for building .NET applications using C# and XAML. It includes a visual drag-and-drop XAML designer with 100+ controls, a code editor, and in-browser .NET compilation via WebAssembly. No installation, no signup required. It&amp;rsquo;s built by &lt;a class="link" href="https://userware.dev" target="_blank" rel="noopener"
 &gt;Userware&lt;/a&gt; and powered by the open-source &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt; framework. &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;Try it →&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="how-it-works"&gt;How it works
&lt;/h2&gt;&lt;p&gt;In XAML.io&amp;rsquo;s title bar, the &lt;strong&gt;Publish&lt;/strong&gt; dropdown now has a &lt;em&gt;&amp;ldquo;Download as a desktop app&amp;rdquo;&lt;/em&gt; section with three buttons inside it: one each for Windows, macOS, and Linux. Click a button and a dialog walks through what you&amp;rsquo;re about to get (format, size, first-launch caveats), then the publish pipeline runs locally in your browser tab. The browser&amp;rsquo;s native download dialog handles the rest.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s no signup. There&amp;rsquo;s no backend compile queue. The first time you publish for a given OS, the browser fetches a small per-platform &lt;em&gt;launcher template&lt;/em&gt; (~30 MB, cached after first publish), assembles it with your compiled assemblies, and hands the result off as a download.&lt;/p&gt;
&lt;h2 id="what-you-get-on-each-platform"&gt;What you get on each platform
&lt;/h2&gt;&lt;h3 id="windows"&gt;Windows
&lt;/h3&gt;&lt;p&gt;A self-contained &lt;code&gt;.exe&lt;/code&gt; packaged in a &lt;code&gt;.zip&lt;/code&gt; alongside an &lt;code&gt;app/&lt;/code&gt; folder (your compiled assemblies, sidecar DLLs, and resources) and a &lt;code&gt;README.txt&lt;/code&gt;. Recipients extract the archive and double-click the &lt;code&gt;.exe&lt;/code&gt;. No .NET install required on the recipient&amp;rsquo;s machine.&lt;/p&gt;
&lt;p&gt;Windows SmartScreen will show a &lt;em&gt;&amp;ldquo;Windows protected your PC&amp;rdquo;&lt;/em&gt; dialog on first launch because the &lt;code&gt;.exe&lt;/code&gt; is unsigned (we haven&amp;rsquo;t yet shipped support for user-supplied code-signing certificates). The bundled &lt;code&gt;README.txt&lt;/code&gt; has the &lt;em&gt;&amp;ldquo;More info → Run anyway&amp;rdquo;&lt;/em&gt; bypass steps.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/publish-native-desktop-apps/windows-download-dialog.png"
	width="1076"
	height="799"
	loading="lazy"
	
		alt="The Windows .exe download dialog inside XAML.io."
	
 
	
		class="gallery-image" 
		data-flex-grow="134"
		data-flex-basis="323px"
	
&gt;&lt;/p&gt;
&lt;h3 id="macos"&gt;macOS
&lt;/h3&gt;&lt;p&gt;A self-contained &lt;code&gt;.app&lt;/code&gt; bundle inside a &lt;code&gt;.zip&lt;/code&gt;. The bundle is &lt;strong&gt;ad-hoc signed&lt;/strong&gt; client-side as part of the publish pipeline (more on how that works below). Because there&amp;rsquo;s no Apple Developer ID involved, macOS Gatekeeper still prompts on first launch, but the bundled &lt;code&gt;README.txt&lt;/code&gt; has the right-click → Open path for macOS 12-14 (Monterey, Ventura, Sonoma) and the &lt;em&gt;System Settings → Privacy &amp;amp; Security → Open Anyway&lt;/em&gt; path for macOS 15 (Sequoia).&lt;/p&gt;
&lt;p&gt;Apple Silicon (arm64) only for now. Intel Mac support is on the roadmap.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/publish-native-desktop-apps/mac-download-dialog.png"
	width="1073"
	height="1169"
	loading="lazy"
	
		alt="The macOS .app download dialog inside XAML.io."
	
 
	
		class="gallery-image" 
		data-flex-grow="91"
		data-flex-basis="220px"
	
&gt;&lt;/p&gt;
&lt;h3 id="linux"&gt;Linux
&lt;/h3&gt;&lt;p&gt;A self-contained ELF executable in a &lt;code&gt;.tar.gz&lt;/code&gt;. Recipients extract the archive and run the executable. The UI is rendered via WebKitGTK 4.1, which ships preinstalled on every current LTS or rolling release (Ubuntu 22.04+, Debian 12+, Fedora 38+, Mint 21+, Arch). x86_64 only for now.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/publish-native-desktop-apps/linux-download-dialog.png"
	width="1070"
	height="807"
	loading="lazy"
	
		alt="The Linux executable download dialog inside XAML.io."
	
 
	
		class="gallery-image" 
		data-flex-grow="132"
		data-flex-basis="318px"
	
&gt;&lt;/p&gt;
&lt;h2 id="these-are-real-native-desktop-apps"&gt;These are real native desktop apps
&lt;/h2&gt;&lt;p&gt;Same project, three OSes, three native processes:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/publish-native-desktop-apps/windows-app-running.jpg"
	width="1440"
	height="900"
	loading="lazy"
	
		alt="The published app running natively on Windows."
	
 
	
		class="gallery-image" 
		data-flex-grow="160"
		data-flex-basis="384px"
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/publish-native-desktop-apps/mac-app-running.jpg"
	width="1400"
	height="768"
	loading="lazy"
	
		alt="The published app running natively on macOS."
	
 
	
		class="gallery-image" 
		data-flex-grow="182"
		data-flex-basis="437px"
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/publish-native-desktop-apps/linux-app-running.jpg"
	width="1065"
	height="573"
	loading="lazy"
	
		alt="The published app running natively on Linux."
	
 
	
		class="gallery-image" 
		data-flex-grow="185"
		data-flex-basis="446px"
	
&gt;&lt;/p&gt;
&lt;p&gt;The downloaded artifact is a real native .NET process, not a packaged web page or a WebAssembly container. Your C# runs as native code on the recipient&amp;rsquo;s machine via the &lt;strong&gt;.NET 10&lt;/strong&gt; runtime (JIT-compiled, in-process, with full access to threading, sockets, file I/O, and P/Invoke), the same &lt;strong&gt;execution model&lt;/strong&gt; as a WPF or WinForms app.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;rendering model&lt;/strong&gt; is different: XAML.io builds &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt; apps. At build time, OpenSilver&amp;rsquo;s XAML compiler emits C# that knows how to construct the visual tree. At runtime, that C# runs, and each OpenSilver control attaches its underlying DOM element to the document: a &lt;code&gt;TextBox&lt;/code&gt; becomes an actual &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;, an &lt;code&gt;Image&lt;/code&gt; becomes an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;, a &lt;code&gt;Path&lt;/code&gt; becomes an &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt; (see &lt;a class="link" href="https://blog.xaml.io/post/xaml-io-v0-6/#under-the-hood-client-side-compilation-no-lock-in" &gt;the v0.6 deep dive&lt;/a&gt; for the long version). In the published desktop app that DOM lives inside the OS&amp;rsquo;s built-in WebView (&lt;a class="link" href="https://learn.microsoft.com/en-us/microsoft-edge/webview2/" target="_blank" rel="noopener"
 &gt;Edge WebView2&lt;/a&gt; on Windows, &lt;a class="link" href="https://developer.apple.com/documentation/webkit/wkwebview" target="_blank" rel="noopener"
 &gt;WKWebView&lt;/a&gt; on macOS, &lt;a class="link" href="https://webkitgtk.org/" target="_blank" rel="noopener"
 &gt;WebKitGTK&lt;/a&gt; on Linux), embedded into the .NET process via &lt;a class="link" href="https://www.tryphotino.io/" target="_blank" rel="noopener"
 &gt;Photino&lt;/a&gt; and driven by the OpenSilver runtime directly (no Blazor WASM in the desktop app; that&amp;rsquo;s IDE-only). So: &lt;strong&gt;native .NET execution, DOM-based UI rendering, no bundled browser engine, no WASM at runtime&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="reactions-so-far"&gt;Reactions so far
&lt;/h2&gt;&lt;p&gt;&amp;ldquo;Fucking hell this is really getting so much better, thanks a whole lot to the team!!&amp;rdquo;&lt;br&gt;
— &lt;em&gt;Infinite_Track_9210 on Reddit (&lt;a class="link" href="https://www.reddit.com/r/dotnet/comments/1t7a3fg/xamlio_now_exports_to_native_windows_exe/" target="_blank" rel="noopener"
 &gt;source&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="under-the-hood"&gt;Under the Hood
&lt;/h2&gt;&lt;p&gt;There are four pieces worth pulling apart, because each one is the kind of thing that&amp;rsquo;s often assumed to need a backend.&lt;/p&gt;
&lt;h3 id="1-the-packaging-pipeline-runs-entirely-in-your-browser-tab"&gt;1. The packaging pipeline runs entirely in your browser tab
&lt;/h3&gt;&lt;p&gt;No backend compile step. No server upload. No build queue. When you click Publish, the browser:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compiles your C#+XAML project to .NET assemblies using the same in-browser Roslyn that powers XAML.io&amp;rsquo;s Run button (see our earlier post on &lt;a class="link" href="https://blog.xaml.io/post/dotnet-ide-in-the-browser-no-backend/" &gt;in-browser .NET compilation&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fetches a per-OS launcher template from XAML.io&amp;rsquo;s CDN. The template is a pre-built &lt;a class="link" href="https://www.tryphotino.io/" target="_blank" rel="noopener"
 &gt;Photino&lt;/a&gt; app for that platform, bundled with the .NET runtime. It&amp;rsquo;s cached after first publish, so subsequent publishes for the same OS skip this step.&lt;/li&gt;
&lt;li&gt;Assembles your compiled assemblies + a small &lt;code&gt;manifest.json&lt;/code&gt; + resources into the launcher&amp;rsquo;s expected sidecar layout, on an in-memory filesystem (Emscripten&amp;rsquo;s MEMFS, the same virtual FS Blazor WebAssembly uses).&lt;/li&gt;
&lt;li&gt;Re-packs the result into the right archive format (&lt;code&gt;.zip&lt;/code&gt; for Windows and macOS, &lt;code&gt;.tar.gz&lt;/code&gt; for Linux) with the correct executable bits, then hands the byte array to the browser&amp;rsquo;s native download dialog.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Your code never leaves your machine. The only network traffic during a publish is the one-time launcher-template fetch, which is the same pre-built bytes for everyone; the launcher knows nothing about your project.&lt;/p&gt;
&lt;h3 id="2-native-net-execution-dom-based-rendering"&gt;2. Native .NET execution, DOM-based rendering
&lt;/h3&gt;&lt;p&gt;This is the part that surprises people, so it&amp;rsquo;s worth being explicit about: the WebAssembly part is only the IDE itself. The desktop apps it produces are real native &lt;strong&gt;.NET 10&lt;/strong&gt; processes. Your C# is JIT-compiled by the runtime and runs in-process, with the same execution model as a WPF or WinForms app.&lt;/p&gt;
&lt;p&gt;The UI is rendered as real DOM elements (OpenSilver&amp;rsquo;s design choice; see &lt;a class="link" href="https://blog.xaml.io/post/xaml-io-v0-6/#under-the-hood-client-side-compilation-no-lock-in" &gt;the v0.6 deep dive&lt;/a&gt;), displayed inside the OS&amp;rsquo;s built-in WebView via &lt;a class="link" href="https://www.tryphotino.io/" target="_blank" rel="noopener"
 &gt;Photino&lt;/a&gt;. In the published desktop app the OpenSilver runtime is loaded &lt;em&gt;directly&lt;/em&gt; by Photino through the &lt;code&gt;OpenSilver.Photino&lt;/code&gt; bridge: there&amp;rsquo;s no Blazor WebAssembly intermediate at runtime, and no client-side compilation either (that&amp;rsquo;s all IDE-only).&lt;/p&gt;
&lt;p&gt;That separation matters in two practical ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No bundled browser engine.&lt;/strong&gt; Photino uses the OS&amp;rsquo;s built-in WebView (Edge WebView2 / WKWebView / WebKitGTK) rather than bundling Chromium the way Electron does. That keeps the download size to roughly the cost of the .NET runtime alone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C# / .NET libraries work the same as on any desktop .NET process.&lt;/strong&gt; All the things WebAssembly normally sandboxes away (file I/O, sockets, threading, P/Invoke, native interop) work normally in the published app, because it&amp;rsquo;s a normal .NET process. Your code can do things the IDE itself can&amp;rsquo;t.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-even-macos-ad-hoc-code-signing-happens-client-side"&gt;3. Even macOS ad-hoc code-signing happens client-side
&lt;/h3&gt;&lt;p&gt;This was the trickiest part to get working. Apple&amp;rsquo;s Mach-O format and the CodeDirectory hashing dance that produces a valid &lt;code&gt;.app&lt;/code&gt; bundle signature are normally handled by &lt;code&gt;codesign&lt;/code&gt;, which is a macOS-only command-line tool. To make publishing a &lt;code&gt;.app&lt;/code&gt; from the browser work without a server-side signer, and without requiring you to be on a Mac, we needed an in-WebAssembly implementation of the signing pass.&lt;/p&gt;
&lt;p&gt;The answer: we pulled the Mach-O writer and CodeDirectory hasher out of &lt;a class="link" href="https://github.com/filipnavara/CodeSign" target="_blank" rel="noopener"
 &gt;Filip Navara&amp;rsquo;s CodeSign / Melanzana&lt;/a&gt;, trimmed them to the parts we actually use, and run the ad-hoc signing pass entirely in the browser&amp;rsquo;s WebAssembly runtime. The bundle&amp;rsquo;s Mach-O binary is re-hashed, the &lt;code&gt;_CodeSignature/CodeResources&lt;/code&gt; plist is regenerated, and the LC_CODE_SIGNATURE load command is rewritten. All of that happens on MEMFS, in C# compiled to WASM. The output is a valid ad-hoc signed bundle that Gatekeeper will accept (with the standard first-launch prompt that ad-hoc bundles always trigger).&lt;/p&gt;
&lt;p&gt;The Melanzana subset is &lt;strong&gt;lazy-loaded&lt;/strong&gt;: it ships as a separate &lt;code&gt;~500 KB&lt;/code&gt; compressed assembly that&amp;rsquo;s only fetched the first time you click &lt;em&gt;Download as a macOS app&lt;/em&gt;. Windows-only and Linux-only publishers never download those bytes, so the IDE&amp;rsquo;s first-paint payload is unchanged for them.&lt;/p&gt;
&lt;p&gt;Honestly, signing a macOS app from inside a browser tab is the kind of thing we&amp;rsquo;d have called impossible. Until we got it working.&lt;/p&gt;
&lt;h3 id="4-file-sizes"&gt;4. File sizes
&lt;/h3&gt;&lt;p&gt;The launcher is a &lt;strong&gt;.NET 10 self-contained, single-file deployment&lt;/strong&gt; with compression enabled (&lt;code&gt;EnableCompressionInSingleFile=true&lt;/code&gt;) and trimming deliberately &lt;strong&gt;off&lt;/strong&gt; (&lt;code&gt;PublishTrimmed=false&lt;/code&gt;). Trimming is off on purpose: the launcher loads your compiled assemblies via &lt;code&gt;Assembly.Load(byte[])&lt;/code&gt; and the trimmer cannot reason about that. Compression brings an &lt;em&gt;untrimmed&lt;/em&gt; self-contained .NET 10 app under 40 MB; without it, the same artifact lands closer to 60-80 MB.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Platform&lt;/th&gt;
 &lt;th&gt;Compressed download&lt;/th&gt;
 &lt;th&gt;What&amp;rsquo;s inside&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Windows&lt;/td&gt;
 &lt;td&gt;~30-40 MB &lt;code&gt;.zip&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Single-file &lt;code&gt;.exe&lt;/code&gt; with the .NET 10 runtime + OpenSilver runtime + Photino bridge bundled inside, alongside an &lt;code&gt;app/&lt;/code&gt; folder with your compiled assemblies and a &lt;code&gt;README.txt&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;macOS&lt;/td&gt;
 &lt;td&gt;~30-40 MB &lt;code&gt;.zip&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ad-hoc-signed &lt;code&gt;.app&lt;/code&gt; bundle following the same layout as Windows. Apple Silicon (arm64).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;~30-40 MB &lt;code&gt;.tar.gz&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Single-file ELF executable with the same internal layout. x86_64.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Sizes don&amp;rsquo;t balloon to Electron&amp;rsquo;s ~150 MB+ territory because Photino uses the OS&amp;rsquo;s built-in WebView rather than bundling Chromium. You pay for the .NET runtime, not for a browser engine.&lt;/p&gt;
&lt;p&gt;The floor stays flat across platforms because the .NET runtime is the dominant cost. Project assets (images, fonts, media, embedded resources) add to that linearly.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="limitations-and-whats-missing"&gt;Limitations and what&amp;rsquo;s missing
&lt;/h2&gt;&lt;p&gt;We want to be upfront about what isn&amp;rsquo;t there yet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preview / Alpha in XAML.io v0.7 (May 2026).&lt;/strong&gt; Behavior, UI, and the on-disk layout of the produced artifacts may change between releases. We&amp;rsquo;d rather ship the rough version and iterate with feedback than wait for everything to be perfect.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No publisher-identity signing or notarization.&lt;/strong&gt; Apps are unsigned in the Apple Developer ID / Windows Authenticode sense, so first-launch Gatekeeper and SmartScreen warnings still apply. Support for user-supplied code-signing certificates is on the way; for macOS, apps distributed via the web also need Apple&amp;rsquo;s notarization step for the smoothest first-launch experience, and we&amp;rsquo;ll wire that up alongside cert support. Until then, the bundled &lt;code&gt;README.txt&lt;/code&gt; walks recipients through the one-click bypass for each OS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Architecture coverage is partial.&lt;/strong&gt; macOS publish is Apple Silicon (arm64) only. Linux publish is x86_64 only. Intel Macs and Linux ARM64 are on the roadmap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux distro floor.&lt;/strong&gt; Modern distros (Ubuntu 22.04+, Debian 12+, Fedora 38+, Arch, Mint 21+) ship WebKitGTK 4.1 preinstalled and run the published app with no setup. On older releases (Ubuntu 18.04 / 20.04, Debian 11) recipients may need a one-time &lt;code&gt;apt install libwebkit2gtk-4.1-0&lt;/code&gt; or equivalent. The bundled &lt;code&gt;README.txt&lt;/code&gt; has the per-distro commands.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publish is best on desktop browsers.&lt;/strong&gt; The packaging pass uses the WebAssembly heap heavily; mobile browsers may run out of memory on larger projects. Editing and running on mobile is fine, as before.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="whats-coming-next"&gt;What&amp;rsquo;s coming next
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Feature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;User-supplied code-signing certificates&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Upload your Apple Developer ID or Authenticode certificate; published apps then ship with publisher-identity signing and skip the first-launch warning entirely.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Broader CPU coverage&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;macOS Intel (x86_64) and Linux ARM64 publish targets.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;One-click web deployment&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Already on the &lt;a class="link" href="https://blog.xaml.io/post/xaml-io-v0-6/#limitations-and-whats-next" &gt;v0.6 roadmap&lt;/a&gt;; the desktop publish flow is the local-distribution side of the same story.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Suggest or vote on features at &lt;a class="link" href="https://feedback.xaml.io" target="_blank" rel="noopener"
 &gt;feedback.xaml.io&lt;/a&gt;, ask questions on the &lt;a class="link" href="https://forums.xaml.io" target="_blank" rel="noopener"
 &gt;forums&lt;/a&gt;, or &lt;a class="link" href="https://opensilver.net/contact" target="_blank" rel="noopener"
 &gt;contact us directly&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="try-it"&gt;Try it
&lt;/h2&gt;&lt;p&gt;Open &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;xaml.io&lt;/a&gt;, build something, click &lt;strong&gt;Publish&lt;/strong&gt;, pick a platform. In well under a minute on a modern laptop you&amp;rsquo;ll have a real native desktop app you can hand to anyone with that OS.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;&lt;strong&gt;xaml.io&lt;/strong&gt;&lt;/a&gt; | Free. No install. No signup required.&lt;/p&gt;</description></item><item><title>XAML.io v0.6: Share Running .NET Code With a Link</title><link>https://blog.xaml.io/post/xaml-io-v0-6/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://blog.xaml.io/post/xaml-io-v0-6/</guid><description>&lt;img src="https://blog.xaml.io/" alt="Featured image of post XAML.io v0.6: Share Running .NET Code With a Link" /&gt;&lt;p&gt;What if you could share a running .NET project with a link?&lt;/p&gt;
&lt;p&gt;Not a code snippet in a blog post. Not a GitHub repo someone has to clone and build. A live, editable, runnable project. Open it in the browser, click Run, and it works.&lt;/p&gt;
&lt;p&gt;Try it right now:&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;a class="link" href="https://xaml.io/s/Samples/Newtonsoft" target="_blank" rel="noopener"
 &gt;&lt;strong&gt;https://xaml.io/s/Samples/Newtonsoft&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;You&amp;rsquo;ll see a complete C#/XAML project referencing the Newtonsoft.Json NuGet package in a browser-based IDE. Click &lt;strong&gt;Run&lt;/strong&gt;. The project compiles and executes entirely in your browser via WebAssembly. There is no server-side build step. Edit the code, change things, re-run. Your changes don&amp;rsquo;t touch the original.&lt;/p&gt;
&lt;p&gt;XAML.io v0.6 makes this possible with two new features: &lt;strong&gt;NuGet packages in the browser&lt;/strong&gt; and &lt;strong&gt;code sharing via URL&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-6/shared-project.png"
	width="2161"
	height="1619"
	loading="lazy"
	
		alt="A shared Newtonsoft.Json sample project running in the XAML.io browser IDE."
	
 
	
		class="gallery-image" 
		data-flex-grow="133"
		data-flex-basis="320px"
	
&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;New to XAML.io?&lt;/strong&gt; &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io&lt;/a&gt; is a free, browser-based IDE for building .NET applications using C# and XAML. It includes a visual drag-and-drop XAML designer with 100+ controls, a code editor, and in-browser .NET compilation via WebAssembly. No installation, no signup required. It&amp;rsquo;s built by &lt;a class="link" href="https://userware.dev" target="_blank" rel="noopener"
 &gt;Userware&lt;/a&gt; and powered by the open-source &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt; framework. &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;Try it →&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;Here&amp;rsquo;s how code sharing works.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="share-code-create-run-share-fork"&gt;Share Code: Create, Run, Share, Fork
&lt;/h2&gt;&lt;p&gt;Click the &lt;strong&gt;&amp;ldquo;Share Code&amp;rdquo;&lt;/strong&gt; button, choose a name, and XAML.io generates a URL:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;https://xaml.io/s/yourname/yourproject
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Anyone with that link can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;View&lt;/strong&gt; the full source code in the XAML.io IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run&lt;/strong&gt; the project with a single click&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modify&lt;/strong&gt; the code freely (their changes don&amp;rsquo;t affect your original)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fork&lt;/strong&gt; the project to save their own copy to the Cloud (free account required)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No signup is needed to view and run shared projects.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-6/share-code-dialog.png"
	width="1664"
	height="1339"
	loading="lazy"
	
		alt="The Share Code dialog with a shareable URL ready to copy."
	
 
	
		class="gallery-image" 
		data-flex-grow="124"
		data-flex-basis="298px"
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attribution is built in.&lt;/strong&gt; When someone forks your project and re-shares it, the chain is preserved. If Project A is forked as B, and B is forked as C, someone viewing C sees &amp;ldquo;Forked from B&amp;rdquo; with a link, and following that shows &amp;ldquo;Forked from A.&amp;rdquo; Your work stays credited, no matter how many times it&amp;rsquo;s remixed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Auto-run links.&lt;/strong&gt; Append &lt;code&gt;?run=true&lt;/code&gt; to any shared URL and the app runs automatically when the recipient opens the link. They see the working app immediately, not just source code.&lt;/p&gt;
&lt;h3 id="think-about-the-use-cases"&gt;Think about the use cases
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Scenario&lt;/th&gt;
 &lt;th&gt;Before&lt;/th&gt;
 &lt;th&gt;With XAML.io v0.6&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Showing how a library works&lt;/td&gt;
 &lt;td&gt;Static code snippets in docs&lt;/td&gt;
 &lt;td&gt;Live, runnable project anyone can try&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Teaching a concept&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Clone this repo and run it&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Share a link and the student opens and runs immediately&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Sharing a prototype&lt;/td&gt;
 &lt;td&gt;Screenshots + zip file&lt;/td&gt;
 &lt;td&gt;Share a link and the stakeholder sees it running live&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Answering a question&lt;/td&gt;
 &lt;td&gt;Paste code into Slack&lt;/td&gt;
 &lt;td&gt;Share a link that the other person can actually run&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="nuget-packages-in-the-browser"&gt;NuGet Packages in the Browser
&lt;/h2&gt;&lt;p&gt;Until v0.6, XAML.io projects could only use the built-in .NET libraries and OpenSilver&amp;rsquo;s UI controls. Now you can add any compatible NuGet package, with a workflow that should feel familiar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the Solution Explorer, right-click the &lt;strong&gt;Dependencies&lt;/strong&gt; node&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;&amp;ldquo;Add NuGet Package Reference&amp;hellip;&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Search for a package and see the icon, description, download count, and version list&lt;/li&gt;
&lt;li&gt;Select a version and click &lt;strong&gt;Add&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-6/nuget-manager.png"
	width="2229"
	height="1610"
	loading="lazy"
	
		alt="The NuGet Package Manager showing search results and version selection."
	
 
	
		class="gallery-image" 
		data-flex-grow="138"
		data-flex-basis="332px"
	
&gt;&lt;/p&gt;
&lt;p&gt;The package is immediately available in your C# and XAML code. See it in action: the &lt;a class="link" href="https://xaml.io/s/Samples/Newtonsoft?run=true" target="_blank" rel="noopener"
 &gt;Newtonsoft.Json sample&lt;/a&gt; shows a NuGet package, C# code-behind, and a XAML UI all running together in the browser.&lt;/p&gt;
&lt;h3 id="what-packages-work"&gt;What packages work?
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Non-UI .NET libraries&lt;/strong&gt;: Anything targeting .NET Standard 2.0/2.1 or .NET 5-10 that works with Blazor WebAssembly. This covers the vast majority of popular packages: JSON processing, CSV handling, HTTP clients, validation, data transformation, and more.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenSilver-compatible UI libraries&lt;/strong&gt;: NuGet packages built for or compatible with OpenSilver, usable in both C# code and XAML markup.&lt;/p&gt;
&lt;p&gt;If a package relies on APIs unavailable in WebAssembly (direct file system access, certain networking APIs), it won&amp;rsquo;t work. Most non-UI libraries are fine.&lt;/p&gt;
&lt;h3 id="interactive-samples-try-them-now"&gt;Interactive samples: try them now
&lt;/h3&gt;&lt;p&gt;We&amp;rsquo;ve published official sample projects for popular .NET libraries. Each one is a complete, runnable solution with the NuGet package already referenced. Click any link and the app will compile and run automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://xaml.io/s/Samples/Newtonsoft?run=true" target="_blank" rel="noopener"
 &gt;Newtonsoft.Json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://xaml.io/s/Samples/CsvHelper?run=true" target="_blank" rel="noopener"
 &gt;CsvHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://xaml.io/s/Samples/AutoMapper?run=true" target="_blank" rel="noopener"
 &gt;AutoMapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://xaml.io/s/Samples/FluentValidation?run=true" target="_blank" rel="noopener"
 &gt;FluentValidation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://xaml.io/s/Samples/YamlDotNet?run=true" target="_blank" rel="noopener"
 &gt;YamlDotNet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://xaml.io/s/Samples/Mapster?run=true" target="_blank" rel="noopener"
 &gt;Mapster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://xaml.io/s/Samples/Humanizer?run=true" target="_blank" rel="noopener"
 &gt;Humanizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://xaml.io/s/Samples/AngleSharp?run=true" target="_blank" rel="noopener"
 &gt;AngleSharp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fork any of them to start your own project. We&amp;rsquo;ll be adding more over time.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="for-library-authors"&gt;For Library Authors
&lt;/h2&gt;&lt;p&gt;If you maintain a .NET library, you can create a live, interactive demo on XAML.io and share it with a single URL. Go to &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;xaml.io&lt;/a&gt;, add your NuGet package, write a small demo, sign in (free), and click &lt;strong&gt;&amp;ldquo;Share Code&amp;rdquo;&lt;/strong&gt;. Link to it from your README, docs, or NuGet page.&lt;/p&gt;
&lt;p&gt;If you create a sample, share it on the &lt;a class="link" href="https://forums.xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io Forums&lt;/a&gt; or &lt;a class="link" href="https://opensilver.net/contact" target="_blank" rel="noopener"
 &gt;let us know&lt;/a&gt;. We&amp;rsquo;d love to feature community-created samples.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="also-in-v06"&gt;Also in v0.6
&lt;/h2&gt;&lt;p&gt;NuGet and code sharing are the headlines, but this release also includes improvements shipped over recent months:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;XAML Autocompletion (IntelliSense)&lt;/strong&gt;: Context-aware suggestions for elements, attributes, and property values while editing XAML.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Fix with AI&amp;rdquo; button&lt;/strong&gt;: Appears next to XAML compilation errors. One click triggers an AI-powered fix attempt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WPF-style default template&lt;/strong&gt;: New projects start with &lt;code&gt;MainWindow.xaml&lt;/code&gt; and a &lt;code&gt;StartupUri&lt;/code&gt; in &lt;code&gt;App.xaml&lt;/code&gt;, matching the default structure of WPF applications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved mobile support&lt;/strong&gt;: View shared projects, make quick edits, and run code on a phone or tablet. Desktop browsers remain recommended for extended sessions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error squiggles&lt;/strong&gt;: Compilation errors are underlined directly in the source code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Split editor view&lt;/strong&gt;: Split the workspace vertically or horizontally (e.g. XAML on the left with the designer on the right)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community forums&lt;/strong&gt;: The new &lt;a class="link" href="https://forums.xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io Forums&lt;/a&gt; are live. Ask questions, share what you&amp;rsquo;ve built, and connect with other XAML.io users.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-6/fix-with-ai.png"
	width="1857"
	height="1572"
	loading="lazy"
	
		alt="The “Fix with AI” button suggests a fix for a XAML compilation error."
	
 
	
		class="gallery-image" 
		data-flex-grow="118"
		data-flex-basis="283px"
	
&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="under-the-hood-client-side-compilation-no-lock-in"&gt;Under the Hood: Client-Side Compilation, No Lock-In
&lt;/h2&gt;&lt;p&gt;XAML.io compiles and runs .NET code entirely in the browser. The C# compiler itself runs in your browser tab, using the same .NET WebAssembly runtime that powers Blazor WebAssembly applications. When you click Run, your code is compiled locally. Nothing is sent to a server. There is no round-trip, no cold start, and no build queue.&lt;/p&gt;
&lt;p&gt;The UI layer uses XAML with the same syntax as WPF, and &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt; renders it as real DOM elements rather than drawing to a canvas. A &lt;code&gt;TextBox&lt;/code&gt; becomes an actual &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;, an &lt;code&gt;Image&lt;/code&gt; becomes an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;, a &lt;code&gt;MediaElement&lt;/code&gt; becomes a &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt;, a &lt;code&gt;Path&lt;/code&gt; becomes an &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt;. Open your browser&amp;rsquo;s DevTools on a running XAML.io app and you&amp;rsquo;ll see a real DOM tree, not a single &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element. The compiled output is a set of static files (&lt;code&gt;.wasm&lt;/code&gt;, &lt;code&gt;.js&lt;/code&gt;, &lt;code&gt;index.html&lt;/code&gt;) that can be hosted on any web server or CDN.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;re not locked in.&lt;/strong&gt; Every project can be downloaded as a standard Visual Studio solution and continued in Visual Studio, VS Code, or any .NET IDE. The underlying framework (OpenSilver) is fully open-source. XAML.io is a frictionless starting point, not a walled garden.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="getting-started"&gt;Getting Started
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;1. Explore a sample&lt;/strong&gt; (no signup needed)&lt;/p&gt;
&lt;p&gt;Open any of the &lt;a class="link" href="#interactive-samples-try-them-now" &gt;interactive samples&lt;/a&gt; above. Click Run, edit the code, see the results.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Create your own project&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go to &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;xaml.io&lt;/a&gt;. A new project loads instantly. Build your UI three ways: drag controls from the toolbox, write XAML by hand (now with IntelliSense), or describe what you want and let the AI assistant generate it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Share your work&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sign in with your Microsoft Account (free). Click &lt;strong&gt;&amp;ldquo;Share Code&amp;rdquo;&lt;/strong&gt; to get a URL. Send it to anyone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Download for Visual Studio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click the download button to get a &lt;code&gt;.zip&lt;/code&gt; containing a standard Visual Studio solution. No lock-in.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="limitations-and-whats-next"&gt;Limitations and What&amp;rsquo;s Next
&lt;/h2&gt;&lt;p&gt;XAML.io is a tech preview. We want to be upfront about what doesn&amp;rsquo;t work yet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Not a desktop IDE replacement&lt;/strong&gt;: XAML.io is designed as a companion to Visual Studio, not a substitute. Features like debugging, refactoring, and advanced project tooling are best handled in a desktop IDE. Think of XAML.io as the fastest way to prototype, share, and learn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One project per solution&lt;/strong&gt;: multi-project solutions are planned&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NuGet compatibility&lt;/strong&gt;: packages that rely on APIs unavailable in WebAssembly won&amp;rsquo;t work (most non-UI libraries are fine)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desktop recommended&lt;/strong&gt;: mobile works, but the full experience is best on a desktop browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;re actively improving the product. Suggest features or vote on others&amp;rsquo; ideas at &lt;a class="link" href="https://feedback.xaml.io" target="_blank" rel="noopener"
 &gt;feedback.xaml.io&lt;/a&gt;, ask questions on the &lt;a class="link" href="https://forums.xaml.io" target="_blank" rel="noopener"
 &gt;forums&lt;/a&gt;, or &lt;a class="link" href="https://opensilver.net/contact" target="_blank" rel="noopener"
 &gt;contact us directly&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what&amp;rsquo;s coming next:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Feature&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Improved WPF compatibility&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Broader support for WPF APIs and patterns&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Multi-project solutions&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Class libraries, shared projects, multiple entry points&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;One-click deployment&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Publish running apps online: share a live app, not just source code&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;VB.NET and F# support&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Expanding language options beyond C#&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Improved performance&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Faster compilation, snappier interactions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;p&gt;Everything you build on XAML.io is yours. Download it, open it in Visual Studio, deploy it wherever you want. The underlying framework is fully open-source. There is no lock-in.&lt;/p&gt;
&lt;p&gt;Now you can share running .NET code with a link. &lt;a class="link" href="https://xaml.io/s/Samples/Newtonsoft?run=true" target="_blank" rel="noopener"
 &gt;Try it.&lt;/a&gt; Build something. Share it. See what happens when someone clicks your link and your code just&amp;hellip; runs.&lt;/p&gt;
&lt;p&gt;Questions? Feedback? Join the &lt;a class="link" href="https://forums.xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io Forums&lt;/a&gt;, reach out on &lt;a class="link" href="https://twitter.com/xaml_io" target="_blank" rel="noopener"
 &gt;X/Twitter (@xaml_io)&lt;/a&gt;, or &lt;a class="link" href="https://opensilver.net/contact" target="_blank" rel="noopener"
 &gt;contact us directly&lt;/a&gt;. If you&amp;rsquo;re exploring migrating a WPF or Silverlight application to the web, &lt;a class="link" href="https://opensilver.net/contact" target="_blank" rel="noopener"
 &gt;our team can help with that too&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;&lt;strong&gt;xaml.io&lt;/strong&gt;&lt;/a&gt; | Free. No install. No signup required.&lt;/p&gt;</description></item><item><title>Introducing XAML.io Preview v0.5: Visual .NET Development, Instantly in Your Browser</title><link>https://blog.xaml.io/post/xaml-io-v0-5/</link><pubDate>Fri, 03 Oct 2025 12:00:00 +0200</pubDate><guid>https://blog.xaml.io/post/xaml-io-v0-5/</guid><description>&lt;img src="https://blog.xaml.io/" alt="Featured image of post Introducing XAML.io Preview v0.5: Visual .NET Development, Instantly in Your Browser" /&gt;&lt;p&gt;Today, we&amp;rsquo;re introducing &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io&lt;/a&gt; Preview v0.5, a &lt;strong&gt;free, browser-based visual XAML designer and C# code editor&lt;/strong&gt; that lets you build .NET UI projects without installing anything.&lt;/p&gt;
&lt;p&gt;It combines a cross-platform UI framework (powered by the open-source &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt;) with a familiar design surface and code editor, making .NET development more accessible than ever. You can &lt;strong&gt;start a project in seconds&lt;/strong&gt;, and if you want to, you can &lt;strong&gt;download it as a Visual Studio solution and continue locally&lt;/strong&gt;, using fully open-source technologies.&lt;/p&gt;
&lt;p&gt;Imagine taking a small C# console app and wiring up a UI for it in just a few minutes. No SDKs, no installs, no switching languages.&lt;/p&gt;
&lt;h2 id="why-this-matters"&gt;Why This Matters
&lt;/h2&gt;&lt;p&gt;Starting a new .NET app often involves installing large SDKs, configuring environments, and setting up tooling before writing the first line of UI code. That friction can be a barrier, especially for newcomers, educators, or teams exploring ideas.&lt;/p&gt;
&lt;p&gt;XAML.io changes that. By moving the visual development experience into the browser, it lets you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prototype ideas quickly&lt;/strong&gt; without local setup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add a UI to existing console apps&lt;/strong&gt; in minutes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learn and experiment&lt;/strong&gt; with XAML in a zero-install environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Focus on your app logic&lt;/strong&gt;, not tooling configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Switch to offline development at any time&lt;/strong&gt;, by downloading a standard Visual Studio project that runs on open-source technologies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;ldquo;I must say, I DIG this.&amp;rdquo;&lt;br&gt;
— &lt;em&gt;ZayLarsson on Reddit (&lt;a class="link" href="https://www.reddit.com/r/csharp/comments/1nie9c8/comment/nerk9yw/?utm_source=share&amp;amp;utm_medium=web3x&amp;amp;utm_name=web3xcss&amp;amp;utm_term=1&amp;amp;utm_content=share_button" target="_blank" rel="noopener"
 &gt;source&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;I had dreams about this 10 years ago.&amp;rdquo;&lt;br&gt;
— &lt;em&gt;Prod_Meteor on Reddit (&lt;a class="link" href="https://www.reddit.com/r/csharp/comments/1nie9c8/comment/nekckyk/?utm_source=share&amp;amp;utm_medium=web3x&amp;amp;utm_name=web3xcss&amp;amp;utm_term=1&amp;amp;utm_content=share_button" target="_blank" rel="noopener"
 &gt;source&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="whats-new-in-preview-v05"&gt;What&amp;rsquo;s New in Preview v0.5
&lt;/h2&gt;&lt;p&gt;Earlier preview versions of XAML.io focused on designing a single XAML file online. Great for layout experiments, but limited for real scenarios.&lt;br&gt;
With &lt;strong&gt;Preview v0.5&lt;/strong&gt;, you can now work with entire projects that combine XAML and C# code-behind, directly in the browser.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what&amp;rsquo;s new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full project editing&lt;/strong&gt;: Edit XAML and C# files (using the Monaco editor for code).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-5/full-project-editing.png"
	width="2020"
	height="1150"
	loading="lazy"
	
		alt="Full project editing in the browser"
	
 
	
		class="gallery-image" 
		data-flex-grow="175"
		data-flex-basis="421px"
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code-behind support&lt;/strong&gt;: Add event handlers and logic in C#, just like in traditional .NET apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-5/code-behind.png"
	width="2020"
	height="1150"
	loading="lazy"
	
		alt="Code-behind support with C# event handlers"
	
 
	
		class="gallery-image" 
		data-flex-grow="175"
		data-flex-basis="421px"
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Familiar environment&lt;/strong&gt;: Designer, Solution Explorer, and editor in a VS-like layout.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-5/solution-explorer.png"
	width="650"
	height="460"
	loading="lazy"
	
		alt="Solution Explorer in a familiar VS-like layout"
	
 
	
		class="gallery-image" 
		data-flex-grow="141"
		data-flex-basis="339px"
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Instant execution&lt;/strong&gt;: Click &lt;strong&gt;Run&lt;/strong&gt; to launch your project in the browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-5/run.png"
	width="848"
	height="398"
	loading="lazy"
	
		alt="Click Run to launch your project"
	
 
	
		class="gallery-image" 
		data-flex-grow="213"
		data-flex-basis="511px"
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud saves&lt;/strong&gt;: Save projects and pick up where you left off.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-5/cloud-save.png"
	width="598"
	height="462"
	loading="lazy"
	
		alt="Cloud save to pick up where you left off"
	
 
	
		class="gallery-image" 
		data-flex-grow="129"
		data-flex-basis="310px"
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Download to Visual Studio&lt;/strong&gt;: Export as a ZIP and continue offline at any time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-5/download-solution.png"
	width="845"
	height="409"
	loading="lazy"
	
		alt="Download as a Visual Studio solution"
	
 
	
		class="gallery-image" 
		data-flex-grow="206"
		data-flex-basis="495px"
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cross-platform&lt;/strong&gt;: Works on any modern browser, desktop or mobile.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(&lt;em&gt;Mobile support is still early, with improvements planned&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.xaml.io/post/xaml-io-v0-5/mobile.png"
	width="550"
	height="974"
	loading="lazy"
	
		alt="XAML.io running on mobile"
	
 
	
		class="gallery-image" 
		data-flex-grow="56"
		data-flex-basis="135px"
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;XAML dialect&lt;/strong&gt;: Uses WPF XAML (subset, growing). MAUI support is under consideration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="youre-not-locked-in"&gt;You&amp;rsquo;re Not Locked In
&lt;/h2&gt;&lt;p&gt;One of the core design principles of XAML.io is &lt;strong&gt;developer control&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Every project can be downloaded as a standard Visual Studio solution, and the underlying runtime (&lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt;) is fully open-source. This means you can start quickly online, then continue locally at any time, without being tied to a proprietary format or service.&lt;/p&gt;
&lt;p&gt;Think of XAML.io as a &lt;strong&gt;frictionless on-ramp&lt;/strong&gt; to .NET development, not a walled garden.&lt;/p&gt;
&lt;h2 id="looking-ahead"&gt;Looking Ahead
&lt;/h2&gt;&lt;p&gt;Preview v0.5 is an early but important step toward a bigger vision:&lt;br&gt;
To make XAML.io the &lt;strong&gt;most approachable way to get started with .NET&lt;/strong&gt;, lowering barriers for beginners, educators, hobbyists, and rapid prototypers.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what&amp;rsquo;s coming next:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Project sharing via link&lt;/strong&gt;: Share your XAML.io projects easily with a single URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-click deployment&lt;/strong&gt;: Instantly publish and share running apps online.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IntelliSense support&lt;/strong&gt;: To improve the C# editing experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved mobile experience&lt;/strong&gt;: Making it easier to work on the go.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VB.NET and F# support&lt;/strong&gt;: Expanding language options beyond C#.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expanded WPF compatibility&lt;/strong&gt;: Continuing to broaden the supported XAML subset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved performance&lt;/strong&gt;: Aiming for near-instant loading and snappier interactions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MAUI support&lt;/strong&gt;: Being considered for the future (not planned short-term).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Suggest or vote on features: &lt;a class="link" href="https://feedback.xaml.io" target="_blank" rel="noopener"
 &gt;https://feedback.xaml.io&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="try-it-today"&gt;Try It Today
&lt;/h2&gt;&lt;p&gt;You can try XAML.io right now. It&amp;rsquo;s completely free. No installation. No setup. No signup required.&lt;br&gt;
&lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;&lt;strong&gt;https://xaml.io&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Welcome to the XAML.io Blog</title><link>https://blog.xaml.io/post/welcome-to-the-xaml-io-blog/</link><pubDate>Fri, 03 Oct 2025 09:00:00 +0200</pubDate><guid>https://blog.xaml.io/post/welcome-to-the-xaml-io-blog/</guid><description>&lt;p&gt;We&amp;rsquo;re launching a dedicated blog for &lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until now, XAML.io updates were published on the &lt;a class="link" href="https://opensilver.net/whats-new/" target="_blank" rel="noopener"
 &gt;OpenSilver blog&lt;/a&gt;, alongside OpenSilver release notes, migration case studies, and framework updates. That made sense when XAML.io was a companion feature of OpenSilver. But XAML.io has grown into its own product with its own community, so it deserves its own space.&lt;/p&gt;
&lt;p&gt;This blog is where all future XAML.io news will live.&lt;/p&gt;
&lt;h2 id="what-is-xamlio"&gt;What is XAML.io?
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io&lt;/a&gt; is a free, browser-based IDE for building .NET applications using C# and XAML. It includes a visual drag-and-drop XAML designer with 100+ controls, a code editor, and in-browser .NET compilation via WebAssembly. No installation, no setup, no signup required.&lt;/p&gt;
&lt;p&gt;Think of it as the fastest way to go from zero to a running .NET UI app. Open the browser, drag some controls onto a canvas or write some XAML, add your C# logic, click Run, and your app is live. If you want to continue in Visual Studio, download the project as a standard .NET solution. No lock-in.&lt;/p&gt;
&lt;p&gt;XAML.io is built by &lt;a class="link" href="https://userware.dev" target="_blank" rel="noopener"
 &gt;Userware&lt;/a&gt;, a Paris-based company that also maintains &lt;a class="link" href="https://opensilver.net" target="_blank" rel="noopener"
 &gt;OpenSilver&lt;/a&gt;, the open-source framework that runs WPF-style C#/XAML applications in the browser via WebAssembly. XAML.io itself is a C#/XAML application running on OpenSilver, so the IDE runs on the same technology it lets you develop with.&lt;/p&gt;
&lt;h2 id="what-to-expect-from-this-blog"&gt;What to expect from this blog
&lt;/h2&gt;&lt;p&gt;This is where we&amp;rsquo;ll share:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Release announcements&lt;/strong&gt; for new XAML.io versions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature deep dives&lt;/strong&gt; explaining how things work under the hood&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tips and tutorials&lt;/strong&gt; to help you get the most out of XAML.io&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community highlights&lt;/strong&gt; showcasing what people build and share&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Roadmap updates&lt;/strong&gt; so you know what&amp;rsquo;s coming next&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="get-started"&gt;Get started
&lt;/h2&gt;&lt;p&gt;The best way to see what XAML.io is about is to try it:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://xaml.io" target="_blank" rel="noopener"
 &gt;https://xaml.io&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Free. No install. No signup required.&lt;/p&gt;
&lt;h2 id="join-the-conversation"&gt;Join the conversation
&lt;/h2&gt;&lt;p&gt;Have questions, feedback, or want to show what you&amp;rsquo;ve built? Join us on the &lt;a class="link" href="https://forums.xaml.io" target="_blank" rel="noopener"
 &gt;XAML.io Forums&lt;/a&gt;. You can also reach out via &lt;a class="link" href="https://opensilver.net/contact" target="_blank" rel="noopener"
 &gt;opensilver.net/contact&lt;/a&gt; or find us on &lt;a class="link" href="https://twitter.com/xaml_io" target="_blank" rel="noopener"
 &gt;X/Twitter (@xaml_io)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to have you here.&lt;/p&gt;
&lt;p&gt;The XAML.io Team&lt;/p&gt;</description></item></channel></rss>