diff --git a/demo/Ursa.Demo.Browser/Assets/SourceHanSansCN-Regular.otf b/demo/Ursa.Demo.Browser/Assets/SourceHanSansCN-Regular.otf
new file mode 100644
index 0000000..c13789b
Binary files /dev/null and b/demo/Ursa.Demo.Browser/Assets/SourceHanSansCN-Regular.otf differ
diff --git a/demo/Ursa.Demo.Browser/AvaloniaAppBuilderExtensions.cs b/demo/Ursa.Demo.Browser/AvaloniaAppBuilderExtensions.cs
new file mode 100644
index 0000000..eb3c4b7
--- /dev/null
+++ b/demo/Ursa.Demo.Browser/AvaloniaAppBuilderExtensions.cs
@@ -0,0 +1,16 @@
+using Avalonia;
+using Avalonia.Media;
+
+namespace Ursa.Demo.Browser;
+
+public static class AvaloniaAppBuilderExtensions
+{
+ private static string DefaultFontFamily => "avares://Ursa.Demo.Browser/Assets#Source Han Sans CN";
+
+ public static AppBuilder WithSourceHanSansCNFont(this AppBuilder builder) =>
+ builder.With(new FontManagerOptions
+ {
+ DefaultFamilyName = DefaultFontFamily,
+ FontFallbacks = new[] { new FontFallback { FontFamily = new FontFamily(DefaultFontFamily) } }
+ });
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo.Browser/Program.cs b/demo/Ursa.Demo.Browser/Program.cs
index f665641..5c9ef40 100644
--- a/demo/Ursa.Demo.Browser/Program.cs
+++ b/demo/Ursa.Demo.Browser/Program.cs
@@ -10,6 +10,7 @@ namespace Ursa.Demo.Browser;
internal sealed partial class Program
{
private static Task Main(string[] args) => BuildAvaloniaApp()
+ .WithSourceHanSansCNFont()
.StartBrowserAppAsync("out");
public static AppBuilder BuildAvaloniaApp()
diff --git a/demo/Ursa.Demo.Browser/linker.xml b/demo/Ursa.Demo.Browser/Roots.xml
similarity index 100%
rename from demo/Ursa.Demo.Browser/linker.xml
rename to demo/Ursa.Demo.Browser/Roots.xml
diff --git a/demo/Ursa.Demo.Browser/Ursa.Demo.Browser.csproj b/demo/Ursa.Demo.Browser/Ursa.Demo.Browser.csproj
index 0b2c8c4..a1b75b7 100644
--- a/demo/Ursa.Demo.Browser/Ursa.Demo.Browser.csproj
+++ b/demo/Ursa.Demo.Browser/Ursa.Demo.Browser.csproj
@@ -4,6 +4,11 @@
net8.0-browser
+
+
+
+
+
@@ -11,8 +16,4 @@
-
-
-
-