mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 02:29:55 +02:00
docs: describe bug reports instead of telemetry
Update the site privacy policy (no telemetry/analytics, bug-report only, v1.2) and the README/apple README to reflect that only user-submitted bug reports remain.
This commit is contained in:
10
README.md
10
README.md
@@ -127,18 +127,18 @@ people, especially when using **Anyone with this transfer**.
|
|||||||
- Native SwiftUI apps on iOS, iPadOS, and macOS; Compose apps on Android,
|
- Native SwiftUI apps on iOS, iPadOS, and macOS; Compose apps on Android,
|
||||||
Windows, and Linux
|
Windows, and Linux
|
||||||
- Strict custom HTTPS relay profiles with safe apply and rollback
|
- Strict custom HTTPS relay profiles with safe apply and rollback
|
||||||
- Opt-in diagnostics with transfer contents, invitations, and file paths
|
- Optional user-submitted bug reports with transfer contents, invitations, and
|
||||||
excluded
|
file paths excluded
|
||||||
|
|
||||||
## Privacy by design
|
## Privacy by design
|
||||||
|
|
||||||
- **No hosted transfer copy.** VniDrop does not upload file contents to its
|
- **No hosted transfer copy.** VniDrop does not upload file contents to a bug-report
|
||||||
diagnostics service or a VniDrop storage bucket.
|
service or a VniDrop storage bucket.
|
||||||
- **Encrypted in transit.** Iroh connections are authenticated and encrypted
|
- **Encrypted in transit.** Iroh connections are authenticated and encrypted
|
||||||
end to end, including when a relay is needed.
|
end to end, including when a relay is needed.
|
||||||
- **Local control.** Transfer history and sharing state stay on the device.
|
- **Local control.** Transfer history and sharing state stay on the device.
|
||||||
- **Sensitive invitations.** An invitation can grant access, so it is
|
- **Sensitive invitations.** An invitation can grant access, so it is
|
||||||
deliberately excluded from product logs and diagnostics.
|
deliberately excluded from product logs and bug reports.
|
||||||
- **Explicit access.** Approval is required by default, and stopping a share
|
- **Explicit access.** Approval is required by default, and stopping a share
|
||||||
removes access immediately.
|
removes access immediately.
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ The Rust core (iroh network stack) links `SystemConfiguration`, `Security`, and
|
|||||||
Screens mirror the Compose UI in `shared/`. Two deliberate simplifications:
|
Screens mirror the Compose UI in `shared/`. Two deliberate simplifications:
|
||||||
- Empty-state Lottie animations are rendered as SF Symbols (no `lottie-ios`
|
- Empty-state Lottie animations are rendered as SF Symbols (no `lottie-ios`
|
||||||
dependency); swap in `lottie-ios` if exact-parity animation is required.
|
dependency); swap in `lottie-ios` if exact-parity animation is required.
|
||||||
- The full diagnostics/telemetry stack (`diagnostics/*`) is stubbed behind
|
- Bug reporting is stubbed behind `BugReportService` (`NoopBugReportService`) and
|
||||||
`BugReportService` / `DiagnosticsBuildConfig` and lands in a later phase; the UI
|
a real transport lands in a later phase. There is no telemetry or crash
|
||||||
hides the diagnostics toggle when not compiled in.
|
auto-reporting.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ import type { Metadata } from "next";
|
|||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Privacy policy",
|
title: "Privacy policy",
|
||||||
description:
|
description:
|
||||||
"How VniDrop handles transfers, local app data, optional diagnostics, bug reports, and website visits.",
|
"How VniDrop handles transfers, local app data, optional bug reports, and website visits.",
|
||||||
};
|
};
|
||||||
|
|
||||||
const sections = [
|
const sections = [
|
||||||
["scope", "Scope"],
|
["scope", "Scope"],
|
||||||
["transfers", "Transfers"],
|
["transfers", "Transfers"],
|
||||||
["local-data", "Local data"],
|
["local-data", "Local data"],
|
||||||
["diagnostics", "Diagnostics"],
|
["bug-reports", "Bug reports"],
|
||||||
["website", "Website"],
|
["website", "Website"],
|
||||||
["permissions", "Permissions"],
|
["permissions", "Permissions"],
|
||||||
["providers", "Service providers"],
|
["providers", "Service providers"],
|
||||||
@@ -29,9 +29,9 @@ export default function PrivacyPage() {
|
|||||||
<h1>Privacy Policy</h1>
|
<h1>Privacy Policy</h1>
|
||||||
<p>
|
<p>
|
||||||
This policy explains what moves between devices, what stays local, and what is sent
|
This policy explains what moves between devices, what stays local, and what is sent
|
||||||
only when you choose to share diagnostics or a bug report.
|
only when you choose to submit a bug report.
|
||||||
</p>
|
</p>
|
||||||
<p className="privacy-meta">Effective July 16, 2026 · Version 1.1</p>
|
<p className="privacy-meta">Effective August 2, 2026 · Version 1.2</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ export default function PrivacyPage() {
|
|||||||
<p>
|
<p>
|
||||||
VniDrop has no user accounts and does not upload your transfer to a VniDrop file
|
VniDrop has no user accounts and does not upload your transfer to a VniDrop file
|
||||||
store. Files travel over an authenticated, end-to-end encrypted connection.
|
store. Files travel over an authenticated, end-to-end encrypted connection.
|
||||||
Product diagnostics are opt-in; a bug report is sent only when you submit one.
|
VniDrop has no telemetry or analytics; a bug report is sent only when you submit one.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ export default function PrivacyPage() {
|
|||||||
<h2>Scope and who “VniDrop” means</h2>
|
<h2>Scope and who “VniDrop” means</h2>
|
||||||
<p>
|
<p>
|
||||||
This policy covers the official VniDrop website, the VniDrop applications for
|
This policy covers the official VniDrop website, the VniDrop applications for
|
||||||
Android, iOS, macOS, Windows, and Linux, and the diagnostics service configured by
|
Android, iOS, macOS, Windows, and Linux, and the bug-report service configured by
|
||||||
the official project. For an official release, VniDrop’s data controller is the
|
the official project. For an official release, VniDrop’s data controller is the
|
||||||
individual publisher named in the applicable app-store listing. In this policy,
|
individual publisher named in the applicable app-store listing. In this policy,
|
||||||
“VniDrop,” “we,” and “us” also include the maintainers acting on that publisher’s
|
“VniDrop,” “we,” and “us” also include the maintainers acting on that publisher’s
|
||||||
@@ -72,7 +72,7 @@ export default function PrivacyPage() {
|
|||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
VniDrop is open-source software. A build distributed or operated by someone else
|
VniDrop is open-source software. A build distributed or operated by someone else
|
||||||
may use different networking infrastructure, diagnostics settings, or website
|
may use different networking infrastructure, bug-report settings, or website
|
||||||
hosting. That distributor is responsible for explaining its own practices.
|
hosting. That distributor is responsible for explaining its own practices.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
@@ -117,9 +117,9 @@ export default function PrivacyPage() {
|
|||||||
<ul>
|
<ul>
|
||||||
<li>device identity and networking keys used to establish secure connections;</li>
|
<li>device identity and networking keys used to establish secure connections;</li>
|
||||||
<li>active shares, transfer history, receiver requests, progress, and status;</li>
|
<li>active shares, transfer history, receiver requests, progress, and status;</li>
|
||||||
<li>app preferences, including access and diagnostics choices;</li>
|
<li>app preferences, including access choices;</li>
|
||||||
<li>download destinations and locally managed transfer data; and</li>
|
<li>download destinations and locally managed transfer data; and</li>
|
||||||
<li>an anonymous installation identifier used only for diagnostics correlation.</li>
|
<li>an anonymous installation identifier used only for bug-report correlation.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
This information remains until you remove the relevant history, stop or delete a
|
This information remains until you remove the relevant history, stop or delete a
|
||||||
@@ -129,33 +129,27 @@ export default function PrivacyPage() {
|
|||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="diagnostics" className="policy-section">
|
<section id="bug-reports" className="policy-section">
|
||||||
<h2>Optional diagnostics and bug reports</h2>
|
<h2>Optional bug reports</h2>
|
||||||
<h3>Automatic product diagnostics</h3>
|
|
||||||
<p>
|
<p>
|
||||||
Official releases indicate in the app settings whether automatic product
|
VniDrop has no automatic telemetry, usage analytics, or crash auto-reporting.
|
||||||
diagnostics are included. When included, automatic usage events and crash reports
|
Nothing is sent to a bug-report service unless you explicitly submit a report.
|
||||||
are disabled until you enable “Share diagnostics.” If enabled, VniDrop may send an
|
|
||||||
anonymous installation ID, app version, platform, sparse event names and properties,
|
|
||||||
crash type and message, a redacted stack trace, timestamps, and recent in-app
|
|
||||||
breadcrumbs. You can turn this off at any time; doing so also removes pending local
|
|
||||||
crash reports.
|
|
||||||
</p>
|
</p>
|
||||||
<h3>User-submitted bug reports</h3>
|
<h3>User-submitted bug reports</h3>
|
||||||
<p>
|
<p>
|
||||||
A bug report is separate from the diagnostics toggle and is sent only when you press
|
A bug report is sent only when you press submit. It can contain what you say
|
||||||
submit. It can contain what you say happened, what you expected, reproduction steps,
|
happened, what you expected, reproduction steps, an optional contact email, app and
|
||||||
an optional contact email, app and platform versions, an anonymous installation ID,
|
platform versions, an anonymous installation ID, device name and model, operating
|
||||||
device name and model, operating system, network and battery information, recent
|
system, network and battery information, and optional recent logs. You can exclude
|
||||||
breadcrumbs, and optional recent logs. You can exclude logs before submitting.
|
logs before submitting.
|
||||||
</p>
|
</p>
|
||||||
<h3>Data deliberately excluded</h3>
|
<h3>Data deliberately excluded</h3>
|
||||||
<p>
|
<p>
|
||||||
Automatic diagnostics are designed to exclude transfer contents, invitations, and
|
Bug reports are designed to exclude transfer contents, invitations, and file paths.
|
||||||
file paths. Before diagnostic text or optional logs are sent, VniDrop applies rules
|
Before optional logs are sent, VniDrop applies rules intended to redact invitation
|
||||||
intended to redact invitation tokens, endpoint identifiers, absolute paths, file and
|
tokens, endpoint identifiers, absolute paths, file and content URIs, and platform
|
||||||
content URIs, and platform document identifiers. No redaction system is perfect, so
|
document identifiers. No redaction system is perfect, so review anything you type
|
||||||
review anything you type into a bug report and avoid including secrets.
|
into a bug report and avoid including secrets.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -223,7 +217,7 @@ export default function PrivacyPage() {
|
|||||||
<dt>Cloudflare</dt>
|
<dt>Cloudflare</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Proxies website requests and provides DNS, security, and abuse controls. When
|
Proxies website requests and provides DNS, security, and abuse controls. When
|
||||||
the optional diagnostics service is configured, it uses Cloudflare Workers, D1,
|
the optional bug-report service is configured, it uses Cloudflare Workers, D1,
|
||||||
and R2.
|
and R2.
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
@@ -300,11 +294,7 @@ export default function PrivacyPage() {
|
|||||||
<td>Until you delete them, clear app data, or uninstall</td>
|
<td>Until you delete them, clear app data, or uninstall</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Pending local crash reports</th>
|
<th scope="row">Server bug reports</th>
|
||||||
<td>Up to 30 days and 20 reports; deleted when diagnostics is disabled</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Server diagnostics and bug reports</th>
|
|
||||||
<td>The current project configuration is 90 days, with scheduled deletion</td>
|
<td>The current project configuration is 90 days, with scheduled deletion</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -317,7 +307,7 @@ export default function PrivacyPage() {
|
|||||||
<p>
|
<p>
|
||||||
Operational backups, provider logs, and deletion backlogs may persist briefly beyond
|
Operational backups, provider logs, and deletion backlogs may persist briefly beyond
|
||||||
the stated period where necessary for security, integrity, or legal obligations. If
|
the stated period where necessary for security, integrity, or legal obligations. If
|
||||||
the production diagnostics retention configuration changes, this policy should be
|
the production bug-report retention configuration changes, this policy should be
|
||||||
updated to match it.
|
updated to match it.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
@@ -325,7 +315,6 @@ export default function PrivacyPage() {
|
|||||||
<section id="choices" className="policy-section">
|
<section id="choices" className="policy-section">
|
||||||
<h2>Your choices and rights</h2>
|
<h2>Your choices and rights</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Enable or disable “Share diagnostics” in VniDrop settings.</li>
|
|
||||||
<li>
|
<li>
|
||||||
Submit a bug report only when you choose, omit contact information, and exclude
|
Submit a bug report only when you choose, omit contact information, and exclude
|
||||||
logs.
|
logs.
|
||||||
@@ -343,7 +332,7 @@ export default function PrivacyPage() {
|
|||||||
<p>
|
<p>
|
||||||
Depending on where you live, privacy law may provide rights to access, correct,
|
Depending on where you live, privacy law may provide rights to access, correct,
|
||||||
delete, restrict, or object to processing of personal information. Because VniDrop
|
delete, restrict, or object to processing of personal information. Because VniDrop
|
||||||
has no account and automatic diagnostics use an anonymous installation ID, we may
|
has no account and bug reports use an anonymous installation ID, we may
|
||||||
not be able to connect a server record to you without additional information. Use
|
not be able to connect a server record to you without additional information. Use
|
||||||
the contact method below and provide only what is needed to locate your submission.
|
the contact method below and provide only what is needed to locate your submission.
|
||||||
</p>
|
</p>
|
||||||
@@ -353,7 +342,7 @@ export default function PrivacyPage() {
|
|||||||
<h2>Security</h2>
|
<h2>Security</h2>
|
||||||
<p>
|
<p>
|
||||||
VniDrop uses authenticated end-to-end encrypted connections, content verification,
|
VniDrop uses authenticated end-to-end encrypted connections, content verification,
|
||||||
deny-by-default share access, bounded diagnostics payloads, redaction, and safe file
|
deny-by-default share access, bounded bug-report payloads, redaction, and safe file
|
||||||
publishing that avoids silently replacing an existing file. No system can guarantee
|
publishing that avoids silently replacing an existing file. No system can guarantee
|
||||||
absolute security. Keep invitations private, verify receiver names, keep your device
|
absolute security. Keep invitations private, verify receiver names, keep your device
|
||||||
updated, and stop sharing when a transfer is finished.
|
updated, and stop sharing when a transfer is finished.
|
||||||
|
|||||||
Reference in New Issue
Block a user