Skip to main content

Cross-platform command-line client for dShare — type-to-share files and text between devices.

Project description

dshare-cli

A cross-platform command-line client for dShare — the same 10-second "public share" flow as typing divya / moti on the web UI, from a terminal on Linux, macOS, or Windows.

It talks to your dShare server's existing public endpoints (/upload/, /download/, /api/share/clear/) — no server changes required, and it doesn't touch private/login-based sharing.

Heads up: with no setup, dshare send/receive use the shared public slot on https://dshare.me — the same one anonymous visitors to the site get. Anything you send there is visible to (and overwritable by) anyone. Run dshare config https://your-own-host to use your own private deployment instead. See Setup.

Install

Requires Python 3.9+ (any OS). pipx is recommended since it keeps the CLI's dependencies isolated:

pipx install dshare-cli

Or with plain pip:

pip install dshare-cli

For local development (from a clone of this repo):

cd cli
pip install -e .

All of these work identically on Windows (PowerShell/cmd), macOS, and Linux — the CLI has no shell scripts and no OS-specific setup steps.

Setup

By default the CLI talks to https://dshare.me, so dshare send/receive work with no setup at all. If you're self-hosting your own dShare instance, point the CLI at it once:

dshare config https://your-dshare-host.example.com

This is saved to a per-OS config file (~/.config/dshare/config.json on Linux, ~/Library/Application Support/dshare/config.json on macOS, %APPDATA%\dshare\config.json on Windows). You can override it per-command with --server, or via the DSHARE_SERVER environment variable — handy for CI or scripting.

Usage

Upload a file (same as typing divya and picking a file):

dshare send report.pdf

Upload text (same as /paste):

dshare send --text "some text to move between devices"
echo "some text" | dshare send      # piping works too

Download the latest shared file or text (same as typing moti):

dshare receive
  • If the slot holds a file, it's saved to the current directory (or -o/--output).
  • If the slot holds text, it's printed to stdout — so dshare receive > out.txt or dshare receive | pbcopy / | clip works.
  • If stdout isn't a terminal, file bytes stream straight to stdout too (like curl).

File transfers (send <file> and receive when the slot holds a file) show a live tqdm progress bar — filename, percentage, size, and transfer rate — streamed to stderr so it never corrupts piped stdout output. It's automatically hidden when stderr isn't a terminal (redirected to a file, CI logs, etc.).

Clear the slot (same as /clear):

dshare clear

Check what server you're pointed at and whether it's reachable:

dshare status

divya and moti also work as aliases for send/receive, matching the web UI's keywords:

dshare divya report.pdf
dshare moti

Notes

  • This CLI only uses the public lane (the same one anonymous visitors to the web UI get) — it does not log in or touch private per-user slots.
  • Self-signed/local server? Pass --insecure to skip TLS verification.
  • Exit codes: 0 success, 1 error, 2 the slot was empty on receive.
  • On failure, error messages include a short excerpt of the server's response body (not just the HTTP status) to make unexpected errors diagnosable.
  • File uploads/downloads are streamed, not buffered fully in memory, so large files don't balloon RAM usage.

Releasing (maintainers)

Publishing to PyPI is fully automated via GitHub Actions + PyPI Trusted Publishing (OIDC) — no API tokens stored anywhere. The version number is derived from the git tag itself (via hatch-vcs), so there's nothing to bump by hand. To ship a release:

git tag cli-vX.Y.Z   # e.g. cli-v0.1.3
git push origin cli-vX.Y.Z

That triggers .github/workflows/publish-cli.yml, which builds the package and publishes dshare-cli==X.Y.Z to PyPI. The pypi GitHub Environment has no required-reviewer gate, so a tag push publishes immediately — double-check the tag before pushing it. Current releases: PyPI · git tags.

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

dshare_cli-0.1.3.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

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

dshare_cli-0.1.3-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file dshare_cli-0.1.3.tar.gz.

File metadata

  • Download URL: dshare_cli-0.1.3.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for dshare_cli-0.1.3.tar.gz
Algorithm Hash digest
SHA256 5368fb3955895a9fee349e3247736c331a9f78d0c8e61e55a3fe0c17276dbf78
MD5 fe7696026175c448024e290d05cfec05
BLAKE2b-256 f4263a4678ce97aaca2a516e5f3d9384d3be8c90543babbd41d933c08209b9d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for dshare_cli-0.1.3.tar.gz:

Publisher: publish-cli.yml on motiedivya/dshare

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dshare_cli-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: dshare_cli-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for dshare_cli-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1878833920a619960cac6b5228eda479841df903ca10b4d9e67962284f35c2f4
MD5 d6363d7cc5fa06ac07cff5d49a5e351f
BLAKE2b-256 f2a63a100ccb7e890952a79f4b1464b9b7228bbe43415428924b75a7ec80431e

See more details on using hashes here.

Provenance

The following attestation bundles were made for dshare_cli-0.1.3-py3-none-any.whl:

Publisher: publish-cli.yml on motiedivya/dshare

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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