# Extending ## Creating new loaders In your project i.e called `myprogram` create your custom loader. `myprogram/my_custom_loader.py` ```python def load(obj, env=None, silent=True, key=None, filename=None): """ Reads and loads in to "obj" a single key or all keys from source :param obj: the settings instance :param env: settings current env (upper case) default='DEVELOPMENT' :param silent: if errors should raise :param key: if defined load a single key, else load all from `env` :param filename: Custom filename to load (useful for tests) :return: None """ # Load data from your custom data source (file, database, memory etc) # use `obj.set(key, value)` or `obj.update(dict)` to load data # use `obj.logger.debug` to log your loader activities # use `obj.find_file('filename.ext')` to find the file in search tree # Return nothing ``` In the `.env` file or exporting the envvar define: ```bash LOADERS_FOR_DYNACONF=['myprogram.my_custom_loader', 'dynaconf.loaders.env_loader'] ``` Dynaconf will import your `myprogram.my_custom_loader.load` and call it. > **IMPORTANT**: the `'dynaconf.loaders.env_loader'` must be the last in the loaders list > if you want to keep the behavior of having envvars to override parameters. In case you need to disable all external loaders and rely only the `settings.*` file loaders define: ```bash LOADERS_FOR_DYNACONF=false ``` In case you need to disable all core loaders and rely only on external loaders: ```bash CORE_LOADERS_FOR_DYNACONF='[]' # a toml empty list ``` See [example/custom_loader](https://github.com/rochacbruno/dynaconf/tree/master/example/custom_loader)