# Create custom sources

**Requires**: [sources module](../modules/sources).

[Sources module](../modules/sources) offers a couple of base classes to assist in implementing custom [configuration sources](../concepts-and-basics/configuration-sources).

### [**ManualFeedSource**](https://github.com/vostok/configuration.sources/blob/master/Vostok.Configuration.Sources/Manual/ManualFeedSourceOfT.cs)

_For in-memory sources or sources that can update an in-memory one from a remote API_.

```
class MySource : ManualFeedSource<string>
{
    public MySource()
        : base(Parse) { }

    private static ISettingsNode Parse(string input) { ... }
}

var source = new MySource();

source.Push("input1");
source.Push("input2");

// Push method can be used by an internal periodical/event-based update routine.
```

### [FileSource](https://github.com/vostok/configuration.sources/blob/master/Vostok.Configuration.Sources/File/FileSource.cs)

_For sources based on local files. Includes automatic reload on file updates._

```
class MyFileSource : FileSource
{
    public MyFileSource(string filePath)
        : base(new FileSourceSettings(filePath), Parse) { }
        
    private static ISettingsNode Parse(string input) { ... }
}
```

### Related pages

{% content-ref url="../concepts-and-basics/configuration-sources" %}
[configuration-sources](../concepts-and-basics/configuration-sources)
{% endcontent-ref %}

{% content-ref url="../sources/constant-source" %}
[constant-source](../sources/constant-source)
{% endcontent-ref %}

{% content-ref url="../basic-scenarios/combine-sources" %}
[combine-sources](../basic-scenarios/combine-sources)
{% endcontent-ref %}

{% content-ref url="../basic-scenarios/scope-sources" %}
[scope-sources](../basic-scenarios/scope-sources)
{% endcontent-ref %}

{% content-ref url="nest-sources" %}
[nest-sources](nest-sources)
{% endcontent-ref %}

{% content-ref url="freeze-sources" %}
[freeze-sources](freeze-sources)
{% endcontent-ref %}
