Skip to main content

CLI for QNAP NAS management

Project description

qnap

codecov

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:

  • info
  • status
  • volumes
  • shares
  • files ls
  • files stat

Highlights:

  • status --json uses numeric fields such as cpu_usage_pct, mem_total_mb, and temp_c.
  • volumes --json includes status_code, pool_id, and per-disk temp_c.
  • shares --json uses items_count as a number.
  • files ls --json uses size_bytes and modified_epoch.
  • files stat --json returns normalized fields plus a raw object 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.toml is written atomically.
  • On Unix, credentials.toml is 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qnap_cli-0.1.12.tar.gz (67.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

qnap_cli-0.1.12-py3-none-win_amd64.whl (2.9 MB view details)

Uploaded Python 3Windows x86-64

qnap_cli-0.1.12-py3-none-manylinux_2_28_x86_64.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

qnap_cli-0.1.12-py3-none-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

qnap_cli-0.1.12-py3-none-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

qnap_cli-0.1.12-py3-none-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file qnap_cli-0.1.12.tar.gz.

File metadata

  • Download URL: qnap_cli-0.1.12.tar.gz
  • Upload date:
  • Size: 67.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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

Hashes for qnap_cli-0.1.12.tar.gz
Algorithm Hash digest
SHA256 ca0408f9c95c285a26b7e17596fd37231a2a1d8f5ca390d3a7bc9d0db3ed0595
MD5 503ca9345c07f0f9648b16accfc89bbf
BLAKE2b-256 2a655d705b3452d8fa88fe295aa6c7fb19c5ce55a27c0bb4224cdb5f8281c809

See more details on using hashes here.

File details

Details for the file qnap_cli-0.1.12-py3-none-win_amd64.whl.

File metadata

  • Download URL: qnap_cli-0.1.12-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.9 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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

Hashes for qnap_cli-0.1.12-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 aa77aa05ebb45d4016040a2af454bbc2f834a9484205b54bc947238f4eb7a3ca
MD5 4759d1aa4933a160c65682bb3dc73ddf
BLAKE2b-256 cb74b161735199e4b341a3f23861c56f51f50446d45f6152003b06a44a7aa1bc

See more details on using hashes here.

File details

Details for the file qnap_cli-0.1.12-py3-none-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: qnap_cli-0.1.12-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.23 {"installer":{"name":"uv","version":"0.11.23","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

Hashes for qnap_cli-0.1.12-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ac637e167daec0da8e6a11f043bbb6e0ef6c67a800956c63a03132b26da6bd9f
MD5 b95177a9aea48c67bec3e5dbec8699d5
BLAKE2b-256 75aeef49f0db9631d9ecfa8491b9242b973c6e0739020ff402a88313fa4d56f5

See more details on using hashes here.

File details

Details for the file qnap_cli-0.1.12-py3-none-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: qnap_cli-0.1.12-py3-none-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 2.9 MB
  • Tags: Python 3, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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

Hashes for qnap_cli-0.1.12-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5c114c6ee010f10b1d031fc776b18e2fa79750bff793ad43f70e84350f34c4d0
MD5 cf61dd4fa5e70dcfdf5a59523af77590
BLAKE2b-256 87be3a8b85d0a1752ee63c35e99b1323dff2d8d210263812cfb61b60746b4bc6

See more details on using hashes here.

File details

Details for the file qnap_cli-0.1.12-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: qnap_cli-0.1.12-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.23 {"installer":{"name":"uv","version":"0.11.23","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

Hashes for qnap_cli-0.1.12-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 515715ed43190b288fac63026cc110f1266a571d8b74dbc2568e62957598f098
MD5 17e902c0229f9fbfcf18382cf172b0a2
BLAKE2b-256 fe8bf52734a159b8b645e77b91d97545e7393291c193c192f0d4d6f9ef6edbfa

See more details on using hashes here.

File details

Details for the file qnap_cli-0.1.12-py3-none-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: qnap_cli-0.1.12-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.23 {"installer":{"name":"uv","version":"0.11.23","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

Hashes for qnap_cli-0.1.12-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6f0509cd6c4dd0c3d7eb69875e5eba24b7c249e4bbcaaadcd936f116d44caba3
MD5 4e57a6daa90e2003670d52c180ab54c5
BLAKE2b-256 a89e6a3ae292f7f3770431fd19fac6e861113b2be3af6642e973208f0c5e87e3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page