Privacy Policy

How we collect, use, and protect your data

Last updated: October 24, 2026

Introduction

DevUpdate.io ("we," "us," or "our") operates devupdate.io. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you use our dependency tracking service. We are committed to protecting your privacy and handling your data in accordance with GDPR and other applicable data protection laws.

Information We Collect

Account Information

When you create an account, we collect or derive:

  • Username. We do not ask you for one: it is derived from the part of your email address before the @, and you can change it at any time in Settings. It is a display and sign-in handle only.
  • Email address
  • Password (encrypted using bcrypt hashing), not collected if you sign in only via Google or GitHub
  • Timezone (used to schedule digest delivery)
  • Avatar URL (from your OAuth provider, if you sign in with Google or GitHub)
  • Account creation and last update timestamps
  • Email verification status
  • Notification preferences (disabled, weekly, daily, monthly, or realtime), digest schedule, and the security alert severity bar that decides which advisories email you immediately, including any per-lockfile override of it
  • Signup attribution: how you first arrived, recorded once at signup and never updated. We always record the page you landed on, and the hostname of the referring site when another site sent you. If you reached us through a marketing link, we additionally record the campaign parameters it carried (utm_source, utm_medium, utm_campaign, utm_term, utm_content) and one ad-network click identifier if present. We keep the landing path and the referrer host only, never full URLs, which can carry another site's session tokens or your email address. Used to understand which channels bring developers to DevUpdate.io, never sold to anyone, and deleted with your account. One narrow exception, and only with your consent: if you reached us by clicking a LinkedIn ad, we report back to LinkedIn that the click led to a signup. See LinkedIn conversion measurement below.

Tracked Source Data

When you add tracked sources to monitor:

  • Source URLs you choose to watch (GitHub repositories, VS Code Marketplace and Open VSX extensions, and other public release-notes pages)
  • Source metadata (owner, name, last checked timestamps)
  • Your update frequency preferences
  • Release and version information from those publicly available sources

AI-Generated Analysis Data

Our AI analysis generates and stores:

  • Release summaries (features, breaking changes, bug fixes, security updates)
  • Risk scores (0-100) based on code analysis
  • Code churn metrics (lines and files changed)
  • Identified undocumented changes
  • Per-source descriptions and meta-summaries derived from publicly available metadata about the source (these describe third-party projects, not users, and are visible on the public source explorer)
  • All of the above is kept in our database; the code diffs it is generated from are not stored

Lockfile Data

When you upload lockfiles:

  • Lockfile type (package-lock.json, yarn.lock, go.sum, etc.)
  • Parsed dependency data (package names and versions)
  • Lockfile hash for change detection
  • Generated alerts about risky dependency updates
  • Only parsed dependency data is retained: the original lockfile bytes are discarded after parsing

Technical Data

For security and functionality:

  • JWT authentication tokens (access tokens expire after 24 hours, refresh tokens after 30 days)
  • Email verification and password reset tokens (temporary, with expiration)
  • Session data (IP address, user agent, active sessions for security monitoring)
  • Session idle timeout: sessions are signed out after 30 minutes of inactivity
  • Each account is limited to a maximum of 3 concurrent active sessions; the oldest session is invalidated when a 4th sign-in occurs
  • Theme preference (stored in browser local storage only)

Billing and Usage Data

When you subscribe to a paid plan or use AI-powered features:

  • Subscription tier, billing interval, status, and PayPro Global subscription, customer, and order identifiers
  • AI usage events (operation type such as digest or release-intelligence summary, prompt and completion token counts) recorded per user for internal cost monitoring and fair-use enforcement; never billed per use
  • Withdrawal-waiver consent record (timestamp, IP address, and terms version) captured at checkout for EU Consumer Rights Directive §16(m) compliance
  • Refund audit fields (refund amount, elapsed-period ratio) if a refund is issued
  • When a paid team changes hands: a record of the handover (the account handing it over and the one taking it over, and the account that paid if that was someone else, when it was asked for and how it ended, the subscriptions it moved between, the refund owed to the previous owner, or to a payment that could not complete it, whether our payment provider has carried it out, and, for a charge we settle by hand, the order and amount our payment provider reported)

Programmatic Access (API Tokens & MCP Server)

If you use the programmatic-access features:

  • API tokens are user-generated for programmatic access; we store only a SHA-256 hash and the creation timestamp. The raw token is shown to you once and is never stored or recoverable on our side. A token authenticates as you and carries your account's permissions, so treat it like a password; revoking it from Settings invalidates it immediately
  • The MCP server (available on Professional and Team tiers) exposes your tracked sources, release summaries, and risk data over the Model Context Protocol, via our hosted endpoint at api.devupdate.io/mcp or a self-run server, authenticated by your API token or an OAuth grant
  • When you authorize an AI client via OAuth (the hosted MCP server's consent flow), we store the client's self-registered metadata (name, redirect URLs), the scopes you approved, SHA-256 hashes of the issued access and refresh tokens (never the raw values), and created/last-used timestamps. Each authorization and revocation is recorded in the security audit log. You can revoke any connected client at any time from Settings → Connected AI Clients, which invalidates its tokens immediately. A password reset, a password change and signing out of every session revoke all of them at once, access and refresh tokens alike; you then reconnect your AI clients. None of the three touches your API token: it keeps working until you revoke or regenerate it in Settings, so do that too if you think it was taken
  • Requests made by a connected AI client are processed as requests made by you; the data such a client receives is then governed by that client's own privacy terms, so review them before approving access

Team and Collaboration Data

When you create or join a team, we collect:

  • Team name and team ID
  • Your role within the team (Owner, Admin, or Member)
  • Team membership information (which users are in your team)
  • Team invitation data (email addresses invited, invitation status, role assignments)
  • Team action logs (who invited whom, role changes, member additions/removals, ownership transfers)
  • Timestamps for all team-related activities

How We Use Your Information

We use your information to:

  • Provide and maintain the DevUpdate.io service
  • Authenticate your account and secure access
  • Monitor the tracked sources you've chosen to watch
  • Analyze git diffs and generate release summaries and risk scores
  • Deliver live updates over a persistent server-sent-events connection from your browser to our servers. We use this channel to push subscription status changes (e.g. when your payment is finalized) and new release announcements for the sources you track, so you don't have to refresh the page. The connection authenticates with the same token as ordinary API requests; no new credentials or cookies are created.
  • Send email notifications about source updates (based on your preferences)
  • Send transactional emails (account verification, password reset, account deletion confirmations, team invitations)
  • Detect and alert you about risky dependency updates in your lockfiles
  • Manage team access control and enforce role-based permissions
  • Facilitate team collaboration and member management
  • Send team invitation emails and notifications
  • Track team membership changes for security, billing, and audit purposes
  • Improve our AI analysis and service quality
  • Respond to your support requests
  • Comply with legal obligations

Third-Party Services

We use the following third-party services to operate DevUpdate.io:

PostHog (Analytics)

We use PostHog for product analytics. PostHog helps us understand how you use DevUpdate.io so we can improve your experience. All analytics data is hosted on PostHog's EU servers (eu.posthog.com) and is never shared with third parties or used for advertising. Events are pseudonymized by your account identifier rather than fully anonymized, meaning we can correlate events back to your account internally, but the data is never shared externally. Your email address and username are not sent to PostHog. Events include page views, feature interactions, and session information. Page addresses are filtered before they leave your browser: campaign parameters and ad-click identifiers are kept, everything else in a query string is dropped, and the one-time token in a password-reset, email-verification, email-change, account-deletion, team-invite or share link is removed with it, so those tokens never reach PostHog. Clicks on buttons and links are recorded with their text and attributes, link address included, and those of the elements around them, except on any button or link that names one of your repositories (its owner and name, or a GitHub link to it): clicks on those are not recorded at all. Any other element that shows a repository in what a click records is marked as such in our code, and its text and attributes are removed in your browser before the click is sent, as is a link to an account or repository on GitHub, GitLab, Bitbucket, Codeberg, SourceHut or Gitee anywhere in it, and most other text shaped like a repository's owner and name (the word pairs our own pages use, such as “CI/CD”, and media types such as image/webp are kept). Session recording: only after you accept analytics in the cookie banner, your browser starts a PostHog session recording of the pages you visit, which keeps their layout, your clicks and your navigation. Every piece of page text and every input value is masked in your browser before it is recorded, as are text attributes such as tooltips and image descriptions, and GitHub account and repository names are removed from link and image addresses. The page addresses and request addresses a recording keeps are filtered like those on every event, so no one-time token in a link is recorded. Whether a recording runs at all also depends on our PostHog project's recording setting. Withdrawing consent in the banner stops a recording in progress. Analytics captured in your browser require your consent and you can opt out at any time via the cookie banner. Separately, a small number of events are recorded on our own servers rather than in your browser: that your account was created, that a lockfile was added, that a digest email was sent, and that an AI agent invoked the MCP tools. These set no cookies and read nothing from your device, carry your pseudonymous account identifier (plus, on the signup event only, the campaign label described under Account Information above), and are processed as operational product analytics under our legitimate interest in knowing whether the product works. Deleting your account does not delete your PostHog profile today: PostHog keeps the account identifier and the events attached to it, which no longer match anything we hold, under the data retention of our PostHog project. To have it removed as well, email us from your account address before you delete the account; once the account is gone we can no longer tell which profile was yours. PostHog's data processing is governed by their Privacy Policy.

LinkedIn (ad conversion measurement)

Only if you arrived by clicking one of our LinkedIn ads and accepted the cookie banner: when you create an account, our server sends LinkedIn its own click identifier back, so LinkedIn can tell us the ad worked. No LinkedIn code runs on this site, and your email address is never sent, not even hashed. Full detail, including what we deliberately withhold, is under LinkedIn conversion measurement in the Cookies section below. LinkedIn's data processing is governed by their Privacy Policy.

AI Providers (currently OpenAI)

We send git diffs, release notes, README and page excerpts, and similar publicly available content to OpenAI's API for analysis and summary generation. We may engage other LLM providers in the future; if we do, we will update this policy and, where required by law, notify affected users before the change takes effect. OpenAI's data processing is governed by their Privacy Policy.

GitHub

Public data ingestion: We fetch public repository data (releases, diffs, and README excerpts) via GitHub's API.

Sign-in (DevUpdate.io GitHub App): If you sign in with GitHub, the DevUpdate.io GitHub App requests read-only access to your email addresses and to the contents and metadata of repositories you select, never write access. The consent screen explicitly lists those permissions. We receive your GitHub email address, username, and avatar URL, and a short-lived user-to-server access token (plus refresh token) we use to call GitHub on your behalf.

GitHub App install (required for private repos): Authorizing the App at sign-in is enough for public-repo features. To use private-repo features (private starred sync, private-repo source tracking, live lockfile sync from a private repo), install the same App on the owning user account or org and pick which repos it can see. The App stays read-only (contents + metadata only) regardless of which repos you grant. We use it to periodically fetch connected lockfile contents and run dependency change-detection. We store only the parsed dependency list (package names and versions), not the raw lockfile or any other repository contents. You control this access and can revoke or change install scope at any time from your GitHub settings.

GitHub starred-repository sync (optional): If you enable this feature, we store your GitHub username and periodically fetch your public starred repositories via GitHub's public API (/users/{username}/starred). We use the resulting repository URLs to create tracked sources on your behalf, and we deactivate tracked sources that you originally added through this feature when you un-star the corresponding repository. We do not access private stars, and we do not access any data beyond the public star list itself. You control the username and can clear it from your settings at any time.

VS Code Marketplace & Open VSX Registry

When you track a VS Code extension, we make read-only requests to the public Visual Studio Marketplace and Open VSX Registry APIs to retrieve the extension's version history and changelogs. We send no authentication and access no editor, workspace, or account data. Extension metadata and changelog excerpts are publicly available content and are handled the same way as other non-GitHub release pages, including being sent to our AI provider for summary generation.

Google (Sign-in)

If you sign in with Google, we receive your Google account email, name, and profile picture. We request only the minimum OAuth scopes (openid, email, profile) needed for sign-in.

Railway (Hosting)

DevUpdate.io runs on Railway: the website, the application server, the scheduled jobs, the PostgreSQL database that holds your account data, and the Redis cache. All of them run in Railway's EU West region, in the Netherlands. Railway's data processing is governed by their Privacy Policy.

Amazon Web Services (AWS)

We use two AWS services. Neither hosts the application or its database.

  • Amazon SES (Frankfurt region): Sends transactional and notification emails, so it receives your email address and the message
  • Amazon Route 53: Answers DNS lookups for devupdate.io; it never sees your account data

AWS's data processing is governed by their Privacy Notice.

PayPro Global (Payment Processing)

We use PayPro Global as our Merchant of Record for payment processing. When you subscribe to a paid plan, PayPro Global collects and processes:

  • Billing information (name, email, address)
  • Payment details (credit card, PayPal, or other payment method)
  • Transaction history and subscription status

PayPro Global handles all payment compliance, including VAT/sales tax calculation and collection. We receive webhook notifications about subscription events (creation, renewal, cancellation) but do not store your payment card details. PayPro Global's data processing is governed by their Privacy Policy.

Data Sharing Within Teams

When you create or join a team subscription, certain information is shared with other team members to enable collaboration and team management.

Information Visible to All Team Members

All team members (including regular members) can see:

  • Usernames and email addresses of all team members
  • Roles of all team members (Owner, Admin, or Member)
  • Team name and basic team information
  • Team size and available seats

Information Visible to Team Admins and Owners

Team admins and owners have additional visibility into:

  • Pending team invitations (email addresses and assigned roles)
  • Team subscription details and seat usage
  • Full list of team members with management capabilities

Data Not Shared Within Teams

Your personal data remains private. Team members cannot see:

  • Your password or authentication tokens
  • Your individual tracked sources or lockfiles (unless separately shared)
  • Your notification preferences
  • Your account creation date or activity history
  • Your IP address or session information

Important: By accepting a team invitation, you consent to sharing your username and email address with other team members. If you do not wish to share this information with the team, you should decline the invitation. You can leave a team at any time from your team settings, which will immediately stop sharing your information with team members.

Public Shared Release Links

You can create a link that lets anyone view a single release summary without a DevUpdate.io account. This is an action you choose to take: no release summary is made public unless you generate a link for it.

  • Anyone with the link can view that one release summary. The link uses an unguessable random token and is not indexed by search engines.
  • Each link expires automatically 7 days after creation and can be revoked by you at any time.
  • We record a count of how many times a shared link is opened. These access counts are anonymous: we do not store the identity or personal data of people who open a shared link.
  • The public page shows only the release summary content. It does not reveal your username, email address, or other personal account information. It names the repository the release belongs to (owner/repo) only if you choose to show it when you create the link; by default it does not.

Cookies and Tracking

We use cookies for essential functionality and analytics (with your consent):

Essential Cookies (Always Active)

  • Authentication Cookie: NextAuth.js session cookie to maintain your login state (essential for service functionality)
  • Theme Preference: Stored in browser local storage only (not a cookie)
  • Cookie Consent Preference (du_consent): Remembers your cookie consent choice: only which button you pressed (accepted or rejected), kept for six months, plus a copy in your browser's local storage. The cookie exists so our own backend can see your answer, which it needs in order to honor a rejection server-side; local storage alone is not readable there. It is written whichever way you answer, because the record of a choice is not a use of it. That is also why it is essential rather than optional.

When you're signed in, we maintain a persistent server-sent-events connection from your browser to deliver live updates (subscription status, release announcements). This stream uses the same NextAuth session token as the rest of the site; no additional cookies are introduced. Public source pages in the explorer also open a persistent connection while you view them, whether or not you are signed in, so new releases appear without a reload. That connection is not tied to your account, sends no token, and sets no cookies.

Analytics Cookies (Optional - Requires Consent)

With your consent, we use PostHog for analytics to understand how you use our service and improve your experience:

  • PostHog Session Cookie: Tracks your session to understand user behavior and feature usage
  • Data Collected: Page views, button clicks (except on buttons and links that name one of your repositories, which are not recorded), feature usage, session duration, technical information (browser, device type, general location), and the campaign parameters (utm_*) and ad-click identifiers present on the link you arrived through
  • Signup attribution (du_attr): set when you arrive from a campaign link or another website, so that the origin recorded on your account is the page you actually landed on rather than whatever page you happened to be on when you signed up. It contains only the campaign parameters, the ad-network click identifier if the link carried one, the referring hostname and the landing path described under Account Information, expires after 30 days, and is HttpOnly, so no script on the page can read it. It is not set if you arrive directly. This is the one non-essential cookie we set before you answer the banner. Block cookies for this site if you would rather it were not set; nothing in the product depends on it.
  • Privacy-First: All analytics data is hosted in the EU, never shared with third parties, and only used to improve DevUpdate.io

Your Choice: You can accept or reject analytics cookies via the cookie banner. You can change your preference at any time by clearing your browser's local storage or contacting us at info@devupdate.io. Rejecting analytics cookies will not affect core functionality.

We do not use advertising cookies, ad-network pixels or third-party tracking scripts. There is no LinkedIn Insight Tag, no Meta pixel and no Google Ads tag on this site, and nothing of the sort runs anywhere inside the signed-in app. We do not sell your personal data, to advertisers or to anyone else.

LinkedIn conversion measurement

We advertise on LinkedIn, and we need to know whether those ads work. When you click one of our LinkedIn ads, LinkedIn adds its own click identifier (li_fat_id) to the link. If you then create an account and you accepted the cookie banner, our server tells LinkedIn that this click resulted in a signup.

  • What is sent: LinkedIn's own click identifier, the time, and an internal account number. Nothing else.
  • What is never sent: your email address, not even hashed (LinkedIn accepts that, and it would measurably improve their matching), along with your name, employer, job title, country, and anything at all about your dependencies, lockfiles or code.
  • Who it can involve: only people who actually clicked one of our LinkedIn ads. If you did not, there is no click identifier and nothing is ever sent about you.
  • If you reject the banner: nothing is sent, and the ad simply goes unmeasured. This is not a fallback we work around. The measurement is worth less to us than the promise is.

This happens server to server. No LinkedIn code runs in your browser and no ad-network cookie is set. It reads two records already described above: the du_attr attribution cookie, and the du_consent record of how you answered the banner.

Data Retention

We retain your data for as long as your account is active. When you delete your account:

  • All account information is permanently deleted
  • Signup attribution (campaign, referrer, landing page) is deleted with the account row; it is not retained in any aggregate channel tally
  • Your pseudonymous PostHog analytics profile (your account identifier and the events attached to it) is not deleted with the account today; PostHog keeps it under our project's data retention. Ask us before deleting the account if you want it removed too (see PostHog under Third-Party Services above)
  • Tracked sources and monitoring preferences are removed
  • Uploaded lockfiles and associated alerts are deleted
  • Generated analysis data linked to your account is removed
  • There is no stored copy of an uploaded lockfile to delete: we never keep the original file, only the package names and versions parsed from it

Temporary tokens (email verification, password reset) are automatically deleted upon expiration or use.

Unverified accounts: Accounts created with email and password that do not complete email verification within 7 days of signup are automatically deleted. We send a reminder email around day 4 of that window. During this window we store only the email address, the username derived from it, the password hash, and a hashed verification token. No other personal data is collected before verification.

Inactive verified accounts: Verified free-tier accounts that have never added a tracked source and never connected a lockfile are automatically deleted 30 days after signup. We send up to five reminder emails over the preceding 27 days, the last of which is an explicit deletion warning. Accounts on a paid subscription and accounts that have joined a team are excluded from this sweep. After deletion we send a final notification email to the address on file, and the row is removed from production storage along with sessions and OAuth links.

Billing-record retention obligation: The payment notifications our payment provider PayPro sends us for each order and subscription change (stored as our order and subscription-event records) are booking vouchers under German commercial and tax law (§147 AO, §257 HGB). We keep them for 8 years, counted from the end of the calendar year in which they arrived, and delete them automatically once that period has ended. A subscription's records are never deleted while it is still running, however old they are (a cancellation still running to the end of its paid period counts), because renewals and refunds rest on its first order. Once it has ended, the 8 years count from the end of the calendar year of the last change we recorded on it, normally the year it ended, when that is later than the year a record arrived. Deleting your account does not remove them earlier. Subscription history and withdrawal-waiver consent are stored on the subscription record itself, which is kept while the subscription is running and, once it has ended, for 10 years, counted from the end of the calendar year of the last change we recorded on the subscription (normally the year it ended); a daily sweep then deletes it. Deleting your account neither shortens nor extends that period. The record of a paid team's handover is kept with the record of the subscription the team moved away from, and deleted with it; deleting either account unlinks it from the record rather than removing it. These retained records are reduced to the minimum required by law and contain no source data, no analysis output, no signup attribution, and no profile data beyond what the invoice and audit trail require.

Security audit log: Entries recording security events on your account (sign-ins, sign-outs, password changes and resets, AI-client authorizations) keep their timestamp after the account is deleted, so a past incident can still be investigated, and their IP address and browser user agent for 90 days from the event, after which a daily sweep clears them. Deleting your account unlinks them from it, and none of them holds an email address. The entry recording an account's deletion keeps only the time and the address's domain: no account number, IP address or user agent.

Your Rights (GDPR)

Under GDPR and other data protection laws, you have the following rights:

  • Right to Access: Request a copy of your personal data
  • Right to Rectification: Correct inaccurate or incomplete data
  • Right to Erasure: Delete your account and all associated data via settings
  • Right to Restrict Processing: Limit how we process your data
  • Right to Data Portability: Request a JSON export of your account data (sources, lockfiles, analysis history, billing) by emailing info@devupdate.io. Today this is fulfilled manually within a reasonable timeframe; a self-serve export is on our roadmap.
  • Right to Object: Object to certain types of processing
  • Right to Withdraw Consent: Withdraw consent at any time

To exercise these rights, contact us at info@devupdate.io.

Data Security

We implement industry-standard security measures:

  • All data transmitted over HTTPS (TLS encryption)
  • Passwords hashed using bcrypt
  • JWT tokens for secure authentication with automatic expiration
  • Email verification required for account creation and sensitive actions
  • Application, database and cache hosted on Railway, in its EU West region
  • Regular security updates and monitoring

While we take reasonable measures to protect your data, no internet transmission is 100% secure. We cannot guarantee absolute security.

International Data Transfers

Our application, database and cache run in Railway's EU West region (the Netherlands), email is sent through Amazon SES in Frankfurt, and analytics are stored on PostHog's EU servers. Railway and AWS are companies based in the United States, and OpenAI processes the content we send it in the United States, so your data may be transferred to or accessed from countries outside the European Economic Area (EEA). These transfers are protected by appropriate safeguards such as Standard Contractual Clauses and compliance with GDPR requirements.

Children's Privacy

DevUpdate.io is not intended for users under 16 years of age. We do not knowingly collect personal information from children. If you believe we have collected data from a child, please contact us immediately.

Changes to This Policy

We may update this Privacy Policy from time to time. Changes will be posted on this page with an updated "Last updated" date. Continued use of DevUpdate.io after changes constitutes acceptance of the updated policy.

Contact Us

If you have questions about this Privacy Policy or how we handle your data, contact us:

Jakob Maximilian Pelz

Olenhoffweg 1a, 21614 Buxtehude, Germany

Email: info@devupdate.io