diff --git a/Flow.Launcher.Avalonia/App.axaml b/Flow.Launcher.Avalonia/App.axaml
new file mode 100644
index 000000000..7a48015b4
--- /dev/null
+++ b/Flow.Launcher.Avalonia/App.axaml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher.Avalonia/App.axaml.cs b/Flow.Launcher.Avalonia/App.axaml.cs
new file mode 100644
index 000000000..0b8d0c827
--- /dev/null
+++ b/Flow.Launcher.Avalonia/App.axaml.cs
@@ -0,0 +1,52 @@
+using Avalonia;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Markup.Xaml;
+using CommunityToolkit.Mvvm.DependencyInjection;
+using Flow.Launcher.Infrastructure.UserSettings;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+
+namespace Flow.Launcher.Avalonia;
+
+public partial class App : Application
+{
+ public override void Initialize()
+ {
+ AvaloniaXamlLoader.Load(this);
+ }
+
+ public override void OnFrameworkInitializationCompleted()
+ {
+ // Set up dependency injection
+ var services = new ServiceCollection();
+ ConfigureServices(services);
+ var serviceProvider = services.BuildServiceProvider();
+ Ioc.Default.ConfigureServices(serviceProvider);
+
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ desktop.MainWindow = new MainWindow();
+ }
+
+ base.OnFrameworkInitializationCompleted();
+ }
+
+ private void ConfigureServices(IServiceCollection services)
+ {
+ // Register settings - for now create a default instance
+ // In production, this would load from the existing settings file
+ services.AddSingleton(_ =>
+ {
+ var settings = new Settings();
+ // Set some defaults for the Avalonia version
+ settings.WindowSize = 580;
+ settings.WindowHeightSize = 42;
+ settings.QueryBoxFontSize = 24;
+ settings.ItemHeightSize = 50;
+ settings.ResultItemFontSize = 14;
+ settings.ResultSubItemFontSize = 12;
+ settings.MaxResultsToShow = 6;
+ return settings;
+ });
+ }
+}
diff --git a/Flow.Launcher.Avalonia/Converters/BoolToIsVisibleConverter.cs b/Flow.Launcher.Avalonia/Converters/BoolToIsVisibleConverter.cs
new file mode 100644
index 000000000..e8d0211a4
--- /dev/null
+++ b/Flow.Launcher.Avalonia/Converters/BoolToIsVisibleConverter.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Globalization;
+using Avalonia.Data.Converters;
+
+namespace Flow.Launcher.Avalonia.Converters;
+
+///
+/// Converts a boolean value to IsVisible (Avalonia uses bool for visibility, not Visibility enum)
+///
+public class BoolToIsVisibleConverter : IValueConverter
+{
+ ///
+ /// If true, inverts the boolean value (true becomes false, false becomes true)
+ ///
+ public bool Invert { get; set; }
+
+ public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ if (value is bool boolValue)
+ {
+ return Invert ? !boolValue : boolValue;
+ }
+ return false;
+ }
+
+ public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ if (value is bool boolValue)
+ {
+ return Invert ? !boolValue : boolValue;
+ }
+ return false;
+ }
+}
diff --git a/Flow.Launcher.Avalonia/Converters/CommonConverters.cs b/Flow.Launcher.Avalonia/Converters/CommonConverters.cs
new file mode 100644
index 000000000..22b6349f3
--- /dev/null
+++ b/Flow.Launcher.Avalonia/Converters/CommonConverters.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using Avalonia.Data.Converters;
+using Avalonia.Media;
+
+namespace Flow.Launcher.Avalonia.Converters;
+
+///
+/// Converts text with highlight ranges to formatted text with bold highlights.
+/// This is a simplified version - full implementation would use Avalonia's TextDecorations.
+///
+public class HighlightTextConverter : IMultiValueConverter
+{
+ public object? Convert(IList