Skip to main content

nextcloud-cli

nxcloud is a modern command-line client for self-hosted Nextcloud. Manage files, notes, calendar events, tasks, and contacts from the terminal — over HTTPS only, no desktop sync client required.

It speaks WebDAV via webdav4, CalDAV via caldav, CardDAV via raw httpx + vobject, and the Nextcloud Notes REST API via httpx. Credentials are stored in your OS keyring.

Features

  • Files — list, upload, download, move, delete, mkdir, recursive search
  • Notes — create, read, update, delete (Nextcloud Notes app required)
  • Calendar — list calendars, list/create/edit/delete events, with attendees and organizer
  • Tasks — list/create/complete/edit/delete VTODO items
  • Contacts — list address books, list/get/export vCards
  • Login wizard that validates the credentials with a PROPFIND and stores the password in the OS keyring (with a chmod 0600 JSON fallback)
  • JSON output everywhere so you can pipe into jq and friends
  • -h / --help available on every command and subcommand

Installation

pip install nextcloud-cli

Or from source:

git clone https://github.com/AlexMili/nextcloud-cli
cd nextcloud-cli
pip install -e .

The installed binary is nxcloud.

Login

Create a Nextcloud app password first (Settings → Security → App passwords), then:

nxcloud login

You'll only be prompted for what's missing. Values are resolved in this order:

  1. CLI flag (--url, --username, --password, --timezone)
  2. Environment variable (NEXTCLOUD_URL, NEXTCLOUD_USER, NEXTCLOUD_TOKEN, NEXTCLOUD_TIMEZONE)
  3. Interactive prompt

So all of these work:

# Fully interactive
nxcloud login

# Mixed: URL from env, prompt for the rest
NEXTCLOUD_URL=https://nc.example.com nxcloud login

# Fully non-interactive (no prompts)
nxcloud login \
    --url https://nc.example.com \
    --username alice \
    --password 'app-pass-here' \
    --timezone Europe/Paris

You can also skip persistence entirely and rely on environment variables for every command:

export NEXTCLOUD_URL=https://nc.example.com
export NEXTCLOUD_USER=alice
export NEXTCLOUD_TOKEN=app-pass-here
export NEXTCLOUD_TIMEZONE=Europe/Paris
nxcloud check

To remove stored credentials:

nxcloud logout

Usage

Every command emits JSON on stdout for easy scripting. Use -h on any command or subcommand for built-in help.

Connectivity check

nxcloud check

Files

nxcloud files list --path /Documents
nxcloud files upload --local ./report.pdf --remote /Documents/report.pdf
nxcloud files download --remote /Documents/report.pdf --local ./report.pdf
nxcloud files move --src /tmp/a.txt --dst /archive/a.txt
nxcloud files mkdir --path /new-folder
nxcloud files delete --path /old.txt
nxcloud files search --query report --limit 20    # OCS unified search (server-side)

Notes (requires the Nextcloud Notes app)

nxcloud notes list
nxcloud notes list --category Work              # notes in the "Work" folder
nxcloud notes list --category "Work/Projects"   # nested folder (subdirectory)
nxcloud notes list --category=""                # only notes at the Notes/ root (no category)
nxcloud notes list --limit 10                   # cap the number of notes fetched
nxcloud notes get --id 941
nxcloud notes create --title "Meeting" --content "Q3 roadmap." --category Work
nxcloud notes edit --id 941 --title "Updated"
nxcloud notes delete --id 941

In the Nextcloud Notes app, category = folder: notes are stored as Markdown files under Notes/<category>/, and / separates subdirectories. --category matches exactly — --category Work does not include Work/Projects. Use --category="" to list only notes at the root.

Calendar

List calendars and events:

nxcloud calendar list
nxcloud calendar events --calendar Personal --start 2026-05-01 --end 2026-05-31

Date-range shortcuts (server-side filtering, in your configured timezone):

nxcloud calendar events --calendar Personal --today
nxcloud calendar events --calendar Personal --this-week     # current Mon → Mon
nxcloud calendar events --calendar Personal --next-week     # upcoming Mon → Mon
nxcloud calendar events --calendar Personal --this-month    # 1st → 1st of next month
nxcloud calendar events --calendar Personal --next-month
nxcloud calendar events --calendar Personal --next 7d       # also: 48h, 2w

Shortcuts are mutually exclusive with each other and with --start/--end.

Create an event with attendees and an organizer:

nxcloud calendar create \
    --calendar Work \
    --summary "Project sync" \
    --start 2026-07-01T14:00:00 \
    --end   2026-07-01T15:00:00 \
    --location "Room 4B" \
    --description "Quarterly review" \
    --organizer "Alice <alice@example.com>" \
    --attendee "Bob <bob@example.com>" \
    --attendee carol@example.com

--attendee is repeatable and accepts either a bare email or the Name <email> form.

Edit an event (including adding/removing invitees):

nxcloud calendar edit --calendar Work --uid <uid> --summary "New title"
nxcloud calendar edit --calendar Work --uid <uid> \
    --add-attendee "Dan <dan@example.com>" \
    --remove-attendee carol@example.com

Delete an event:

nxcloud calendar delete --calendar Work --uid <uid>

Search events server-side (CalDAV text-match). Combine with date filters:

nxcloud calendar search --calendar Work --query standup
nxcloud calendar search --calendar Work --query roadmap --in description
nxcloud calendar search --calendar Work --query "1:1" --this-week
# --in: summary | description | location | category | all  (default: summary)

Tasks (VTODO)

nxcloud tasks list
nxcloud tasks list --include-completed
nxcloud tasks create --summary "Review PR" --due 2026-07-05 --priority 1
nxcloud tasks complete --uid <uid>
nxcloud tasks edit --uid <uid> --summary "Updated summary"
nxcloud tasks delete --uid <uid>
nxcloud tasks search --query "deploy" --include-completed
nxcloud tasks search --query "fix" --in description --list Work
# --in: summary | description | category | all  (default: summary)

Contacts

nxcloud contacts list
nxcloud contacts cards --addressbook contacts
nxcloud contacts get --addressbook contacts --uid <uid>
nxcloud contacts export --addressbook contacts --uid <uid> --local ./alice.vcf
nxcloud contacts search --addressbook contacts --query alex
nxcloud contacts search --addressbook contacts --query "@example.com" --in email
# --in: name | email | phone | all  (default: all)

Configuration files

File Purpose Permissions
~/.config/nextcloud-cli/config.json URL, username, timezone 0600
OS keyring (entry nextcloud-cli) App password OS-managed
~/.config/nextcloud-cli/secrets.json Password fallback when no keyring backend is available 0600

Override the config directory with the NEXTCLOUD_CLI_HOME environment variable.

Help

-h and --help are wired up at every level:

nxcloud --help
nxcloud calendar --help
nxcloud calendar create --help

License

MIT

Metadata

Release files for nextcloud-cli 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nextcloud-cli 0.1.0
File Size Uploaded
nextcloud_cli-0.1.0.tar.gz 21.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nextcloud-cli 0.1.0
File Interpreter ABI Platform
nextcloud_cli-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 49.0 kB

Release files / nextcloud_cli-0.1.0.tar.gz

Download URL nextcloud_cli-0.1.0.tar.gz
Size 21.5 kB
Tags Source
SHA-256 checksum
How to use checksums
1ae7ff5f99670eab899245cd155e46cd6d38a361000ca2819f42dd2dea555e13
BLAKE2b-256 checksum
How to use checksums
33b31dc9cbc054389ff7bda3f721b212af8579f578bae8618cb2c3964120af6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 May 7, 2026.

Transparency log

Release files / nextcloud_cli-0.1.0-py3-none-any.whl

Download URL nextcloud_cli-0.1.0-py3-none-any.whl
Size 27.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
12226df19207408634cd1af3bf360d117f4bf6a480396fdbf47c07bb97f7976e
BLAKE2b-256 checksum
How to use checksums
4e21d2e6385f0d54e6ee44d4a9361385ef667fa8366460cc5d88e0eafcac4f1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 May 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page