itqan-cli
Itqan Quranic Asset Manager
Install and pin Itqan Quranic assets (mushafs, tafsirs, translations, fonts) in your project, the way a package manager does for code.
You declare the assets you use and the versions you accept in itqan-assets.yaml. The CLI
resolves them against the Itqan registry, downloads them, and records the exact versions in
itqan-assets.lock, so teammates and CI get the same files.
Install
Requires Python 3.11+.
pipx install itqan-cli # or: uv tool install itqan-cli
This installs the itqan command; itqan-cli is the same command under the package's name.
Homebrew
On macOS (Apple Silicon or Intel) and Linux, without Python:
brew install itqan-community/tap/itqan
brew upgrade itqan # later, to update
Without Python
Each GitHub Release has a standalone
itqan executable for macOS (arm64, x86_64), Linux (x86_64, arm64) and Windows (x86_64), named
itqan-<version>-<os>-<arch> (.exe on Windows). Download yours, check it against
SHA256SUMS and put it on your PATH as itqan. For example, on an Apple Silicon Mac:
v=0.2.0 # the release you want
curl -fLO "https://github.com/Itqan-community/itqan-cli/releases/download/v$v/itqan-$v-macos-arm64"
curl -fLO "https://github.com/Itqan-community/itqan-cli/releases/download/v$v/SHA256SUMS"
shasum -a 256 --check --ignore-missing SHA256SUMS
chmod +x "itqan-$v-macos-arm64"
sudo mv "itqan-$v-macos-arm64" /usr/local/bin/itqan
The binaries aren't notarized by Apple, so macOS blocks one downloaded with a browser. Clear the
quarantine flag to allow it: xattr -d com.apple.quarantine /usr/local/bin/itqan. (curl
doesn't set the flag.) On Linux, use sha256sum --check --ignore-missing SHA256SUMS.
Quick start
itqan init # writes itqan-assets.yaml with a few real assets as examples
itqan browse # search the catalog and add more assets to it
itqan install # downloads them and writes itqan-assets.lock
Commit both itqan-assets.yaml and itqan-assets.lock. The downloaded files are reproducible
from the lockfile, so add the assets folder to .gitignore if you like.
The manifest
schema_version: 1
# Folder the assets are downloaded into, relative to this file (default: assets).
assets_dir: "public/quran"
assets:
# Source language of the asset.
tafsir-jalalayn:
version: "^2.0.0" # any 2.x from 2.0.0 on
# The same asset in English: its own entry, pointing at the asset.
tafsir-jalalayn-en:
asset: tafsir-jalalayn
language: en
version: "~1.3" # any 1.3.x
Each language of an asset has its own version history, so each gets its own entry, constraint,
lock entry and folder (public/quran/tafsir-jalalayn-en/). The full format is specified in
ASSET_MANIFEST.md.
Commands
| Command | What it does |
|---|---|
itqan init |
Create itqan-assets.yaml from the registry's catalog (commented examples when offline). --assets-dir, --force. |
itqan browse [QUERY] |
Search the registry's catalog and pick assets to add to itqan-assets.yaml (created if missing), then optionally install them. Type in the picker to filter further. --category, --no-interactive (print a table; the default outside a terminal), --json. |
itqan login |
Save your API key (create one at cms.itqan.dev/account/api-keys). The key is checked first, then saved for that registry, readable only by you. --api-key to pass it without the prompt. |
itqan logout |
Remove the saved key. |
itqan install |
Resolve, download and lock. Uses the lockfile's exact versions when it is up to date; --force re-resolves. |
itqan sync |
Same as install. |
itqan --version |
Print the CLI version. |
Configuration
| Option | Environment variable | Default |
|---|---|---|
--registry-url |
ITQAN_REGISTRY_URL |
https://api.cms.itqan.dev |
--api-key |
ITQAN_API_KEY |
the key saved by itqan login for the registry, if any |
itqan login saves keys in ~/.config/itqan/credentials (%APPDATA%\itqan on Windows; set
ITQAN_CONFIG_DIR to move it). --api-key and ITQAN_API_KEY, for CI, take precedence over it.
Assets that need access approval
Some publishers approve each developer before their assets can be downloaded. itqan browse
lists these too, marked request access, access pending or access rejected, with a link to
the asset's page on cms.itqan.dev where you request access. They can't be added until your
request is approved; then run itqan login with your API key and they show as granted.
itqan install says which assets in your manifest still need access, and where to ask.
Development
uv sync
uv run pytest
uv build
uv run --group binary pyinstaller --onefile --name itqan --copy-metadata itqan-cli --specpath build src/itqan_cli/__main__.py # dist/itqan
Releases are published from version tags; see RELEASING.md.
Metadata
Release files for itqan-cli 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| itqan_cli-0.1.1.tar.gz | 44.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| itqan_cli-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.7 kB
Release files / itqan_cli-0.1.1.tar.gz
| Download URL | itqan_cli-0.1.1.tar.gz |
|---|---|
| Size | 44.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
710eab018708144ab5d8c99733555e10064a37f0029ba413e88a9a212965e3b0
|
|
BLAKE2b-256 checksum How to use checksums |
f36d6520aafaa488c6057b28c71534db2a08fce89c7791951946286a3fca9abf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / itqan_cli-0.1.1-py3-none-any.whl
| Download URL | itqan_cli-0.1.1-py3-none-any.whl |
|---|---|
| Size | 34.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fd694c2fd602180ff0a5bceeddeb75ca710747444ac1d403e7768b6ad4dcd40e
|
|
BLAKE2b-256 checksum How to use checksums |
4dced265cd3f8a85fc728674ba6ccb689cd50b557f70d338842c6299daaa643b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency log