There are three ways to implement a new special remote: 1. Using the [[hook]] special remote to tell git-annex what commands to run to store and retrieve data. This is the easiest way, and is great for prototyping. 2. Writing it in Haskell and adding it to git-annex. 3. Writing a program in any language you like that speaks the [[design/external_special_remote_protocol]]. The rest of this page concentrates on writing new external special remotes. It's not hard! * All you need is to make a program with a name like `git-annex-remote-$bar`. * Install it in PATH. * When the user runs `git annex initremote foo type=external externaltype=$bar`, it will use your program. * See [[design/external_special_remote_protocol]] for what the program needs to do. There's an example at the end of this page. * If things don't seem to work, pass `--debug` and you'll see, amoung other things, a transcript of git-annex's communication with your program. * If you build a new special remote, please add it to the list of [[special_remotes]]. ## libraries For Python, there is a [library](https://github.com/Lykos153/AnnexRemote) that takes care of all the protocol details. ## examples Here's an example of using an external special remote to add torrent support to git-annex: [[external/git-annex-remote-torrent]] Here's a simple shell script example, which can easily be adapted to run whatever commands you need. Or better, re-written in some better language of your choice. [[!inline pages="special_remotes/external/example.sh" feeds=no]]