Privacy policy
This policy explains how Synous handles data when you create a tunnel, visit a public route, or use the dashboard.
Summary
- Synous uses GitHub public keys, browser-approved SSH connections and key associations, and single-use credentials to authenticate tunnel operators. It uses GitHub OAuth to authenticate dashboard users.
- Synous forwards public requests to the local service behind an active tunnel.
- Synous keeps live counters and up to 100 recent request records for each active route. This data clears when the tunnel disconnects.
- Synous doesn’t include advertising, analytics, payment processing, or data sales.
Recent request records include query strings. Anyone who knows an active public URL can reach it unless the local service requires authentication.
Data Synous handles
SSH tunnels
Synous handles your GitHub username, any SSH public key you offer, and the public keys that GitHub publishes for your username. When an offered key is unknown, Synous temporarily stores the public key, fingerprint, SSH username, source IP address, and client version while you approve or deny it in the browser. When no public key is offered, Synous temporarily stores the SSH username, source IP address, and client version for the same purpose. Choosing 24 hours, 30 days, or Forever stores an offered public key and its GitHub-account association for later tunnel authentication; Once and no-key approvals do not.
While your route is active, Synous records the public hostname, connection time, SSH source IP address and port, SSH client version, any public-key type and fingerprint, and the latest round-trip-time sample.
Synous doesn’t receive or store your SSH private key.
Public routes
Synous processes request and response headers and bodies while it proxies them between a public client and the tunnel operator’s local service.
For each active route, Synous keeps up to 100 completed request records. Each record contains the time, HTTP method, full request URI including the query string, client IP address, response status, duration, and request and response byte counts. The records don’t contain headers or bodies.
Dashboard and logs
GitHub OAuth gives Synous your GitHub username. Synous requests no additional OAuth scope. During sign-in, Synous uses the OAuth access token to call GitHub’s /user endpoint. Synous doesn’t put the token in its session cookie or store it in an account database.
The service administrator can view active route metadata and aggregate traffic. If the administrator opens another operator’s detailed route view, Synous logs the administrator’s GitHub username, the operator viewed, and the administrator’s source IP address.
Synous writes operational events for service lifecycle and failures. Hosting infrastructure might also create network or system logs.
Website
The homepage, docs, and dashboard load JetBrains Mono from Google Fonts. A browser that opens these pages might send its IP address, user agent, and request metadata to Google. The website doesn’t use analytics.
Use and sharing
Synous uses data to authenticate users, assign and route temporary endpoints, forward traffic, show live route information, enforce capacity, diagnose failures, update the service, and audit administrator access.
The following parties receive data as part of the service:
- Tunnel operator
- The operator receives the full requests sent to the active route and can independently log or retain them in the local service.
- GitHub
- Synous requests public SSH keys from GitHub and uses GitHub OAuth for dashboard sign-in.
- Google Fonts
- A browser can request font styles and files from Google when it opens the homepage, docs, or dashboard.
- Service administrator
- The administrator can view active route metadata and aggregate traffic. Access to another operator’s detailed route view creates an audit event.
Retention
| Data | Expiration and deletion |
|---|---|
| GitHub public-key lookups | Up to five minutes in a bounded memory cache, including results that don’t find a user. |
| Pending SSH authorization | Stops accepting a decision after 10 minutes. After approval, the GitHub owner, selected decision, terminal tunnel result, and connected public hostname (if any) remain available for browser status reporting for up to 10 minutes after the decision. No-key authorization supports only Once or Deny. For an offered key, if persistent-key publication is interrupted, the decision remains until recovery or the selected 24-hour/30-day association expires; a Forever decision remains until recovery completes. Expired records are deleted during startup or a later authorization operation. |
| Browser-approved SSH key association | Stops authorizing after 24 hours or 30 days, or when revoked for Forever, according to the choice made during authorization. Expired records are hidden from key listings and deleted when that key is next checked or the association is updated. Revoked records are deleted immediately. |
| Active route and SSH metadata | For the tunnel’s lifetime. A protected runtime file supports graceful updates and is removed when the route ends. |
| Counters and recent requests | For the route’s lifetime, with at most 100 completed request records per route. |
| SSH status output | Up to 128 queued lines in memory. Synous doesn’t replay them after disconnect. |
| OAuth state cookie | 10 minutes. |
| Dashboard session cookie | 12 hours or until you sign out. |
| Private route state cookie | 5 minutes. |
| Private route session cookie | 12 hours. Synous rejects it sooner if the active route ID changes or the route ends. |
| Operational and audit logs | 30 days. |
Choices and security
- Disconnect the SSH tunnel to end the route and clear its live counters and recent request records.
- Use Sign out in the dashboard to clear your dashboard session. Signing out of the dashboard does not sign you out of private routes; those host-only sessions remain valid until their route ID changes or their 12-hour expiration.
- Add or remove SSH keys in GitHub to change GitHub-backed authorization for new tunnels. A separately browser-approved association remains valid for its chosen duration or, for Forever, until revoked. Existing tunnels stay connected.
- Add authentication to your local service and avoid secrets in paths or query strings.
Public clients use HTTPS, and traffic between the Synous edge and your local service travels through the authenticated SSH tunnel. Synous signs dashboard and private-route session cookies and prevents browser scripts from reading them. A signature prevents modification; it doesn’t encrypt the cookie or prevent replay if someone copies a valid, unexpired value.
Synous will update this policy when its data handling changes. For privacy questions, contact the maintainers through the Synous GitHub repository. Don’t post sensitive information in a public issue.