Repository navigation
List every way DuckLocal reaches the network, and test the local path stays off it - #76
Merged
Merged
Conversation
… stays off it Someone asked in #29 what guarantees that their data stays local. "It's open source" is true but makes them do the work. This is the evidence. docs/network-and-privacy.md lists each outbound path: what starts it, whether it is on by default, where it goes, what it sends and how to stop it. It says where the boundaries are too, including one worth knowing: with httpfs installed, a .dash file someone sends can make a network request when it is opened. scripts/check-offline.sh runs the CLI and the window over local files under strace on Linux CI, and fails on a connection beyond this machine. A test fails when a new network API appears in the source until it is listed and documented, and two more pin that the base map and the launch update check start off. Turning on the base map or the launch check now says where requests will go, and the S3 dialog and the extension Install button say they download. Part of #68. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The search skips a file's test module, so the read-only gate's list of statements a dashboard may not run was never found there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… none Its first run reported no attempts at all, which is what it would also report if it could not see any. It now makes a real attempt under the same tracer and fails unless that is caught, and that loopback is not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #64. Closes #68, except for the decision under "Your call".
Why
Someone asked in #29 what guarantees their data stays local. "It's open source" is true but leaves them to do the work. This gives them evidence they can check.
What
docs/network-and-privacy.mdlists every outbound path: what starts it, whether it's on by default, where it goes, what it sends, and how to stop it. It also covers what's stored locally, the threat boundaries, how to verify a download, how to build from source, and what a change adding a new path must do.scripts/check-offline.sh, on Linux CI, runs the CLI and the window over local files understraceand fails on any connection beyond this machine. Before that it runs a control: it makes a real connection attempt and fails unless its filter catches it, because "0 attempts" is also what a blind check would report. Latest result:0 inet attempts, control caught.tests/network_paths.rsfails when a network API appears in the source without being listed, and when a telemetry or second HTTP client becomes a direct dependency. It's a text search, so a tripwire rather than a proof.Tests also pin that the base map and the launch update check start off.
Notices: turning on the base map or the launch check now says where requests go. The S3 dialog and the extension Install button say they download.
What I found
ureq, used for updates, tiles and S3.Cargo.lockalso listshyper,quinnand areqwestfork, but those are only forgpui-kit-assets' wasm build. I confirmed this withcargo treefor Windows and Linux; on macOS I only read the manifest, becausecargo treecouldn't resolve that target offline here..dashfile can reach the network when opened, ifhttpfsis installed. Its SQL can only read, butread_csv('https://...')is a read, and the URL can carry data from other tables. It can also read any local file you can. This is documented, not changed.Your call
Should opening an untrusted
.dashwarn first? The issue asks for a notice "where a workflow first enables an external data source". The notices here cover S3, extensions, tiles and updates, but not a dashboard that names a remote address. Fixing that is a product decision (warn on open? refuse remote addresses until confirmed?), so I've left it. It's the main gap I'd close next.Updater trust on Windows and Linux. The hash comes from the same server as the package, so it catches corruption but not a compromised server, and those packages aren't signed. The page says so plainly. Whether to sign them is your call.
The reply to this is a cool tool but #29. I haven't posted anything there. Suggested text once this is merged:
Limits
dl.ducklocal.app,extensions.duckdb.org) come from the repo's scripts and my own knowledge, so please correct anything wrong.Testing
check-offline.shpasses on Linux CI.cargo test --locked: 460 unit, 4 network-path, CLI and LSP tests pass after mergingmain, and clippy and fmt are clean.remote::tests::a_missing_or_stale_endpoint_means_no_windowfailed once in about 10 runs here and passes otherwise. I think a parallel test grabs the freed port, but haven't proven it. It predates this PR, so I left it.🤖 Generated with Claude Code