cwdio has no telemetry and no analytics SDK. It does not contact any server to run, and the handful of network calls it can make are listed below in full. Your files, file names, search queries and terminal history never leave your machine. This page is the app’s side of the story; the website’s own, shorter list is on the privacy page.
Every network call the app can make
| When | Where | Why | Only if |
|---|---|---|---|
| About a minute after launch, then every 4 hours | updates.cwdio.com (cwdio’s update feed on Cloudflare R2) | The installer build checks for and downloads updates | Installed with the installer (never the portable build, never in development) |
| About 30 s after launch, then every 4 hours (portable build); on demand for Help ▸ Check for updates (any build) | github.com/cwdio/cwdio/releases/latest (a small version.json) | The portable build learns a newer version exists and shows a passive notice; the installer build only when you ask, since it updates itself | Packaged build |
| About 30 s after launch | The update feed’s min-version.json | The kill-switch: if a release must be retired, prompt to update. Strictly fail-open — unreachable means nothing happens | Packaged build |
| When you ask | Your AI provider’s endpoint — OpenAI-compatible, which includes a fully local Ollama or LM Studio | The AI assistant and the semantic index | You configured a provider |
| When you connect | The SFTP / FTP / FTPS servers you add | Remote browsing and the SSH terminal | You added a connection |
| When you click Report an issue or Send report | Your browser opens a pre-filled GitHub issue | Bug and crash reports | You choose to; nothing is sent automatically |
There is no licence server: a licence key is a signed token verified on your machine, and registration never becomes a launch-time check. There is no usage ping, no “anonymous statistics”, nothing to opt out of.
What stays on your machine, and how it is kept
- Server credentials are session-only by default — held in memory, never written. If you tick
Remember, they are stored only under the operating system’s own encryption (Electron
safeStorage, which on Windows rests on the OS credential protection) and never in plain text. If that encryption is not available, cwdio refuses to save them rather than fall back. - SSH host keys are trusted on first use: the SHA-256 fingerprint is recorded, and a changed key hard-fails before any credential is sent — the classic protection against a server that is not who it was.
- The AI provider key lives in the same kind of encrypted vault. The AI tool loop runs in a background process, not in the window that renders web content.
- Crash reports are opt-in and redacted before you ever see them: your home directory becomes
~, user-profile path segments become<user>, and email addresses are removed from the log tail. The report is a GitHub issue you can read before you submit it. - Settings and logs live under
%AppData%\@cwdio\desktop. The logs are size-bounded.
Nothing is destroyed quietly
- Delete goes to the Recycle Bin by default, after a confirmation you can turn off. Permanent delete (Shift+Delete) always asks with a stronger, danger-styled dialog whose default button is Cancel.
- Overwrites are stashed, not destroyed. When a copy, move or save replaces a file, the previous bytes are kept and Ctrl+Z brings them back.
- Undo covers a whole batch — a copy, a move, a rename of hundreds of files, a new folder, an overwrite, and anything the AI assistant did. Deletes are not on the undo stack; they went to the Recycle Bin, where Windows can restore them.
- The transfer queue is journaled. An operation interrupted by a crash or a dropped drive can resume instead of leaving a half-copied tree.
- The AI never changes a file without asking. Read tools run freely; anything that would modify a file becomes a proposal you confirm, and it executes through the same queue, trash and undo as a manual action.
Permissions
- Per-user install, no administrator prompt. cwdio runs with exactly the rights your Windows account already has — no more — and never asks for elevation.
- Open filesystem by default, because it is your machine and your files. Setting the environment
variable
CWDIO_SANDBOX_ROOTlocks every navigation and every operation to one root, enforced on resolved paths so a symlink or junction planted inside the root cannot lead out of it. Tests run that way; a locked-down deployment can too. - The Explorer right-click entry is registered per user, in your own registry hive, and can be switched off under Tools ▸ Explorer integration.
Hardening of the shipped binary
cwdio is an Electron application and treats that as a responsibility:
- The window that renders the interface runs with context isolation and the sandbox on, Node
integration off,
<webview>off, and developer tools disabled in the packaged build. - Every web permission is denied — camera, microphone, geolocation, notifications, clipboard-read and the rest — because the app needs none of them.
- Navigation is blocked and only
http:,https:andmailto:links may ever be handed to the operating system. A document you merely previewed can never launch a local protocol handler. - A strict Content Security Policy without
unsafe-eval— the Markdown, diagram and code-editor components are all eval-free, and the end-to-end suite runs under the real policy to prove it. - Electron fuses are flipped in the packaged binary: the shipped exe cannot be run as a general-purpose Node runtime, cannot take Node command-line or inspector options, loads only its own bundle, and encrypts cookies. No source maps are shipped.
- This posture is guarded by a test, because fuses apply only at package time and a refactor could silently undo one.
- No obfuscation, deliberately. An Electron bundle cannot be hidden from a determined reader and pretending otherwise buys nothing; what is worth having is tamper-evidence, which is what signing and ASAR integrity provide — see the next section.
Code signing: where it stands
cwdio is code-signed with an individual-validated certificate issued by SSL.com to Ihor Melnyk. Every release is signed by the build workflow — the app, the installer and the helper executables alike — and the private key never leaves the certificate authority’s hardware, so it cannot be taken from a build machine.
Signing is not the same as being trusted instantly. Windows SmartScreen weighs the publisher and how many people have run a given file, so a fresh release can still show “Windows protected your PC” until it has been installed enough times. The difference signing makes is what More info reveals: a verified publisher rather than an unknown one, and reputation that now accumulates across releases instead of resetting with every build.
Every release publishes SHA256SUMS.txt, produced by the same workflow that builds the binaries. Verify
a download with Get-FileHash <file> -Algorithm SHA256 in PowerShell and compare.
Reporting a security issue
Email hi@cwdio.com. Please keep anything exploitable out of the public issue tracker until it is fixed; a private report gets a fix and a credit.
Related
- Privacy policy — what the website collects (very little) and why.
- Install and update — the update mechanics in full.
- Undo and the safety net · Remote servers · The AI assistant