CLI for QNAP NAS management
Project description
qnap
A CLI for QNAP NAS management. It is designed for both interactive use and automation: human-friendly tables by default, stable JSON contracts on inspection commands, and a schema command for agent introspection.
Supported platforms: Linux and macOS.
Installation
cargo install qnap
Or build from source:
git clone https://github.com/rvben/qnap-cli
cd qnap-cli
make install
Quick Start
# Save connection settings and password
qnap login --host nas.local --username admin
# Inspect the NAS
qnap info
qnap status
qnap volumes
qnap shares
qnap files ls /Public
# Structured output for automation
qnap status --json
qnap files stat /Public/example.txt --json
Commands
| Command | Description |
|---|---|
login |
Save credentials and verify connectivity |
info |
Model, firmware, hostname, serial, uptime |
status |
CPU, RAM, temperature, uptime |
volumes |
Storage volumes and installed disks |
shares |
Shared folders |
network |
Network adapters, IPs, MACs, DNS (--json) |
config |
Show saved host, username, TLS settings, and file paths (--json) |
files ls <PATH> |
List files and directories (--all, -r recursive, --json) |
files stat <PATH> |
Normalized metadata plus raw QNAP fields (--json) |
files find <PATH> <PATTERN> |
Recursive glob search (*.txt, backup*) (--json) |
files mkdir <PATH> |
Create a directory |
files rm <PATH>... |
Delete one or more files or directories |
files mv <SRC> <DST> |
Move or rename a file or directory |
files cp <SRC> <DST> |
Copy a file or directory (--overwrite) |
files upload <LOCAL> <REMOTE_DIR> |
Upload a file or directory (--overwrite, -r recursive) |
files download <REMOTE> [LOCAL] |
Download a file or directory (-r recursive) |
dump [DIR] |
Save raw API responses for debugging |
schema |
Print full command schema |
completions <SHELL> |
Print shell completion script (bash, zsh, fish) |
Global Flags
These flags work on every authenticated command, including login.
| Flag | Description |
|---|---|
--host <HOST> |
Override the NAS host for one command. HTTPS only. |
--username <USERNAME> |
Override the username for one command. |
--insecure |
Skip TLS certificate verification for one command. |
--secure |
Force TLS certificate verification for one command. |
--password-stdin |
Read the password from stdin. |
Examples:
printf '%s\n' 'secret-password' | qnap --password-stdin info
qnap --host https://nas.local --username admin status
qnap --secure volumes --json
Authentication
qnap login [--host <HOST>] [--username <USERNAME>] [--insecure | --secure]
qnap login verifies the credentials before saving anything. Host, username, and the saved TLS verification preference are stored in config.toml. The password is stored separately in credentials.toml.
The CLI requires HTTPS. Plain http:// targets are rejected. If your NAS uses a self-signed certificate, use --insecure or QNAP_INSECURE=1 explicitly.
If you do not want local password persistence, skip qnap login and provide QNAP_HOST, QNAP_USERNAME, and QNAP_PASSWORD directly when running commands.
JSON Output
The following commands support --json with stable, typed output:
infostatusvolumessharesfiles lsfiles stat
Highlights:
status --jsonuses numeric fields such ascpu_usage_pct,mem_total_mb, andtemp_c.volumes --jsonincludesstatus_code,pool_id, and per-disktemp_c.shares --jsonusesitems_countas a number.files ls --jsonusessize_bytesandmodified_epoch.files stat --jsonreturns normalized fields plus arawobject for unnormalized QNAP metadata.
Use qnap schema for the full machine-readable command and output contract.
Environment Variables
Environment variables override local files.
| Variable | Description |
|---|---|
QNAP_HOST |
NAS host, for example https://nas.local or nas.local |
QNAP_USERNAME |
Username |
QNAP_PASSWORD |
Password |
QNAP_INSECURE |
1/true/yes to skip TLS verification, 0/false/no to force verification |
NO_COLOR |
Disable colored output |
Stored Files
config.toml stores host, username, and TLS verification preference. credentials.toml stores the password separately in plaintext on the local machine.
| Platform | Config file | Credentials file |
|---|---|---|
| macOS | ~/Library/Application Support/qnap/config.toml |
~/Library/Application Support/qnap/credentials.toml |
| Linux | ~/.config/qnap/config.toml |
~/.config/qnap/credentials.toml |
Security
- Passwords are never accepted as CLI flags.
- HTTPS is required for NAS connections.
- TLS verification is enabled by default.
credentials.tomlis written atomically.- On Unix,
credentials.tomlis restricted to owner-only (0600) permissions. - On Unix, the config directory is tightened to owner-only (
0700) permissions. - Symlink and non-regular-file credential targets are rejected.
- If you do not want local password persistence, use environment variables or
--password-stdin.
Shell Completions
Generate and install completions for your shell:
# Zsh — add to ~/.zshrc or drop in a $fpath directory
qnap completions zsh > ~/.zfunc/_qnap
echo 'fpath=(~/.zfunc $fpath)' >> ~/.zshrc
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
# Bash
qnap completions bash > /etc/bash_completion.d/qnap
# or for a user install:
qnap completions bash > ~/.local/share/bash-completion/completions/qnap
# Fish
qnap completions fish > ~/.config/fish/completions/qnap.fish
Compatibility
Tested against QTS 5.1.x and 5.2.x. The core authentication and file manager APIs have been stable since QTS 4.3, but qnap dump is the recommended way to capture compatibility issues from older or unusual firmware builds.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 qnap_cli-0.1.10.tar.gz.
File metadata
- Download URL: qnap_cli-0.1.10.tar.gz
- Upload date:
- Size: 60.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33c7caea4b665474443ab7940de9a84919ac6229ffe7f5f56c6d8241ebb271d3
|
|
| MD5 |
fb5a0942c14094ef9751c530b6213f6a
|
|
| BLAKE2b-256 |
a68758017d0dce8db5417faa1417477855d63b00cc77e551ca4523c73bd39212
|
File details
Details for the file qnap_cli-0.1.10-py3-none-win_amd64.whl.
File metadata
- Download URL: qnap_cli-0.1.10-py3-none-win_amd64.whl
- Upload date:
- Size: 2.8 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c85edfdf3076992f307bed00cdf9a97663d1b2a0bb879cb2c11b783e5faabd29
|
|
| MD5 |
b3a1275c8162f96a3575bbd865f21a6d
|
|
| BLAKE2b-256 |
4979624aa07d446f1eb893d56f91daf79318d6c20f568996b5a1932322f977fa
|
File details
Details for the file qnap_cli-0.1.10-py3-none-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: qnap_cli-0.1.10-py3-none-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 3.0 MB
- Tags: Python 3, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fe65a27ff9176ffc204e0ac933063015ddb2956e1529b6e6ec4062bba08ee04
|
|
| MD5 |
e9c34ef006b76373d42059fe75e9189d
|
|
| BLAKE2b-256 |
bc92936266dee711f487f1ceef00a0b349814e122456c0bab499732382bbacb4
|
File details
Details for the file qnap_cli-0.1.10-py3-none-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: qnap_cli-0.1.10-py3-none-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.8 MB
- Tags: Python 3, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ee648b61864f909147a9731785ee59374e8a22c85fa00fab4a1e26ee40fdc66
|
|
| MD5 |
03a29b23d11a957bc6773d151fb34126
|
|
| BLAKE2b-256 |
2ac1f2e6775221cacb7c1073170f8d20d5c915311166bf722085e553f15dbc36
|
File details
Details for the file qnap_cli-0.1.10-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: qnap_cli-0.1.10-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.8 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4041e4001e08eea195f5cfcfbeab36ae5be21eca6a2383079643d2781ebce3f3
|
|
| MD5 |
d73227cce88317377b7b28eda32a4dce
|
|
| BLAKE2b-256 |
f4e956fff585562a53e930453b9666d21bac88ac2bd0a7f56ec6e0505e5e63d2
|
File details
Details for the file qnap_cli-0.1.10-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: qnap_cli-0.1.10-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 2.9 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cc84a754a18cf9487fb226bfb1eafc6d71bd532a518941ae6164120e5cbadb8
|
|
| MD5 |
a5bcf1c591917eb44294bcfe2b54dd1f
|
|
| BLAKE2b-256 |
6cc85f16fb50bdb9d6caa102492348e418a96e6f2db0a63e8dd3262a22b56c65
|