Intermodal is a user-friendly and featureful command-line BitTorrent metainfo
utility. The binary is called
imdl and runs on Linux, Windows, and macOS.
At the moment, creation, viewing, and verification of
.torrent files is
supported. See the book for examples and usage
For more about the project and its goals, check out this post.
Table of Contents
- Supported Operating Systems
- Pre-built binaries
- Linux and MacOS Install Script
- Shell Completion Scripts
- Notes for Packagers
- Semantic Versioning
- Unstable Features
- Source Signatures
Supported Operating Systems
imdl supports Linux, MacOS, and Windows, and should work on other unix OSes.
If it does not, please open an issue!
|Operating System||Package Manager||Package||Command|
|Arch Linux||Manual Installation||intermodalAUR||wiki|
Pre-built binaries for Linux, macOS, and Windows can be found on the releases page.
Linux and MacOS Install Script
You can use the following command on Linux and MacOS to download the latest
binary, just replace
DEST with the directory where you'd like to install the
curl --proto '=https' --tlsv1.2 -sSf https://imdl.io/install.sh | bash -s -- --to DEST
A good place to install personal binaries is
--to is not supplied. To create the
~/bin directory and install
curl --proto '=https' --tlsv1.2 -sSf https://imdl.io/install.sh | bash
Additionally, you'll have to add
~/bin to the
PATH environment variable,
which the system uses to find executables. How to do this depends on the shell.
zsh, it should be done in
echo 'export PATH=$HOME/bin:$PATH' >> ~/.profile
fish, it should be done in
echo 'set -gx PATH ~/bin $PATH' >> ~/.config/fish/config.fish
Shell Completion Scripts
Shell completion scripts for Bash, Zsh, Fish, PowerShell, and Elvish are included in all binary releases.
For Bash, move
For Fish, move
For the Z shell, move
_imdl to one of your
For PowerShell, add
. _imdl.ps1 to your PowerShell
(note the leading period). If the
_imdl.ps1 file is not on your
. /path/to/_imdl.ps1 instead.
imdl binary can also generate the same completion scripts at runtime,
$ imdl completions --shell bash > imdl.bash
--dir argument can be used to write a completion script into a directory
with a filename that's appropriate for the shell. For example, the following
command will write the Z shell completion script to
$ imdl completions --shell zsh --dir $fpath
Online documentation is available in the book, hosted here.
--help to any command will print help text about how to use that
command, including detailed information about any command-line arguments it
So, to get information about
imdl torrent create, run
imdl torrent create --help.
Additionally, the same help text is available online in the book.
Notes for Packagers
First off, thank you very much! If I can do anything to make packaging Intermodal easier, please don't hesistate to open an issue.
The Intermodal binary is called
imdl, and the suggested name for the package
Intermodal is written in Rust, and can be built with
cargo build --release.
There are a number of build artifacts: the binary, the man pages, the changelog, and the shell completion scripts.
The binary is built with
cargo, and the other artifacts are built
The binary can be built with:
cargo build --release
help2man to be
installed, which is used to generate man pages from subcommand
The rest of the build artifacts can be built with
cargo run --package gen -- --bin target/release/imdl all
The path to the built
imdl executable should be passed to
gen with the
After running the above commands, the following table shows the location of the built artifacts.
If you'd like to receive an update whenever a new version is released, you can watch the intermodal repository in "Releases only" mode.
The primary chat is on Discord.
Your bug reports, feature requests, pull requests, and design help are much appreciated!
Check out issues with the "good first issue" label for some ideas.
Quite a few files are generated by the program in
bin/gen. Some files are
generated from templates, so those templates should be edited to make changes
to those files:
Some files are completely generated, and so shouldn't be manually edited at all:
All files can be regenerated by running
cargo run --package gen all, or
just gen, if you have just installed.
The changelog is generated from YAML metadata in commit messages. Here is an example commit message, with metadata:
Upgrade foo Upgrade foo to v7.5, which is much better. type: changed pr: - https://github.com/casey/intermodal/pull/1 fixes: - https://github.com/intermodal/issues/2 - https://github.com/intermodal/issues/3
The only required field is
type. To see the possible values for
cargo run --package gen commit-types.
Performance benchmarks can be run with:
$ cargo bench --features bench
The benchmark framework used is
The bench targets themselves are in the
benches directory. These targets call benchmarking functions in
src/benches.rs, which are only enabled when the
bench feature is enabled.
Intermodal follows semantic versioning.
- v0.0.X: Breaking changes may be introduced at any time.
- v0.X.Y: Breaking changes may only be introduced with a minor version number bump.
- vX.Y.Z: Breaking changes may only be introduced with a major version number bump
To avoid premature stabilization and excessive version churn, unstable features
are unavailable unless the
-u flag is passed, for example
imdl --unstable torrent create .. Unstable features may be changed or removed
at any time.
The formatting of
imdl torrent show is entirely copied from
torf, an excellent command-line torrent
creator, editor, and viewer.