Create and run plugin-based command-line tools.
Quickstart
This section shows how to start prototyping plugins on your local machine. See the sections below to learn how to distribute your commands as remote plugins that can be installed and updated from Git repositories.
Create a new local plugin:
multitool plugins new test
Show the generated command help:
multitool run test hello --help
Run the example command:
multitool run test hello \
"Hello, World!" \
--count 3 \
--format json \
-vv \
--enabled \
--tag alpha \
--tag beta
Edit the generated source code:
vim ~/.multitool/plugins/test/plugin_*.py
Usage
Usage: multitool [OPTIONS] COMMAND [ARGS]...
Create and run plugin-based command-line tools.
Options:
-V, --version Show the version and exit.
-h, --help Show this message and exit.
Commands:
bootstrap Create the directory structure for a new Python package...
plugins Manage plugin repositories.
run Run installed plugin commands.
Managing plugins
Plugins are distributed as Git repositories containing Click commands.
The plugins command manages plugin repositories, while installed plugin commands are available under multitool run.
Git is required to install or update plugins. If Git is unavailable, the plugins command cannot install repositories, although plugins can still be installed manually by copying them into:
~/.multitool/plugins/PLUGIN_NAME/
Creating plugins
Create a new plugin scaffold with:
multitool plugins new PLUGIN_NAME
This creates a local plugin repository under:
~/.multitool/plugins/PLUGIN_NAME/
The generated structure includes:
PLUGIN_NAME/ ├── __init__.py ├── plugin_<unique-id>.py ├── multitool-info.json ├── README.md └── LICENSE
The generated plugin contains a Click command group named PLUGIN_NAME and an example hello command. Add additional commands to the generated plugin_<unique-id>.py module.
Test the plugin locally with:
multitool run PLUGIN_NAME -h
To distribute the plugin:
Initialize the plugin directory as a Git repository:
cd ~/.multitool/plugins/PLUGIN_NAME git init
Commit and push it to a remote Git repository such as GitHub or GitLab.
Add the repository URL to the Multitool configuration:
[sources] PLUGIN_NAME = https://github.com/<user>/PLUGIN_NAME.git
Install or update plugins:
multitool plugins update
Alternatively, copy the plugin directory directly into another Multitool plugins directory to use it locally.
Configuring
Add a plugin repository with:
multitool plugins add https://github.com/mdelotavo/multitool-plugins.git
By default, the repository name is used as the source key. To specify your own key:
multitool plugins add https://github.com/mdelotavo/multitool-plugins.git --key example
Remove a configured plugin source by key or URL:
multitool plugins remove multitool-plugins multitool plugins remove https://github.com/mdelotavo/multitool-plugins.git
Apply configuration changes (install new plugins and update existing plugins) with:
multitool plugins update
For bulk edits, you can edit the configuration file directly:
multitool plugins configure
To automatically apply configuration changes after saving and closing the file (install new plugins, update existing plugins, and prune removed plugins), use:
multitool plugins configure -a
Example configuration:
[sources] multitool-plugins = https://github.com/mdelotavo/multitool-plugins.git
Configured repositories are cloned into:
~/.multitool/plugins/
Multiple repositories may be configured as long as each source key is unique.
Installing
Install the example plugins:
multitool plugins add https://github.com/mdelotavo/multitool-plugins.git multitool plugins update multitool plugins show multitool plugins show -n multitool-plugins multitool plugins show -n multitool-plugins --show-commit-only multitool plugins show -n multitool-plugins --show-dependencies-only multitool run examples -h
Updating
Install new plugins, update existing ones, and automatically install any Python dependencies declared in the Requires field of the plugin’s multitool-info.json file:
multitool plugins update
Update a specific plugin only:
multitool plugins update -n PLUGIN_NAME
The Requires field is where a plugin declares the Python packages it depends on. Any packages listed will be installed automatically when multitool plugins update is run. For example:
{
"Homepage": "",
"Requires": "click>=8.1.3 click-aliases>=1.0.1 click-option-group>=0.5.5 GitPython>=3.1.30",
"Maintainer": "",
"Description-en": ""
}
If one or more dependencies could not be installed automatically, multitool will report the failures and display the appropriate pip command to install the remaining packages manually. For example:
Updating plugins ---------------- Updating multitool-plugins... Done Updating test... Skipped Git pull (not a Git repository) Checking Python package dependencies ------------------------------------ Checked GitPython (GitPython>=3.1.30)... 3.1.50 installed Installing asdfasdfasdf... Failed Checked click-aliases (click-aliases>=1.0.1)... 1.0.1 installed Checked click-option-group (click-option-group>=0.5.5)... 0.5.5 installed Checked click (click>=8.1.3)... 8.1.8 installed Installing qwerqwerqwer>=8.1.3... Failed Checked tabulate (tabulate)... 0.9.0 installed The following dependencies could not be installed automatically: asdfasdfasdf qwerqwerqwer>=8.1.3 Try installing them manually: /usr/bin/python3 -m pip install asdfasdfasdf qwerqwerqwer>=8.1.3
You can also display a plugin’s declared dependencies at any time:
multitool plugins show --name PLUGIN_NAME --show-dependencies-only
Pruning
To uninstall a plugin repository, first remove it from the configured sources:
multitool plugins remove multitool-plugins
Then remove any local repositories that are no longer configured:
multitool plugins prune
Alternatively, running:
multitool plugins configure -a
automatically prunes repositories removed from the configuration.
Showing
Show configured repositories:
multitool plugins show
Or inspect a specific repository:
multitool plugins show -n PLUGIN_NAME --show-commit-only multitool plugins show -n PLUGIN_NAME --show-dependencies-only
Troubleshooting
If a plugin fails to install or load, check the log file:
~/.multitool/multitool.log
It contains installation, dependency, and Git-related errors.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file multitool-0.10.0.tar.gz.
File metadata
- Download URL: multitool-0.10.0.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a795727cf1f9f9202de67a234eeaaba0b49656c73b3ff4dcab8aa9ee561ea178
|
|
| MD5 |
accdc733f7f6f488327dc9db79cc9af8
|
|
| BLAKE2b-256 |
82e4630bd1c4f833b0d661961f30bf050021765b7b08bfccb0f91b68244dc399
|
File details
Details for the file multitool-0.10.0-py3-none-any.whl.
File metadata
- Download URL: multitool-0.10.0-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b137d88a0962a35085fbcd92e176c13a016881d1c7235e63a1eabf15eb8aa052
|
|
| MD5 |
bdfaa831a3ae87325670f706360d5cf6
|
|
| BLAKE2b-256 |
f3eb169080013d2a59dd40b226316f4000ef66853879ad79f0b719c05dd84c9c
|