Skip to content

Settings

Loading, Using, Saving Settings

To add settings to your plugin, you need to create a class and add public properties to it.

MySettings.cs
public class MySettings
{
public string City { get; set; } = "New York";
}

Then, you need to add a field of this class to your plugin class with the settings attribute.

Main.cs
public class MyPlugin : ExtendedPlugin
{
[Settings]
public MySettings _settings;
}

This is it, now your settings are read from the settings file for you, you can access them using the _settings field, and any changes in them are saved for you when you close Flow Launcher.

Settings UI

Let’s create a simple UI that will let us change the city in our MySettings class. Create a UserControl in your project called MySettingsUi.xaml in your project and add the following code:

SettingsUi.xaml
<UserControl
x:Class="Your.Namespace.Here.MyPlugin.MySettingsUi"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Your.Namespace.Here.MyPlugin"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DataContext="{d:DesignInstance local:MySettings}"
d:DesignHeight="300"
d:DesignWidth="300"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Content="Enter the city you'd like to look up the weather for:" />
<TextBox Grid.Column="1" Text="{Binding City}" />
</Grid>
</UserControl>

Now, you need to modify MySettingsUi.xaml.cs. You’ll accept your MySettings instance as a parameter of the constructor here and set it as this control’s DataContext.

SettingsUi.xaml.cs
public partial class MySettingsUi : UserControl
{
public SettingsUi(MySettings settings)
{
DataContext = settings;
InitializeComponent();
}
}

All you have to do now is tell Flow Launcher how to create your settings UI. You can do this back in Main.cs with the CreateSettingsUi attribute.

Main.cs
public class MyPlugin : ExtendedPlugin
{
[Settings]
public MySettings _settings;
[CreateSettingsUi]
public Control CreateMySettingsUi()
{
return new MySettingsUi(_settings);
}
}

Now, when you open the settings for your plugin in Flow Launcher, you should see a textbox where you can enter the city name. The settings are ready.

Settings UI demo