---
title: "Custom extension repository"
manual: "TYPO3 Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3coreapi:custom-extension-repository@main"
source: "ExtensionArchitecture/HowTo/CustomExtensionRepository.rst"
rendered: "2026-09-24T12:36:55+00:00"
---

# Custom extension repository {#custom-extension-repository}

> [!NOTE]
> This section is only relevant for Classic mode installations,
> as Composer Mode installations use the download functionality
> of Composer.

TYPO3 provides functionality that connects to a different repository type
than the "official" [TER](https://extensions.typo3.org/) (TYPO3 Extension Repository) to download third-party extensions.
The API is called "Extension Remotes". These remotes are adapters that allow
fetching a list of extensions via the `ListableRemoteInterface` or downloading
an extension via the `ExtensionDownloaderRemoteInterface`.

It is possible to add new remotes, disable registered remotes
or change the default remote.

Custom remote configuration can be added in the
[`Configuration/Services.yaml`](../FileStructure/Configuration/ServicesYaml.md#file-extension-configuration-services-yaml) of the corresponding extension.

**EXT:my_extension/Configuration/Services.yaml**

```yaml
extension.remote.myremote:
  class: 'TYPO3\CMS\Extensionmanager\Remote\TerExtensionRemote'
  arguments:
    $identifier: 'myremote'
    $options:
       remoteBase: 'https://my_own_remote/'
  tags:
    - name: 'extension.remote'
      default: true
```

Using `default: true`, "myremote" will be used as the default remote.
Setting `default: true` only works if the defined service
implements `ListableRemoteInterface`.

Please note that `\Vendor\SitePackage\Remote\MyRemote` must implement
`ExtensionDownloaderRemoteInterface` to be registered as remote.

To disable an already registered remote, `enabled: false` can be set.

**EXT:my_extension/Configuration/Services.yaml**

```yaml
extension.remote.ter:
  tags:
    - name: 'extension.remote'
      enabled: false
```
