{"_id":"@alexzeitler/lazydbx","name":"@alexzeitler/lazydbx","dist-tags":{"latest":"0.4.2"},"versions":{"0.4.2":{"name":"@alexzeitler/lazydbx","version":"0.4.2","type":"module","bin":{"lazydbx":"lazydbx"},"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"dependencies":{"@opentui/core":"^0.1.79","smol-toml":"^1.6.0"},"_id":"@alexzeitler/lazydbx@0.4.2","gitHead":"9e7c64b6c2420159f9289dc3c6fd36c7b1a488b6","description":"A terminal UI for Dropbox, built with [OpenTUI](https://opentui.com/) and Bun.","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-xR8zNo24JC7ZzHFKZkTGe43zOmcNsZopm738yyizx+kEAVzWKBFm3lNR9E/5YfsYI0vkWua+WmCvtAKOa3Ae7Q==","shasum":"57a7131c9ce3e1f6e54e85e7bcf70fb14d40b49a","tarball":"https://registry.npmjs.org/@alexzeitler/lazydbx/-/lazydbx-0.4.2.tgz","fileCount":10,"unpackedSize":52977,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCNxlcuGovV+ngUDz+5K3bqss8GMKyrJC3K8zGgvr1EZAIhAOFTime+xH8eqMjBNMEuqFhWZFmxmSqpIBIPt1c3VLbg"}]},"_npmUser":{"name":"alexzeitler","email":"alexander.zeitler@pdmlab.com"},"directories":{},"maintainers":[{"name":"alexzeitler","email":"alexander.zeitler@pdmlab.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lazydbx_0.4.2_1774141134332_0.8116832668769327"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-22T00:58:54.224Z","0.4.2":"2026-03-22T00:58:54.494Z","modified":"2026-03-22T00:58:54.747Z"},"maintainers":[{"name":"alexzeitler","email":"alexander.zeitler@pdmlab.com"}],"description":"A terminal UI for Dropbox, built with [OpenTUI](https://opentui.com/) and Bun.","readme":"# LazyDbx\n\nA terminal UI for Dropbox, built with [OpenTUI](https://opentui.com/) and Bun.\n\nBrowse your local and remote Dropbox files, manage sync, and share links — all from the terminal.\n\n### Local tab\n\n![Local tab — browse synced files](https://raw.githubusercontent.com/alexzeitler/LazyDropbox/master/assets/screenshot-local.png)\n\n### Server tab\n\n![Server tab — browse full Dropbox via API with sync status](https://raw.githubusercontent.com/alexzeitler/LazyDropbox/master/assets/screenshot-server.png)\n\n## Requirements\n\n- [Bun](https://bun.sh) v1+\n- Dropbox desktop client installed and running — either via `dropbox start` or as a [headless systemd service](https://alexanderzeitler.com/articles/run-dropbox-headless-as-a-service-without-user-session-login/)\n- A [Dropbox App](https://www.dropbox.com/developers/apps) for API access (optional, enables Server tab — see below)\n\n## Install\n\nGlobal install (no source checkout needed):\n\n```bash\nbun install -g github:alexzeitler/lazydbx\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/alexzeitler/lazydbx.git\ncd lazydbx\nbun install\n```\n\n## Setup\n\nEach user creates their own Dropbox App. The app credentials and tokens stay on your machine (`~/.config/lazydbx/config.json`) and all API requests go directly from your computer to Dropbox — no third-party servers involved.\n\n### 1. Create a Dropbox App\n\nGo to https://www.dropbox.com/developers/apps and create a new app:\n\n- **Access type**: Scoped access, Full Dropbox\n- **Permissions tab**: Enable `account_info.read`, `files.metadata.read`, and `sharing.write`\n\n### 2. Initialize config\n\n```bash\nlazydbx init\n```\n\nPrompts for your App Key and App Secret, saves them to `~/.config/lazydbx/config.json`.\n\n### 3. Authorize\n\n```bash\nlazydbx auth\n```\n\nOpens the Dropbox authorization URL. Copy the code from the Dropbox page and paste it back into the terminal. Tokens are saved automatically.\n\nTo re-authorize (e.g. after changing scopes):\n\n```bash\nlazydbx auth --force\n```\n\n### 4. Run\n\n```bash\nlazydbx\n```\n## Tabs\n\n### Local\n\nBrowse files and folders synced locally in `~/Dropbox`.\n\n### Server\n\nBrowse the full Dropbox folder structure via the API. The local `dropbox` CLI can only list files that are synced locally — excluded folders and their contents are invisible. The Server tab uses the Dropbox HTTP API to fetch the complete folder structure directly from the server, including folders and files that have never been synced to this machine. This requires a configured Dropbox App (see Setup). Without it, the Server tab falls back to the local filesystem + exclude list.\n\n## Keybindings\n\n### Global\n\n| Key   | Action                          |\n| ----- | ------------------------------- |\n| `Tab` | Switch between Local and Server |\n| `r`   | Refresh                         |\n| `q`   | Quit                            |\n\n### Local tab\n\n| Key     | Action                   |\n| ------- | ------------------------ |\n| `j`/`k` | Navigate up/down         |\n| `Enter` | Open folder or file      |\n| `u`     | Go up one directory      |\n| `e`     | Exclude folder from sync |\n| `s`     | Get share link           |\n| `y`     | Copy last share link     |\n| `f`     | Show file sync status    |\n\n### Server tab\n\n| Key     | Action                          |\n| ------- | ------------------------------- |\n| `j`/`k` | Navigate up/down                |\n| `Enter` | Open folder (or file if synced) |\n| `u`     | Go up one directory             |\n| `Space` | Toggle sync (exclude/include)   |\n| `a`     | Show auth status                |\n\n> **Note**: `dropbox exclude` only works at the folder level. Toggling sync on a file toggles the parent excluded folder.\n\n## Config\n\nStored at `~/.config/lazydbx/config.json`:\n\n```json\n{\n  \"appKey\": \"your-app-key\",\n  \"appSecret\": \"your-app-secret\"\n}\n```\n\nToken fields (`accessToken`, `refreshToken`, `expiresAt`) are managed automatically by the auth flow.\n","readmeFilename":"README.md","_rev":"1-48fdcda60b3b838ea5753cdab9000da8"}