diff --git a/app/MindWork AI Studio/Settings/DataModel/DataSourceERI.cs b/app/MindWork AI Studio/Settings/DataModel/DataSourceERI.cs
new file mode 100644
index 00000000..6bc76641
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/DataModel/DataSourceERI.cs
@@ -0,0 +1,33 @@
+namespace AIStudio.Settings.DataModel;
+
+///
+/// An external data source, accessed via an ERI server, cf. https://github.com/MindWorkAI/ERI.
+///
+public readonly record struct DataSourceERI : IDataSource
+{
+ public DataSourceERI()
+ {
+ }
+
+ ///
+ public uint Num { get; init; }
+
+ ///
+ public string Id { get; init; } = Guid.Empty.ToString();
+
+ ///
+ public string Name { get; init; } = string.Empty;
+
+ ///
+ public DataSourceType Type { get; init; } = DataSourceType.NONE;
+
+ ///
+ /// The hostname of the ERI server.
+ ///
+ public string Hostname { get; init; } = string.Empty;
+
+ ///
+ /// The port of the ERI server.
+ ///
+ public int Port { get; init; }
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Settings/DataModel/DataSourceLocalDirectory.cs b/app/MindWork AI Studio/Settings/DataModel/DataSourceLocalDirectory.cs
new file mode 100644
index 00000000..0f9b2fde
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/DataModel/DataSourceLocalDirectory.cs
@@ -0,0 +1,28 @@
+namespace AIStudio.Settings.DataModel;
+
+///
+/// Represents a local directory as a data source.
+///
+public readonly record struct DataSourceLocalDirectory : IDataSource
+{
+ public DataSourceLocalDirectory()
+ {
+ }
+
+ ///
+ public uint Num { get; init; }
+
+ ///
+ public string Id { get; init; } = Guid.Empty.ToString();
+
+ ///
+ public string Name { get; init; } = string.Empty;
+
+ ///
+ public DataSourceType Type { get; init; } = DataSourceType.NONE;
+
+ ///
+ /// The path to the directory.
+ ///
+ public string Path { get; init; } = string.Empty;
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Settings/DataModel/DataSourceLocalFile.cs b/app/MindWork AI Studio/Settings/DataModel/DataSourceLocalFile.cs
new file mode 100644
index 00000000..7c70c76b
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/DataModel/DataSourceLocalFile.cs
@@ -0,0 +1,28 @@
+namespace AIStudio.Settings.DataModel;
+
+///
+/// Represents one local file as a data source.
+///
+public readonly record struct DataSourceLocalFile : IDataSource
+{
+ public DataSourceLocalFile()
+ {
+ }
+
+ ///
+ public uint Num { get; init; }
+
+ ///
+ public string Id { get; init; } = Guid.Empty.ToString();
+
+ ///
+ public string Name { get; init; } = string.Empty;
+
+ ///
+ public DataSourceType Type { get; init; } = DataSourceType.NONE;
+
+ ///
+ /// The path to the file.
+ ///
+ public string FilePath { get; init; } = string.Empty;
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Settings/IDataSource.cs b/app/MindWork AI Studio/Settings/IDataSource.cs
new file mode 100644
index 00000000..7bd59bf0
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/IDataSource.cs
@@ -0,0 +1,29 @@
+using AIStudio.Settings.DataModel;
+
+namespace AIStudio.Settings;
+
+///
+/// The common interface for all data sources.
+///
+public interface IDataSource
+{
+ ///
+ /// The number of the data source.
+ ///
+ public uint Num { get; init; }
+
+ ///
+ /// The unique identifier of the data source.
+ ///
+ public string Id { get; init; }
+
+ ///
+ /// The name of the data source.
+ ///
+ public string Name { get; init; }
+
+ ///
+ /// Which type of data source is this?
+ ///
+ public DataSourceType Type { get; init; }
+}
\ No newline at end of file