{
  "$schema": "https://pindrift.app/schemas/version.schema.json",
  "schema_version": 1,
  "version": "1.0.264",
  "channel": "stable",
  "released": "2026-11-03",
  "min_supported_windows": "10.0.19041",
  "min_supported_ios": "17.0",
  "min_supported_android": "8.0",
  "download": {
    "windows_x64": {
      "url": "https://pindrift.app/download/win",
      "sha256": "f51fa7e46fc4370f220fedeeaf7603c342171aab573ee718cce76ab5acfffdec",
      "bytes": 130731862,
      "signed": false
    }
  },
  "notes_url": "https://pindrift.app/changelog#v1-0-264",
  "minimum_supported_version": "0.1.0",
  "deprecation": null,
  "changelog": [
    {
      "version": "1.0.264",
      "channel": "stable",
      "released": "2026-11-03",
      "title": "Fixes",
      "summary": "PinDrift no longer stops answering while it looks for a Wi-Fi iPhone. An iPhone below iOS 17 is named as the reason. Sign-in rides out a busy Apple and waits two minutes, not ten. An install no longer fails right after the iPhone app downloads."
    },
    {
      "version": "1.0.263",
      "channel": "stable",
      "released": "2026-10-31",
      "title": "Changes",
      "summary": "The two-factor code is six boxes and sends itself. Resend code asks Apple for a new one. A wrong code says so and clears. Install errors are a short title, the code and Send log."
    },
    {
      "version": "1.0.262",
      "channel": "stable",
      "released": "2026-10-31",
      "title": "Fixes",
      "summary": "Apple sign-in after a two-factor code no longer fails with PND-3598. A busy answer from Apple starts the sign-in again with fresh headers."
    },
    {
      "version": "1.0.261",
      "channel": "stable",
      "released": "2026-10-30",
      "title": "Fixes",
      "summary": "Installing asks for the cable when the iPhone is only seen over Wi-Fi. Apple's three-app limit names the apps to delete. Apple's developer service not answering has its own error. Card payments inside the app complete. No wrong email hint for a real email domain. iPhone Duo, iPhone 18 Pro, 18 Pro Max and 17e show by name."
    },
    {
      "version": "1.0.259",
      "channel": "stable",
      "released": "2026-10-27",
      "title": "Fixes",
      "summary": "Email fields catch a mistyped address, such as gmail.con, before it is sent."
    },
    {
      "version": "1.0.258",
      "channel": "stable",
      "released": "2026-10-26",
      "title": "Fixes",
      "summary": "Installing the iPhone app no longer starts two Apple sign-ins at once. Pressing Install again stops the earlier install for that iPhone. Clearer message when Apple's sign-in service is busy."
    },
    {
      "version": "1.0.257",
      "channel": "stable",
      "released": "2026-10-25",
      "title": "Security updates",
      "summary": "Electron 43.8.3, which stops trusting a set of compromised certificates. Security updates to the built-in signing and device tools. The phone remote answers only this PC, your home network and Tailscale, and stays on this PC if its secure connection cannot start."
    },
    {
      "version": "1.0.255",
      "channel": "stable",
      "released": "2026-10-23",
      "title": "Finds your iPhone sooner on Windows",
      "summary": "If Apple Devices is installed but not running, PinDrift starts it for you. Pairing gets past folders an older version left behind."
    },
    {
      "version": "1.0.251",
      "channel": "stable",
      "released": "2026-10-22",
      "title": "Apple sign-in works again",
      "summary": "Signing in to Apple asks for one code and finishes."
    },
    {
      "version": "1.0.248",
      "channel": "stable",
      "released": "2026-10-22",
      "title": "Apple sign-in works again",
      "summary": "Signing in to Apple works again after Apple's change on October 21. Installing on an iPhone no longer downloads a large Apple library first."
    },
    {
      "version": "1.0.247",
      "channel": "stable",
      "released": "2026-10-21",
      "title": "Update buttons and iPhone install tools",
      "summary": "The update buttons open the download section of pindrift.app. Updated tools for installing the iPhone app."
    },
    {
      "version": "1.0.245",
      "channel": "stable",
      "released": "2026-10-19",
      "title": "Tidier app files",
      "summary": "The desktop app's files are cleaner and a little smaller."
    },
    {
      "version": "1.0.243",
      "channel": "stable",
      "released": "2026-10-18",
      "title": "iPhones update themselves",
      "summary": "Every iPhone set up from this computer can now update PinDrift by itself, with or without a PinDrift account."
    },
    {
      "version": "1.0.241",
      "channel": "stable",
      "released": "2026-10-16",
      "title": "More reliable Apple sign-in",
      "summary": "Sign-in answers Apple's extra device check on every identity server. When Apple turns one identity server away, sign-in moves on to the next."
    },
    {
      "version": "1.0.236",
      "channel": "stable",
      "released": "2026-10-13",
      "title": "Apple sign-in works again on Windows",
      "summary": "Signing in to Apple works again without a Mac. If one route is busy, PinDrift tries a backup on its own."
    },
    {
      "version": "1.0.235",
      "channel": "stable",
      "released": "2026-10-13",
      "title": "Mac layout and Apple sign-in fixes",
      "summary": "On Mac, the sidebar no longer sits under the window buttons. Apple ID sign-in is more reliable."
    },
    {
      "version": "1.0.234",
      "channel": "stable",
      "released": "2026-10-13",
      "title": "Apple sign-in works again on Windows",
      "summary": "Signs in with a device identity Apple accepts. Engine survives an old admin-owned log file."
    },
    {
      "version": "1.0.233",
      "channel": "stable",
      "released": "2026-10-13",
      "title": "More reliable iPhone setup",
      "summary": "The iPhone app now downloads by several routes, so one network or certificate problem no longer stops an install. Support logs now include the engine's own logs, even when it could not start."
    },
    {
      "version": "1.0.204",
      "channel": "stable",
      "released": "2026-09-16",
      "title": "The sidebar tabs are back to how they looked",
      "summary": "The Teleport and Route tabs look as they did before 1.0.203."
    },
    {
      "version": "1.0.202",
      "channel": "stable",
      "released": "2026-09-16",
      "title": "Mandatory updates and a tidier account page",
      "summary": "When an update is marked mandatory, PinDrift installs it before it can be used again. A spoof that is already running always finishes first. If a mandatory update cannot install, PinDrift says so and offers to try again or download it. The account page is smaller, with two equal boxes to a row. Devices shows only phones that are signed in."
    },
    {
      "version": "1.0.185",
      "channel": "stable",
      "released": "2026-09-15",
      "title": "The Windows installer shows the PinDrift logo in Chrome",
      "summary": "Chrome's downloads list shows the PinDrift logo beside the installer instead of a generic program icon. The Windows download is called PinDriftSetup.exe."
    },
    {
      "version": "1.0.184",
      "channel": "stable",
      "released": "2026-09-15",
      "title": "Diagnostics are on by default",
      "summary": "PinDrift now sends diagnostics by default, as the privacy policy describes. If you turned diagnostics off before, they stay off."
    },
    {
      "version": "1.0.180",
      "channel": "stable",
      "released": "2026-09-11",
      "title": "Installing is one click now, and the app opens faster",
      "summary": "The installer used to open on a page of terms before it would do anything. It does not any more: one click, and PinDrift starts itself when it finishes. Launch is quicker as well, because the app was spending about a second checking on itself before the window could appear. The download is called PindriftSetup.exe from this version, and carries an icon Windows can actually draw in your downloads list."
    },
    {
      "version": "1.0.146",
      "channel": "stable",
      "released": "2026-09-06",
      "title": "Back to plans no longer shows up for people who already have one",
      "summary": "The licence screen offered a way back to the plan list to customers who were already on a plan, which reads as a prompt to buy something they own. It is gone for them and unchanged for everybody else."
    },
    {
      "version": "1.0.123",
      "channel": "stable",
      "released": "2026-08-24",
      "title": "Refresh now asks you to connect your iPhone instead of failing at you",
      "summary": "Pressing Refresh now with no iPhone attached reported a failure. PinDrift was holding on to the last phone it saw, so the request went out to a phone that had already been unplugged. Refresh and Install now check whether a phone is actually there and say “Connect your iPhone first” instead, as a plain message rather than an error. Anti-Speed has also left the desktop: it is a phone feature, because the governor reads your iPhone's own motion sensors, and the desktop tab was only ever a hand-off to it. The Device Control button and the Remote Control panel it opened have been removed as well."
    },
    {
      "version": "1.0.116",
      "channel": "stable",
      "released": "2026-08-16",
      "title": "Signing out stops breaking your iPhone certificate",
      "summary": "Sign out of your Apple ID and back in, and PinDrift would refuse to install to your iPhone. Apple gives a free account one signing certificate; PinDrift holds the only copy of its key, and signing out was deleting that key while the certificate stayed at Apple, orphaning it. Signing out now keeps the certificate so the app on your phone keeps working. A full erase is still available and says plainly that it removes the certificate too. Also fixed: the Mac build sometimes produced a broken or missing Intel installer."
    },
    {
      "version": "1.0.115",
      "channel": "stable",
      "released": "2026-08-16",
      "title": "One iPhone per licence, and the app stops calling you a trial user",
      "summary": "If your subscription ended, PinDrift used to say your TRIAL was up and thank you for trying it. It now says your subscription has ended and confirms your favourites, routes and devices are still there. Installing to an iPhone is one phone per licence, the same as the desktop app has always been one computer at a time, and you are told before anything is signed rather than partway through. Moving phones is free."
    },
    {
      "version": "1.0.114",
      "channel": "stable",
      "released": "2026-08-16",
      "title": "Buying happens in the app, and it looks like the app",
      "summary": "The payment form used to be Stripe's own checkout dropped into our window, with its own email box, button and colours. In a dark app it was a white panel that obviously belonged to somebody else. Now only the card fields are Stripe's and everything around them is ours. Monthly is back at $9, alongside Yearly at $60 and Lifetime at $70. Paying with cryptocurrency has been withdrawn; if you bought that way your licence is unaffected."
    },
    {
      "version": "1.0.112",
      "channel": "stable",
      "released": "2026-08-16",
      "title": "Paying happens inside the app now",
      "summary": "Buying PinDrift used to hand you to your browser and a Stripe page, then leave you alt-tabbing to find out whether the app had noticed. The card form is now in the app itself. It is still Stripe's form and your card number still never touches PinDrift, but it sits in the window you were already looking at. If the form cannot load, the browser page opens like it always did."
    },
    {
      "version": "1.0.111",
      "channel": "stable",
      "released": "2026-08-16",
      "title": "Installing to your iPhone stops asking you to wait",
      "summary": "If PinDrift told you it was still checking your plan and then kept saying it, that is fixed. The engine behind the app restarts on its own sometimes, and it came back not knowing which account the computer belongs to, so the iPhone installer refused. The app now reminds it every ten seconds, and when nobody is really signed in it says that instead of asking you to wait."
    },
    {
      "version": "1.0.110",
      "channel": "stable",
      "released": "2026-08-16",
      "title": "Update button fix",
      "summary": "Fixed an error dialog when checking for updates. Updates still wait for you to finish spoofing before they install."
    },
    {
      "version": "1.0.109",
      "channel": "stable",
      "released": "2026-08-16",
      "title": "iPhone setup finishes on its own",
      "summary": "Installing to an iPhone now finishes setting the app up for you, instead of leaving it installed but unable to start. The pairing step no longer disappears while it is still needed, and the setup screens have been tidied up."
    },
    {
      "version": "1.0.108",
      "channel": "stable",
      "released": "2026-08-15",
      "title": "Installing to an iPhone stopped failing at the first step",
      "summary": "If putting PinDrift on your iPhone stopped with \"the device-identity helper exited unexpectedly\", this is the fix, and the problem was never on your machine. PinDrift ships a small helper that produces your computer's Apple identity locally, so signing in never routes your Apple ID through anybody's server. Recent installers carried a placeholder version of it that could not start. The real one is here, every helper was rebuilt, and the build now refuses to finish if any of them is older than the code it came from. Macs on Apple Silicon can also update automatically for the first time - earlier Mac builds had no update feed at all."
    },
    {
      "version": "1.0.107",
      "channel": "stable",
      "released": "2026-08-15",
      "title": "Setup stops telling you that you can't sign in when you can",
      "summary": "The iPhone setup panel said Apple sign-in was not configured on this build, on machines that were completely ready to go. It was checking for a setting PinDrift removed on purpose - your machine's Apple identity is produced on your own computer rather than by a server, because a server doing it would see a stable identifier for your machine on every sign-in. It now checks what actually matters and tells you where to put the missing piece if there is one. The iPhone app is also its own download now, checked against a published checksum, so it can be updated without a new version of PinDrift."
    },
    {
      "version": "1.0.106",
      "channel": "stable",
      "released": "2026-08-15",
      "title": "Moving your licence now reaches your other computer",
      "summary": "Using your emergency switch used to release the old computer without telling it, so it carried on looking signed in for the rest of the day. The other machine is now told the moment it happens, and checks again whenever you come back to the window. A computer that is offline cannot be told anything at all, so what it is allowed to do on its own is now a rolling thirty days rather than forever - if you open PinDrift online you will never notice it. Installing the app onto an iPhone is held to a stricter standard than spoofing: spoofing still works with no internet, but putting an app on a phone now checks in first. And the iPhone app has moved out of the installer into its own download, so it can be updated without a new version of this one."
    },
    {
      "version": "1.0.104",
      "channel": "stable",
      "released": "2026-08-15",
      "title": "One computer at a time, and a Mac build that works",
      "summary": "PinDrift now enforces what it always said: one computer at a time. Signing in on a second machine asks first, says how long your other computer holds the licence, and offers your one-time emergency switch when there is one to offer - saying no changes nothing. There is a macOS build now, and it is a real one: it signs in, talks to your iPhone, and installs the iPhone app the same way Windows does. A phone on a cable stopped disconnecting by itself and stopped flipping between wired and wireless. The trial clock no longer starts on a spoof that never happened. And updates install themselves from here on, never while a spoof is running."
    },
    {
      "version": "1.0.103",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.103",
      "summary": "Installing onto an iPhone now remembers the signing identity instead of asking Apple for it every time.",
      "sections": {
        "changed": [
          "The certificate and provisioning profile were obtained from Apple, used once and discarded, so every install repeated the whole exchange. They are now kept in the Windows credential store alongside their expiry.",
          "A free Apple ID has hard limits on how often it can issue these, so reusing what you already have means reinstalling the same app costs nothing against those limits. The stored identity is never reused once close to expiring."
        ]
      }
    },
    {
      "version": "1.0.102",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.102",
      "summary": "The two things you finish on the iPhone now each have their own screen.",
      "sections": {
        "changed": [
          "Trusting the developer profile and allowing the VPN helper were stacked as cards under one heading. Trusting is not optional, so it now has a screen of its own with the exact Settings path step by step.",
          "Removed the certificate-lifetime note from that screen; the same information is on the management view under the countdown, where it is actionable."
        ]
      }
    },
    {
      "version": "1.0.101",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.101",
      "summary": "Installing onto an iPhone failed at the last step with \"could not persist the signing key.\"",
      "sections": {
        "fixed": [
          "Windows Credential Manager limits how much a single stored item can hold, and a signing key is larger than that limit. So was the provisioning profile, which is much larger again. PinDrift now splits large items across multiple entries; everything still lives in the Windows credential store and nothing is written to a file.",
          "Errors while saving now say what went wrong. The original message was fixed text that discarded the underlying reason."
        ]
      }
    },
    {
      "version": "1.0.100",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.100",
      "summary": "Installing onto an iPhone failed with \"Apple's reply contained no certificate.\" Apple had issued it and simply did not include it in the reply.",
      "sections": {
        "fixed": [
          "Apple had issued the certificate but did not include it in the reply to the request, which it sometimes does not. PinDrift treated that as a refusal and stopped.",
          "On a free Apple ID a certificate had already been replaced to make room for the new one, so each retry replaced another and threw the result away. PinDrift now collects the certificate Apple issued, matching it to this computer's own key so it can never pick up an unrelated one."
        ]
      }
    },
    {
      "version": "1.0.99",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.99",
      "summary": "\"Checking your plan\" no longer interrupts an install.",
      "sections": {
        "fixed": [
          "PinDrift confirms your plan with its own background service, and for a moment after starting, that service has not been told which account you are signed in as. Starting an install during that moment produced an error asking you to try again.",
          "PinDrift now waits for the answer itself, and tells the service who you are immediately before each install. The background service restarts on its own after updates, and nothing was re-sending your account to it afterwards."
        ]
      }
    },
    {
      "version": "1.0.98",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.98",
      "summary": "Installing onto an iPhone stopped partway with \"sign-in timed out\". PinDrift was asking a question it never displayed.",
      "sections": {
        "fixed": [
          "A free Apple ID gets one signing certificate. If Apple already holds one PinDrift does not have the key for, made by Xcode, another sideloader, or an earlier install on a different computer, continuing means replacing it. PinDrift paused to ask permission, then waited three minutes for an answer to a prompt that was never shown.",
          "The prompt now appears. It names the computer that created the existing certificate and says what replacing it affects, and leaving it alone is the default. Replacing is not reversible: every app signed with that certificate stops opening until it is installed again."
        ]
      }
    },
    {
      "version": "1.0.97",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.97",
      "summary": "More detail recorded when installing onto an iPhone stalls. Diagnosis only.",
      "sections": {
        "changed": [
          "Each request to Apple now records how long it took to prepare and how long Apple took to answer, so a stall identifies the exact call that stopped responding.",
          "Progress on the stall some users are seeing: registering the iPhone and creating the signing key both complete. The stop happens when asking Apple for the list of existing signing certificates."
        ]
      }
    },
    {
      "version": "1.0.96",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.96",
      "summary": "Installing onto an iPhone reports what it is doing in more detail. Diagnosis only, not a change to how installing works.",
      "sections": {
        "changed": [
          "One step covered three separate operations: registering the iPhone with Apple, creating a signing key, and requesting the signing certificate. When installing stalled, all three looked identical.",
          "Each is now reported separately, so a failure names the operation it stopped on."
        ]
      }
    },
    {
      "version": "1.0.95",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.95",
      "summary": "Better reporting when installing onto an iPhone fails. Diagnosis only, not a change to how sign-in works.",
      "sections": {
        "changed": [
          "The sign-in helper's own diagnostics were being discarded, so when a sign-in stalled the log recorded which step it reached and then nothing at all. Those messages are now kept, with any Apple ID in them masked.",
          "The timeout now says which step it stopped on rather than just 'timed out'."
        ]
      }
    },
    {
      "version": "1.0.94",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.94",
      "summary": "Installing onto an iPhone could hang forever instead of failing. It now stops after three minutes and names the step.",
      "sections": {
        "fixed": [
          "Installing onto an iPhone could hang forever instead of failing. There was a three minute limit on the Apple sign-in, but it was only checked whenever the sign-in helper said something, so a helper that went quiet was never timed out and the install sat on one step indefinitely.",
          "It now stops at three minutes and reports which step it stopped on. This does not by itself fix a slow or unresponsive sign-in; it makes one visible."
        ]
      }
    },
    {
      "version": "1.0.93",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.93",
      "summary": "Installing onto an iPhone now shows that it is still working during the long step near the end.",
      "sections": {
        "changed": [
          "Installing onto an iPhone now shows that it is still working. The progress bar only moves when a step finishes, and one step near the end waits on Apple for up to a minute and a half, which was indistinguishable from a freeze. There is now a spinner and a counter showing how long the current step has been running.",
          "The counter is per step rather than for the whole install, stays hidden for the first few seconds so quick steps do not flash a number, and stops while PinDrift is waiting for you to enter a password or a two-factor code."
        ]
      }
    },
    {
      "version": "1.0.92",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.92",
      "summary": "Fixes a signed-in Lifetime or Yearly plan still being told to buy a plan when sideloading.",
      "sections": {
        "fixed": [
          "A signed-in Lifetime or Yearly plan could still be told to buy a plan. Shortly after launch PinDrift told its background service who you were, sometimes before your account had finished loading, so the service checked your plan as if no one was signed in, got 'no plan on this computer' back, and remembered it.",
          "The app no longer reports an empty account at startup, and sideloading no longer treats 'we have not confirmed your plan yet' as 'your plan does not include this'. Signing out is still reported immediately, so nothing about plan enforcement is weakened."
        ]
      }
    },
    {
      "version": "1.0.91",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.91",
      "summary": "Fixes a Lifetime or Yearly plan being told to buy a plan, and two smaller interface problems.",
      "sections": {
        "fixed": [
          "A Lifetime or Yearly plan could be told to buy a plan. If your computer was not yet activated on your licence, PinDrift showed 'Included with Yearly and Lifetime' with an upgrade link instead of telling you to activate the computer. There is now a separate message, PND-3565, that says what to actually do.",
          "The Apple ID password box has a show and hide toggle. It was the one password field in the sideload wizard without one.",
          "The account panel no longer offers a web dashboard to people with no account. It appeared on the 'No account yet' screen, directly under the button asking you to create one."
        ]
      }
    },
    {
      "version": "1.0.90",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.90",
      "summary": "The device-identity helper was a placeholder in every previous build. This is the first installer with the real one.",
      "sections": {
        "fixed": [
          "The device-identity helper was a placeholder in every previous build. It was compiled without the flag that includes the real implementation, so it started, connected and passed every check, then refused at the last step of sideloading with PND-3538. This is the first installer built with the real one, and the build now asks the helper what it is and fails unless it answers correctly.",
          "No more console window when you press Install. The five sideload helpers are console programs and PinDrift is a windowed app, so Windows was giving each one a black window of its own."
        ]
      }
    },
    {
      "version": "1.0.89",
      "channel": "stable",
      "released": "2026-08-13",
      "title": "PinDrift 1.0.89",
      "summary": "Sideloading the iPhone app works again. The helper that produces Apple device identity could not start on Windows since 1.0.84.",
      "sections": {
        "fixed": [
          "Sideloading works again. PinDrift runs with administrator rights because talking to an iPhone over USB needs them, and it deliberately starts the device-identity helper WITHOUT those rights so Apple's code never runs with administrator access. The reduced-rights account it built was missing a permission entry for your own account, which Windows needs in order to start the process at all, so the helper failed during startup and the wizard could only report that it had exited.",
          "PinDrift now uses the ordinary non-administrator account Windows already provides for this, and repairs the account it builds on systems that do not have one.",
          "The helper's error output was written into the same channel it uses to talk to PinDrift, so any diagnostic it produced was read as a corrupt reply. Real errors now arrive with their own codes.",
          "The helper no longer warns that it is running with administrator rights every time it correctly starts without them.",
          "Extra isolation for the helper, switched off in 1.0.86 while this was being investigated, is back on. It was not the cause."
        ]
      }
    },
    {
      "version": "1.0.72",
      "channel": "stable",
      "released": "2026-07-21",
      "title": "PinDrift 1.0.72",
      "summary": "Fixes the Add Developer Mode button and a few setup-screen glitches.",
      "sections": {
        "fixed": [
          "The 'Add Developer Mode to my iPhone' button now works. It was failing silently in the installed app; it now reveals the Developer Mode switch on your iPhone as intended.",
          "Clearer errors: if revealing Developer Mode does not work, PinDrift now shows the real reason instead of a misleading 'could not reach the daemon' message, and the error is no longer styled as a success.",
          "The dismiss (X) button on the Developer Mode help panel now closes it.",
          "The setup checklist spinner no longer freezes while Performance mode is on."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "6b8e01841fe4c09cf7ecce7b8e4300d370ea6adbc637eb30ca297523543d8802",
          "bytes": 108220676,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.71",
      "channel": "stable",
      "released": "2026-07-20",
      "title": "PinDrift 1.0.71",
      "summary": "Cleaner account panel for anonymous license-code accounts.",
      "sections": {
        "fixed": [
          "Anonymous license-code accounts now show your real plan (for example '1 Year') in the account panel instead of '10-Day Pass', and no longer show the internal account address or a placeholder avatar."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "50013f86396a1a1795f01a2c4c5a9145d6cdfa24b88c8a52dea730bc677c3717",
          "bytes": 108220022,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.70",
      "channel": "stable",
      "released": "2026-07-20",
      "title": "PinDrift 1.0.70",
      "summary": "Set your own Anti-Speed hold speed, cleaner QR codes, and a fix for recording a route from your phone.",
      "sections": {
        "added": [
          "Anti-Speed: set your own hold speed. Type any speed (in your mph or kph unit) next to the Limit presets and tap Set, and Anti-Speed holds you there instead of the road limit."
        ],
        "changed": [
          "Cleaner QR codes: the Anti-Speed and Device Control codes no longer show the logo in the middle, and the Anti-Speed code loses its white border, so they scan a touch faster."
        ],
        "fixed": [
          "Recording a route from your phone now shows 'Phone connected' on your PC the moment the phone opens the link, instead of sitting on 'Loading...', and the connecting spinner animates again."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "339bca14eb5e06eedba5a74914512cdaa971ab6a0b115c340aa9b2a082cfc0f3",
          "bytes": 108219927,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.69",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.69",
      "summary": "Stopping a spoof now stops for good, and the spoof buttons no longer flicker on the first spoof after an update.",
      "sections": {
        "fixed": [
          "When you Stop a spoof, PinDrift no longer briefly re-applies it a few seconds later (and no longer shows a false 'Location spoof cleared unexpectedly' error). Over a wireless connection with Lock on, a hiccup right after Stop could look like an accidental drop and get auto-restored; a Stop is now respected for good until you start again.",
          "The Stop / Move / Lock buttons no longer flicker a few times on the first spoof after launching or updating, while the phone settles between USB and Wi-Fi."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "f19d6a45c4f4d3662b99752f4917f5433ba0ff5ee5e5e5aab7f6c3f909951fbc",
          "bytes": 128843785,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.68",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.68",
      "summary": "Fixes wireless: your iPhone now actually stays connected over Wi-Fi after you unplug the cable.",
      "sections": {
        "fixed": [
          "The wireless connection now works. After pairing on the cable and unplugging, the phone was reconnecting over Wi-Fi/Tailscale but the tunnel crashed every time, so it dropped after a few seconds. PinDrift now builds that tunnel the way modern iPhones require, so an unplugged phone stays connected on the same Wi-Fi (or over Tailscale)."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "493229b9d77d8f7047ddd0282e91e21450bb2ff10c771c12c79cb6f74bf40817",
          "bytes": 128843608,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.66",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.66",
      "summary": "Your iPhone can now stay connected wirelessly after you unplug it - PinDrift pairs it for Wi-Fi the first time it's plugged in, with no button to press.",
      "sections": {
        "changed": [
          "The first time an iPhone is plugged in, PinDrift now automatically pairs it for wireless in the background, so it keeps working over Wi-Fi (or Tailscale) the moment you unplug the cable - no button to press. Staying on the same Wi-Fi as your PC is the most reliable; Tailscale covers off-network. Pairing is skipped while a spoof is running so it never disturbs an active session."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "1a08f7873fc343fdcee4433e5dbb5c303287b11bf4c9bcb9ac26ef5784a69a62",
          "bytes": 128427473,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.65",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.65",
      "summary": "Performance mode now does everything in one toggle with a Restart button, phone drive routes follow the roads from your current spot, and the desktop point list reorders correctly.",
      "sections": {
        "added": [
          "A 'Roads on Satellite' toggle in Settings, on both the app and the phone: overlay the street network on Satellite imagery, or keep it clean. Place labels are unaffected, and it only affects Satellite view.",
          "A Restart button next to Performance mode, so its deeper savings apply right away with no admin prompt."
        ],
        "changed": [
          "Performance mode and Low RAM mode are now one 'Performance mode' toggle that does everything both did. If you had either turned on, it stays on.",
          "On the phone Teleport tab, the map no longer jumps as you move the spoof dot; it only recenters if the dot would leave the screen. The desktop still follows the dot as before."
        ],
        "fixed": [
          "Phone drive routes now follow the roads from the very start when 'Start from current spoof' is on, instead of cutting a straight line.",
          "Reordering points in the desktop list now drops each point exactly where you place it, instead of one slot off."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "08930ed434ffc712f6744f614c9ae516bb98d73ff67537bdff7debdb38c52a6a",
          "bytes": 128425343,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.64",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.64",
      "summary": "Cleans up the phone's bottom buttons so nothing overlaps, fixes the Routes bar while a route is running, and stops a false error on your PC when you end a spoof from your phone.",
      "sections": {
        "changed": [
          "The phone's Teleport buttons no longer overlap: Start/Stop is centered, Faves is on the right, and Lock sits on the left with Move just above it, all cleanly spaced.",
          "Shortened the phone's Lock button label to just 'Lock' / 'Locked'."
        ],
        "fixed": [
          "The Routes bar at the bottom of the phone no longer breaks while a route is running - the Pause and End buttons sit inside the bar instead of drifting off.",
          "Stopping a spoof from your phone no longer shows a false 'Location spoof cleared unexpectedly' error on your PC. The PC now knows the stop was intentional."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "afe0c9b15df804a7315e6fd2892eae96bded37ef659c28329584ce926a84aa91",
          "bytes": 108082621,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.63",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.63",
      "summary": "A cleaner phone Teleport screen with an address search bar, plus a fix for the desktop Lock button when spoofing.",
      "sections": {
        "added": [
          "Address search on the phone: a search bar at the top of the Teleport and Routes tabs. Type a place and tap it to jump there.",
          "A Favorites menu on the phone's Teleport tab, opened by the Faves button."
        ],
        "changed": [
          "The phone Teleport screen is cleaner: the big bottom bar is gone, replaced by a centered Start/Stop button, Faves on the right, and (while spoofing) Lock on the left with Move just above it."
        ],
        "fixed": [
          "The desktop Lock button now works on the first press while you are spoofing. It was tracking the wrong setting, so the first click could do nothing; it now mirrors the phone's lock exactly, both ways."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "1b1e05064f29aeeb0ab3de952fb7bbc2d4b41ff6aac41225769a79f69241f70c",
          "bytes": 108082471,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.62",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.62",
      "summary": "New Low RAM mode: the leanest way to run PinDrift. It keeps releasing unused memory back to Windows so the app's memory footprint stays tiny.",
      "sections": {
        "added": [
          "Low RAM mode (Settings): the most efficient way to run PinDrift. It continuously releases unused memory back to Windows across the whole app, trims the map's tile memory, removes blur and shadows, and caps the frame rate harder. Restart after turning it on to also drop the GPU process and shrink caches for the biggest savings."
        ],
        "changed": [
          "Performance mode and Low RAM mode now work together: turning on Low RAM applies everything Performance mode does, plus more."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "54cd3881516e9a519b2f40720c3e86fa167cd0309cdac11a8be289c29e917f38",
          "bytes": 108078312,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.61",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.61",
      "summary": "The phone and desktop now stay in lockstep: matching tabs, a shared map view, and two-way spoof-lock. Plus a tidier phone spoof screen.",
      "sections": {
        "added": [
          "The map view is mirrored both ways: pan or zoom on the desktop and your phone follows along, and the other way around.",
          "Switching tabs on the desktop (Teleport, Route, Anti-Speed) now switches your phone to match. The phone already did this for the desktop; now it works both directions."
        ],
        "changed": [
          "The phone's 'Spoof' tab is now called 'Teleport', matching the desktop.",
          "Locking or unlocking the spoof from your phone now syncs to the desktop too (it already synced the other way).",
          "The phone spoof screen is tidier: Stop, Lock and Move now sit side by side as smaller, half-width buttons."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "4787e86f1e788b256f36e45ae36671337834f86253d3aecdca457ca302b7b1ad",
          "bytes": 108073333,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.60",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.60",
      "summary": "Desktop and phone now build routes together, live. Plus a smoother drag-to-reorder on the phone.",
      "sections": {
        "added": [
          "Live two-way route sync: edits you make on the desktop show up on your phone instantly, and vice versa - adding, moving, removing, or reordering points.",
          "A phone-only 'Desync from desktop' setting. Turn it on to build routes on the phone independently; off (default) keeps the phone and desktop in sync live."
        ],
        "changed": [
          "Reordering points on the phone is smoother: the point lifts when you pick it up and the others glide out of the way, and holding a point no longer tries to select or copy its text."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "549f4166629533c1ce35437ac25042757288283783b67078dc2a0a6f75a34151",
          "bytes": 108070228,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.59",
      "channel": "stable",
      "released": "2026-07-19",
      "title": "PinDrift 1.0.59",
      "summary": "Phone controller: clearer route start, reorderable points, smoother popup, and no accidental page zoom.",
      "sections": {
        "changed": [
          "On the phone, when 'Start from current spoof' is on, the route line now runs from your current spoofed spot to point 1, and that spot shows as a red dot so you can see the setting is on. With the setting off, that dot no longer appears on the Routes map.",
          "The Points popup opens and closes with a smooth animation."
        ],
        "added": [
          "On the phone, press and hold a point in the Points list to drag it into a new order."
        ],
        "fixed": [
          "The phone controller page no longer zooms when you pinch or double-tap outside the map."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "1dee98f9d04068285bf6c47fe2b2da94ef36458802325bd3dd754f80dec867f9",
          "bytes": 108067931,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.58",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.58",
      "summary": "Moving a route point on your phone now updates the line right away, on both phone and desktop.",
      "sections": {
        "fixed": [
          "When you drag a route point on your phone, the route line now follows it immediately instead of staying at the old spot, and the desktop mirror updates in step rather than lagging one move behind.",
          "The route line on the phone is now blue, matching the desktop."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "7d6e192071499da098516038971cdef1f7064eea10f48ac6ce81a295cf21d915",
          "bytes": 108065105,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.57",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.57",
      "summary": "The Anti-Speed panel now uses PinDrift's black-and-white brand style.",
      "sections": {
        "changed": [
          "Restyled the Anti-Speed screen to match PinDrift's brand: the QR scan card, numbered steps, and requirement notes now use the clean black-and-white look with the hard-edged shadow, instead of the old soft blue-tinted style."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "bc5169d1fef77366651e1eea6f7892733eac914421ef88117c35e3fc1789cafa",
          "bytes": 108066855,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.56",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.56",
      "summary": "The lock steps panel now uses PinDrift's real black-and-white brand style.",
      "sections": {
        "changed": [
          "The 'lock this spoof' panel now matches PinDrift's actual brand: clean black-and-white with the hard-edged shadow used across the website, instead of the blue tint it had before."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "1991c3c4bd4dd0db8799b1e8a5f6129ebe777e2ac31fff4c11173163545aa740",
          "bytes": 108066624,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.55",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.55",
      "summary": "The lock steps now match PinDrift's look, and the map no longer repeats the world when you zoom out.",
      "sections": {
        "fixed": [
          "The map no longer shows the world tiled several times when you zoom all the way out. It now stays as a single world.",
          "The lock steps panel now matches PinDrift's own styling in light, dark, and glass themes."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "35cf4452f6ab1a9bdedec739443e1b0ef808a220d6d837b8273a71d99e703e3e",
          "bytes": 108066310,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.54",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.54",
      "summary": "The lock guide is now a small panel that matches PinDrift's look, instead of a full-screen popup.",
      "sections": {
        "changed": [
          "The 'lock this spoof' steps now appear in a small panel next to the lock button, styled to match the rest of PinDrift and your light or dark theme, instead of a large popup that covered the screen."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "594ead2cacd2964dab505c01e9f92bb6ad8bdb72f523c50324b99d5281f59957",
          "bytes": 108066111,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.53",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.53",
      "summary": "Lock spoof now shows you how to keep your location on your iPhone, the way that actually works.",
      "sections": {
        "changed": [
          "Lock spoof now works the only way it reliably can: it shows you a short guide to lock the location on the iPhone itself. Turn off Developer Mode on your iPhone while spoofing, and the location holds until you restart the phone. Turn Developer Mode back on to spoof again.",
          "Updated the lock button, its tooltip, and the on-screen note to describe this, replacing older wording that promised the location would stay on its own (it never could from the computer alone)."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "95697e2a0879e477b2e9e43dc75171c194e800cb99a4d63ef74ad7742a125c98",
          "bytes": 108065669,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.52",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.52",
      "summary": "Start Spoofing greys out until your phone is reachable and a spot is pinned; no more duplicate update popup.",
      "sections": {
        "fixed": [
          "Start Spoofing is now greyed out until you have actually pinned a spot on the map, so you can't accidentally start a spoof with nothing selected.",
          "Start Spoofing is greyed out when your iPhone isn't responding (off, asleep, or off Wi-Fi), instead of letting you press it and hit a confusing error. It re-enables on its own the moment your phone answers again.",
          "Removed a second, duplicate 'update available' notification that came from the background engine. The in-app update prompt is the only one now."
        ],
        "changed": [
          "Tidied the Lock spoof description now that the Release button is gone."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "e5a041066c772a1920f8dfeb72aba622266b5ca424172ce16e9de263485ce16f",
          "bytes": 108064587,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.51",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.51",
      "summary": "Lock spoof now actually keeps your location when the phone disconnects.",
      "sections": {
        "fixed": [
          "Lock spoof now does what it says. Your iPhone keeps reporting the spoofed location after you unplug it or walk out of range. Previously PinDrift shut the spoof down the moment your phone dropped off, even with Lock spoof on, which is the one thing Lock exists to prevent.",
          "The spoof no longer stops when the connection to your phone flickers."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "31c79387f4ea5fbfb4d67d7efe15096088a4018fe6aa424709d4ea5c52ac305d",
          "bytes": 108065051,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.50",
      "channel": "stable",
      "released": "2026-07-17",
      "title": "PinDrift 1.0.50",
      "summary": "Removes the Release and Disconnect buttons, and starts counting spoofs for real.",
      "sections": {
        "removed": [
          "The per-phone Release and Resume buttons, and Disconnect all, are gone. They offered to disconnect your iPhone, which PinDrift cannot do: a spoof only survives while nothing tells the phone its session ended, and any disconnect from the computer tells it. Release either cleared your spoof or did nothing at all.",
          "To stop a spoof, press Stop. To disconnect a phone, unplug it or walk out of range, and with Lock spoof on the spoof keeps running."
        ],
        "changed": [
          "PinDrift now measures how long it actually spends spoofing, instead of only how long the app was open. Nothing before this release was recorded, so these counts start from today."
        ],
        "fixed": [
          "Usage figures no longer include sessions from the demo page opened in a web browser, which were being mixed in with real ones."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "cf8b5b06e3ae53a9a094048ce66499b1bf09dc402e1f4fd44750c023c6934dec",
          "bytes": 108061432,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.49",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.49",
      "summary": "Fixes 1.0.48, which stopped Lock spoof from working at all.",
      "sections": {
        "fixed": [
          "Lock spoof works again. In 1.0.48, Release disconnected the iPhone and cleared the spoof doing it, which is the opposite of what Lock is for. Release now leaves the spoof running, so you can unplug the phone or walk out of range and it keeps reporting the spoofed location.",
          "Connecting the phone remote no longer switches Lock spoof off behind your back.",
          "The Device Control button no longer blinks on and off when a phone is not responding.",
          "PinDrift writes its log file again. The installed app had never written one, so 'Collect logs' produced nothing useful and real faults were invisible."
        ],
        "changed": [
          "Release is about control, not connection: it stops PinDrift driving the phone, and with Lock spoof on it leaves the spoof alone. It does not disconnect the iPhone, and the app no longer claims it does. Keeping a spoof alive depends on the phone never being told the session ended, and any disconnect we perform from the computer tells it."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "bf4091825b9a6da8380a216052003b0b19be7aa21301a0abf0c796b4f9dc50e1",
          "bytes": 108063205,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.48",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.48",
      "summary": "Release now really disconnects your iPhone, and Lock keeps the spoof anyway.",
      "sections": {
        "added": [
          "Release now genuinely disconnects the iPhone. It drops every link between your PC and the phone instead of only stopping control, so the phone leaves the device list for real.",
          "With Lock spoof on, the phone keeps its spoofed location after you Release it. Your PC is no longer connected to it and PinDrift is no longer driving it, so the spoof stays put until you Resume, stop it from the phone, or restart the phone.",
          "Resume brings a released phone back. It rebuilds the wireless link from the saved pairing and picks the spoof up where you left off. If the phone is asleep, off Wi-Fi, or in airplane mode it cannot come back, and PinDrift now says so instead of failing quietly."
        ],
        "fixed": [
          "Release used to look like it did nothing: PinDrift rebuilt the connection to the phone within seconds of dropping it.",
          "Resume was broken and always failed with an error. It could never have worked in 1.0.45 through 1.0.47.",
          "The Device Control button no longer flickers on and off while a phone is not responding.",
          "The Lock spoof tooltip no longer claims the spoof cannot survive losing the connection. That turned out to be wrong, and it is the very thing Release with Lock relies on."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "847a2d8105736f1fbfd9826433fd61db28d62829526871ca0d0cb5f0c5514c0c",
          "bytes": 108064479,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.47",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.47",
      "summary": "Stops saying a phone is connected when it is not answering.",
      "sections": {
        "fixed": [
          "PinDrift could keep showing your iPhone as connected after it had actually left, for example when it dropped off Wi-Fi. The device row, the status pill at the bottom of the sidebar, and the Device Control button all said connected. PinDrift now checks the phone every few seconds and says 'Not responding' instead.",
          "The Device Control button no longer offers to control the spoof from a phone that is not answering."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "10c990efeb7e5bfd822e4d8bfa94b659ffa538819ebe9873e2fa116162edde5c",
          "bytes": 108058775,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.46",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.46",
      "summary": "A dropped connection no longer leaves you on your real location without saying so.",
      "sections": {
        "fixed": [
          "If the connection to your iPhone dropped, for example a Wi-Fi change, the spoof stopped but PinDrift kept showing it as running. Your phone was on its real location and nothing told you. PinDrift now notices and says so.",
          "Lock said the spoof survives unplugging and would last until the phone restarted. That was never true, and the wording has been corrected everywhere. Lock keeps PinDrift from clearing your spoof; it cannot keep one alive if the connection itself drops."
        ],
        "changed": [
          "When a dropped connection stops your spoof, PinDrift now puts your last location back on its own once the phone is reachable again. A phone you released on purpose is left alone, and Anti-Speed still shows your real location when you slow down."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "0e40e75439be0d5c434231a70328419ef30ed112d945063836d3ad4e60456e35",
          "bytes": 108057385,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.45",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.45",
      "summary": "Actually keeps your spoof when you release a phone with Lock on.",
      "sections": {
        "fixed": [
          "1.0.44 was meant to stop Release clearing your spoof when Lock is on, and it did not work. Releasing a phone with Lock on now genuinely keeps the spoof running.",
          "Releasing a phone with Lock off still clears the spoof and returns the phone to its real location, as before."
        ],
        "known_issues": [
          "Lock protects your spoof from PinDrift clearing it. It cannot keep a spoof alive if the connection to the phone itself drops, for example if the phone leaves Wi-Fi or the computer sleeps. In that case reconnect the phone and PinDrift puts your last location back."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "4a5d1af4c2aa8671cd35b44674c982a0a943c2813e5cd625d9a3b7cacba7f058",
          "bytes": 108050726,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.44",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.44",
      "summary": "Releasing a phone no longer reveals your real location when Lock is on.",
      "sections": {
        "fixed": [
          "With Lock on, disconnecting a phone in the app cleared the spoof and showed your real location. Lock is now respected: the spoof stays, and only Stop Spoofing clears it.",
          "That also removed a false 'Location spoof cleared unexpectedly' (PND-6004) error when you disconnected a phone on purpose."
        ],
        "changed": [
          "Reconnecting a phone now picks the spoof back up where you left off. If the spoof is still running it is left alone, so there is no stop-and-restart jump.",
          "The device row now says 'Not controlled' with Release and Resume buttons. It used to say 'Disconnected' for a phone that was still connected, because the button stops PinDrift controlling the phone rather than unplugging it."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "30f12e1489e876d7ddaa849b592e454d284870986553ad2cc9b86f35e9e924f9",
          "bytes": 108049817,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.43",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.43",
      "summary": "Spells the name consistently as PinDrift.",
      "sections": {
        "fixed": [
          "The app window title and the installer spelled the name Pindrift in a few places. They now read PinDrift, matching everywhere else."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "fd924ebdc7c18f1b3ef5a98f55f4d61b76dc8bbd8ea6c711019bb273a01aec52",
          "bytes": 108046947,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.42",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.42",
      "summary": "Fixes the window appearing before the map has drawn.",
      "sections": {
        "fixed": [
          "At launch the window could appear for a moment with an empty map before the map drew itself. PinDrift now waits for the map to draw before showing the window. If the map is slow or you are offline, the window still opens rather than making you wait."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "cd447741f51eeefe84ee79c72dfa2cdd90e09268e739bb11c8f4e62a14c45013",
          "bytes": 108046982,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.41",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.41",
      "summary": "Fixes the developer panel flashing on screen at launch.",
      "sections": {
        "fixed": [
          "The developer panel and the Nerd Stats overlay could flash across the screen for a split second while the app was starting. They now stay hidden until you open them."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "480711932a5a89e1d7deaef5a2e681c42f5e7297a24ddbf6c4da7af4974389a0",
          "bytes": 108046027,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.40",
      "channel": "stable",
      "released": "2026-07-16",
      "title": "PinDrift 1.0.40",
      "summary": "Fixes the background engine being left running after the app closes.",
      "sections": {
        "fixed": [
          "PinDrift's background engine (PinDriftEngine) could stay running after the app was force-closed, for example with End task in Task Manager. It now shuts down together with the app.",
          "Any leftover engine from an older version is cleared automatically the first time you open this one. A leftover engine could hold on to the port PinDrift needs, which could stop a later launch from seeing your iPhone."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "42e452ac4b61adabc096a9eaebbeba840fa1c8b878208e91d64df7c5a29c9131",
          "bytes": 108046008,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.39",
      "channel": "stable",
      "released": "2026-07-15",
      "title": "PinDrift 1.0.39",
      "summary": "Fixes garbled on-screen text from 1.0.38.",
      "sections": {
        "changed": [
          "Pay with crypto has an anonymous option: check out with no email at all, and get a one-time license key instead. Save it, because it is the only way back in and it cannot be recovered.",
          "Open web dashboard signs you straight in when you are already signed in to the app."
        ],
        "fixed": [
          "Some on-screen text (for example the wait message on the crypto payment screen) showed up as garbled characters in 1.0.38. This is fixed."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "ae15197ee285d4e6e4f55d1ea1fcd983b383a7dac1a8986df7e7c8a776c7c622",
          "bytes": 108042843,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.38",
      "channel": "stable",
      "released": "2026-07-15",
      "title": "PinDrift 1.0.38",
      "summary": "Anonymous crypto checkout, and one-click web dashboard.",
      "sections": {
        "changed": [
          "Pay with crypto now has an anonymous option: check out with no email at all. You get a one-time license key instead of an account. Save it, because it is the only way back in and it cannot be recovered.",
          "Paying with crypto and an email works as before. Either way, crypto is the same price as card.",
          "Open web dashboard now signs you straight in. If you are signed in to the app, it no longer asks you to log in again on the website."
        ],
        "fixed": [
          "Pay with crypto is no longer blocked behind entering an email first."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "ea180e71fa30bdc45354712a72cb2b4ccbc38f64ae87e9fda1e5d54579601553",
          "bytes": 108043180,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.37",
      "channel": "stable",
      "released": "2026-07-14",
      "title": "PinDrift 1.0.37",
      "summary": "New pricing: $20 a year, or $30 for lifetime.",
      "sections": {
        "changed": [
          "New pricing: Yearly is now $20 a year, and Lifetime is $30 one time. The 10-Day Pass and Monthly plans are no longer sold.",
          "Already own a Pass, a Monthly plan, or a 6-month crypto license? Nothing changes. Your license keeps working exactly as before.",
          "Paying with cryptocurrency now matches card pricing: $20 for 1 year, $30 for lifetime."
        ],
        "fixed": [
          "An expired pass now locks the app immediately when you open it, instead of allowing access for a while first."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "39fed3bbe04402125058bc6ed632af25d2995e624f364597389434fad64f9f72",
          "bytes": 108040765,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.36",
      "channel": "stable",
      "released": "2026-07-03",
      "title": "PinDrift 1.0.36",
      "summary": "Activate with a license code.",
      "sections": {
        "changed": [
          "You can now activate with a license code (from an anonymous crypto purchase): open the upgrade window and choose 'Have a license code?'."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "17f3ff129cc5218bba5db17ec940732674de8a48559fab4c567edd099bb72f56",
          "bytes": 108040290,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.35",
      "channel": "stable",
      "released": "2026-07-02",
      "title": "PinDrift 1.0.35",
      "summary": "Crypto coin/network split, email receipts, faster launch.",
      "sections": {
        "changed": [
          "Crypto checkout now asks for your coin first, then the network. The pay screen confirms it is safe to close once you have sent, and every crypto purchase emails you a receipt. Faster app launch; the developer panel no longer appears on startup."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "1dcd7cdbbdcfbed749e45628e328d068f1338bdbfab7261ba5be54a7f6a90c6e",
          "bytes": 108039710,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.34",
      "channel": "stable",
      "released": "2026-06-28",
      "title": "PinDrift 1.0.34",
      "summary": "Pay with crypto (USDC/USDT).",
      "sections": {
        "changed": [
          "You can now pay with cryptocurrency (USDC or USDT) for a 6-month, 1-year, or lifetime license, on Base, Polygon, Arbitrum, Optimism, Avalanche, Solana, or Tron. Pick 'Pay with crypto' on the upgrade screen; your license activates automatically once the payment confirms."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "eaa8a5f3f114971b7f519a97b2ee89900da12966b6d38690ef2c4ec86c6ced6d",
          "bytes": 108039091,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.33",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.33",
      "summary": "PinDrift logo in every QR code.",
      "sections": {
        "changed": [
          "Every generated QR code (Device Control and Anti-Speed) now shows the PinDrift mark in its center, on a clean white pad. The QR error correction is set high enough that the logo never affects scanning."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "766d0162ebab9dfa377551cac08d0d3dbff14bc8801c4c2430be3d57b3cc071b",
          "bytes": 108037457,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.32",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.32",
      "summary": "Tutorial closing animation.",
      "sections": {
        "changed": [
          "The setup tutorial now closes with a smooth animation that mirrors its opening, instead of disappearing instantly."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "38187de6effcbbe2ff59a02ebc0cc0bf30d9ca37d76424a6470371d323c4a5b6",
          "bytes": 108037164,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.31",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.31",
      "summary": "Consistent sidebar height.",
      "sections": {
        "fixed": [
          "The sidebar is now the same height on every tab (it no longer shrinks or grows depending on the tab). It fills the window floor-to-ceiling at normal sizes, and is only shortened and centered when the window is very tall, like maximized on a big monitor."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "3a3966a334c0748085cd4fa836310785400b523c9f56bfa2c393d1d7a218ba0c",
          "bytes": 108037130,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.30",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.30",
      "summary": "Loader + Anti-Speed QR polish.",
      "sections": {
        "changed": [
          "The address-search 'Searching' indicator now shows a sweeping progress bar instead of static dots.",
          "The Anti-Speed QR code now sits in a clean themed scan card instead of a bare white box on the dark sidebar."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "124532cac8bafcebd6d512f1e688bf3c026b53453d4be52d358c48259724a262",
          "bytes": 108036901,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.29",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.29",
      "summary": "Light/dark picker in setup + centered sidebar.",
      "sections": {
        "changed": [
          "The first-run setup now lets you choose Light or Dark mode right alongside the units picker.",
          "The sidebar is vertically centered and sizes to its content instead of stretching the full window height."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "fd5ca5dc0cace9420029db1a2750c81a456bd9856e8dfee6e719787c9b07819b",
          "bytes": 108036984,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.28",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.28",
      "summary": "Layout polish.",
      "sections": {
        "changed": [
          "The Nerd Stats overlay is now vertically centered by default (and still draggable).",
          "The sidebar sizes to its content instead of stretching the full window height when fullscreen, and scrolls if its content is taller than the window.",
          "When the window is narrowed, the sidebar keeps an even margin on both sides instead of touching the right edge."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "f1cc97cadca48c90c8ba4c8b80150916b576343a6236ab979104a65ca44e5547",
          "bytes": 108036322,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.27",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.27",
      "summary": "Small UI polish.",
      "sections": {
        "changed": [
          "The Presets header arrow now sits right next to the word instead of at the far edge.",
          "The Device Control window opens and closes with a springy pop animation.",
          "The Nerd Stats overlay is now draggable - grab its title bar to move it anywhere on screen, and it remembers its position."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "26de6d447ddd2d790618d8a49ffbd9a4967f2515e253db975d96f85588d3cb07",
          "bytes": 108036187,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.26",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.26",
      "summary": "Press Enter to activate.",
      "sections": {
        "changed": [
          "On the license-activation screens you can now press Enter to submit: Enter in the email field sends the code, and Enter in the 6-digit code field activates - no need to click the button."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "b68bc48a0910fa9208e4fa245d5a5630b792d34a2b5780e1603558a020845a03",
          "bytes": 108035619,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.25",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.25",
      "summary": "Device panel fix for the dark/glass theme.",
      "sections": {
        "fixed": [
          "On the dark glass theme, the device popup no longer shows the old duplicate device card under the per-phone row. Each phone is now a single clean row: an outline phone icon, the phone's name, how it's connected (USB, Wi-Fi, or Tailscale), and its own Disconnect / Reconnect button."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "6bfa8ddf8fa014e6b8ccdcd7b509b2aef742b10a850f47b073bf124d0cf5ca4d",
          "bytes": 108035534,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.23",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.23",
      "summary": "Cleaner device panel.",
      "sections": {
        "changed": [
          "Each phone now appears as a single clean row: an outline phone icon, the phone's name, how it's connected (USB, Wi-Fi, or Tailscale), and its own Disconnect / Reconnect button."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "03170bd1247989609a9d442f0df6bd557d6762f64d7638ec64fbe6c29e65bd13",
          "bytes": 108035444,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.22",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.22",
      "summary": "Clearer device list.",
      "sections": {
        "changed": [
          "The device panel now shows one row per phone (even with a single phone), each with its own Disconnect / Reconnect button, and no longer shows a '?' when a phone's model or iOS version isn't known yet."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "079defeec6fc074f2d62ad3b7efafe290f925d526d8426d6ee7792e77922ba68",
          "bytes": 108035425,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.21",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.21",
      "summary": "Clearer per-phone connection controls.",
      "sections": {
        "changed": [
          "Each connected phone now has its own Disconnect / Reconnect button right in its row, so you can manage phones individually instead of all at once."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "7e32d2149f527763e6694a64776b36beacc849dc80845fe724a827cea2722df2",
          "bytes": 108035016,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.20",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.20",
      "summary": "A small UI polish to the sidebar popups.",
      "sections": {
        "changed": [
          "The Settings, Account, and device-info popups now open and close with the same springy pop animation as the connection-help window."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "d92d184b76ee97ecbbcb2082f6871948f0556069ce30ff41b177ac746e2c8c26",
          "bytes": 108034214,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.19",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.19",
      "summary": "Paid licenses now work fully offline for the entire purchased duration.",
      "sections": {
        "changed": [
          "Your paid license now keeps working offline for as long as you've paid for - a Lifetime license works indefinitely with no internet. Access is secured with a signed, device-bound entitlement, so it can't be copied to another PC.",
          "Reliability and security hardening across licensing."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "341e6aa41638d94cf0a651339326c6448e6982f2d061933ff89decc54847d2cb",
          "bytes": 108034181,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.17",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.17",
      "summary": "Updates are picked up faster - the app checks every 5 minutes.",
      "sections": {
        "changed": [
          "PinDrift now checks for new versions every 5 minutes instead of every 30, so a new release is picked up within minutes. The check is a tiny request to GitHub; nothing changes server-side."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "1dbd989126b4152756175def83cac8d9d7ec298073c233d0095d5abf684e80ca",
          "bytes": 108031049,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.16",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.16",
      "summary": "PinDrift now asks for admin permission only once, not every launch.",
      "sections": {
        "changed": [
          "PinDrift now requests admin permission only the first time you run it after installing. Every launch after that starts silently with no prompt, by relaunching itself elevated through a one-time Windows scheduled task. If that ever fails it safely falls back to a normal admin prompt, so it can never fail to start."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "4838d7a637b075008c7382f319372e5ddc30c3aff2d10b9212385ce80e6ed9ce",
          "bytes": 108031026,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.15",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.15",
      "summary": "Updates now apply silently, with no installer wizard.",
      "sections": {
        "changed": [
          "Applying an update no longer shows the full installer wizard. After you click to update, the app closes, swaps in the new version, and reopens on its own. Takes effect for updates installed from this version onward."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "aef0823fb203c13c7fcb49c201218c7087581efa477d531c213a06b83cdd8d3f",
          "bytes": 108029436,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.14",
      "channel": "stable",
      "released": "2026-06-27",
      "title": "PinDrift 1.0.14",
      "summary": "Account-claim protection, new-PC alerts, and a stronger AI-use notice.",
      "sections": {
        "changed": [
          "An unbound paid license can no longer be claimed just by knowing the email address. Activating it on a PC now requires a one-time code sent to the account's own inbox. Normal purchases are unaffected.",
          "You now get an email alert whenever your license is activated on a new PC.",
          "The proprietary and AI-use notice is stronger and restores itself if removed from the install folder."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "1f59eba2d76f7319f0ee2d357eb1cd901c998c32fe5326874f8a26fd94a2b074",
          "bytes": 108029393,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.13",
      "channel": "stable",
      "released": "2026-06-26",
      "title": "PinDrift 1.0.13",
      "summary": "Fixes updates getting stuck on 'PinDrift cannot be closed'.",
      "sections": {
        "fixed": [
          "'Update now' could get stuck on 'PinDrift cannot be closed. Please close it manually'. The app now shuts down cleanly, and its background engine releases its files, before the installer runs - so updates apply without any manual steps."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "08c42f5f1f75a05fe9efcf68bf54a2a4d776bc313ae755c3fbaea911ba1ef886",
          "bytes": 108027419,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.12",
      "channel": "stable",
      "released": "2026-06-26",
      "title": "PinDrift 1.0.12",
      "summary": "Your saved login is now encrypted and locked to your PC.",
      "sections": {
        "changed": [
          "Your saved login is now encrypted and tied to your PC, so it can't be copied to another machine or hand-edited in the app files to impersonate another account.",
          "Added clear proprietary and AI-use notices to the app."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "7f38a8ed7efb615415a4b6e41eafc35ddd9c67dc477dc7721a992175c2fbddff",
          "bytes": 108027234,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.11",
      "channel": "stable",
      "released": "2026-06-26",
      "title": "PinDrift 1.0.11",
      "summary": "You now stay signed in across updates.",
      "sections": {
        "fixed": [
          "Updating the app could drop you back to the sign-in screen. Your login is now stored in a durable file that survives updates, so you stay signed in from one version to the next."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "1b256823fd7c60de5a0193f5446b0da24c82580d086e237ee0889ee208b82b3c",
          "bytes": 108025279,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.10",
      "channel": "stable",
      "released": "2026-06-26",
      "title": "PinDrift 1.0.10",
      "summary": "Cleaner naming: the app and its background engine now appear under one consistent PinDrift name in Task Manager.",
      "sections": {
        "changed": [
          "The app and its background engine now show under a single consistent PinDrift name (PinDrift and PinDriftEngine) in Task Manager, instead of a mix of differently-named processes.",
          "Carries forward all the 1.0.9 performance and footprint improvements."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "29d9c84e1dec0aa38198559808d28cef765da447d3487de98ec01f4e82139ae8",
          "bytes": 108024322,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.9",
      "channel": "stable",
      "released": "2026-06-26",
      "title": "PinDrift 1.0.9",
      "summary": "Performance + footprint pass for older / low-end PCs: faster launch, smaller download, lighter background CPU, and an even lighter Performance mode.",
      "sections": {
        "changed": [
          "Faster, lighter launch: text no longer waits on a web-font download to paint, and the Apple Devices check is a fast probe instead of a PowerShell call on every start.",
          "Smaller download and install: the bundle drops unused image-codec libraries and dead assets, and the in-app UI is minified for quicker loading on slow machines.",
          "Performance mode is even lighter: it stops more background work, skips extra map layers, and fully disables the FPS overlay.",
          "Quieter background CPU: the engine no longer re-checks Developer Mode every poll and skips the Android probe when no Android device is connected."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "53aec38d28fe73c77c50823f08b586d66e52b97fcb704c3b8acd595bbb5cdd3d",
          "bytes": 108024093,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.8",
      "channel": "stable",
      "released": "2026-06-25",
      "title": "PinDrift 1.0.8",
      "summary": "Lower memory use: frees cached map tiles after a sustained minimize, and a thinner tile cache in Performance mode.",
      "sections": {
        "changed": [
          "PinDrift now frees its cached map tiles after the window has been minimized for a while (the common 'minimized while a spoof runs' state); they re-load automatically when you return. A quick minimize/restore does not purge, so there is no tile flicker during normal use.",
          "Performance mode now also keeps a thinner map-tile cache in memory."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "cb41b38212a62a63d2ce1c1ca51923bfca6028ace71ffde42bcae5c738efa374",
          "bytes": 112173007,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.7",
      "channel": "stable",
      "released": "2026-06-25",
      "title": "PinDrift 1.0.7",
      "summary": "New Performance mode: a Settings toggle that cuts GPU and CPU usage for older or battery-powered machines.",
      "sections": {
        "added": [
          "Performance mode (Settings -> Display): removes the glass blur and shadows, stops background animations, caps the frame rate, makes the map move instantly, and slows background updates. Off by default; spoofing speed and accuracy are unaffected."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "29745a43387694248b10dfaafdd9e5b46418c24722e66bb2d29ebbcc7e9ba138",
          "bytes": 112172466,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.6",
      "channel": "stable",
      "released": "2026-06-21",
      "title": "PinDrift 1.0.6",
      "summary": "Fixes a false 'active on another PC' lock, keeps you signed in across updates, and restores the Windows taskbar icon.",
      "sections": {
        "fixed": [
          "Fixed a false 'This license is active on another PC' lock that could appear on the same PC after an update. Your device identity is now stable across network-adapter changes (iPhone over USB, Tailscale, VPNs), and the server automatically heals a binding whose hash shifted.",
          "You now stay signed in across updates: your app data (login and install identity) is preserved on update and reinstall instead of being cleared.",
          "Removed a spurious 'No device connected' (PND-9030) error that could appear on launch before a phone was plugged in.",
          "Restored the missing Windows taskbar icon."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "6fc2cdf6095595dfd39e47a39ff130af5af3f13e36432f240ad574113cf4219d",
          "bytes": 112170431,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.5",
      "channel": "stable",
      "released": "2026-06-21",
      "title": "PinDrift 1.0.5",
      "summary": "Tutorial step card now stays fully on-screen near any window edge.",
      "sections": {
        "fixed": [
          "The first-launch tutorial card could be cut off below the window on the Device Control, Toolbar, and Discord steps; it now senses the window edge and flips or clamps to stay fully visible, and re-positions on resize."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "6d19ec75b09ebf838f70f4d365ca367488aed62bea4bbcd6cb6b44e2090f3d2e",
          "bytes": 112162803,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.4",
      "channel": "stable",
      "released": "2026-06-21",
      "title": "PinDrift 1.0.4",
      "summary": "Much faster install: the app now writes ~1,160 files instead of ~6,700.",
      "sections": {
        "changed": [
          "Removed a 5,500-file code-autocompletion library (jedi) that was bundled transitively but never used at runtime. Fresh installs and auto-updates are dramatically quicker because Windows Defender has far fewer files to scan."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "05d887f6edcab069824a530c86bc47f065d669c0c7ad75c632e452983ad0abc3",
          "bytes": 112162442,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.3",
      "channel": "stable",
      "released": "2026-06-21",
      "title": "PinDrift 1.0.3",
      "summary": "Satellite and dark by default, plus a refreshed first-launch tutorial.",
      "sections": {
        "changed": [
          "Default map is now Satellite, with the dark theme.",
          "First-launch tutorial now covers all three tabs (Teleport, Route, Anti-Speed) and adds steps for Device Control, the toolbar icons, and the community Discord.",
          "Removed a stray theme toggle that overlapped the tutorial."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "83076f5cb306bf9cd4ac1c16449862eeb8c1edd0362152a58bef8413d439bb97",
          "bytes": 116179695,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.2",
      "channel": "stable",
      "released": "2026-06-21",
      "title": "PinDrift 1.0.2",
      "summary": "Fixes the update notification overlapping the window controls, and a spurious 'No device selected' error that could appear on startup with a phone connected.",
      "sections": {
        "fixed": [
          "Update notification toast moved below the title bar so it no longer overlaps the minimize / maximize / close controls.",
          "Removed a spurious 'No device selected' (PND-9030) error on startup: the sticky-lock auto-resume no longer reports an error before the device selection is ready."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "8502f7ef0c014310d66511a1174d03b384519f4b18b57c57ec55de7780488709",
          "bytes": 116179308,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.1",
      "channel": "stable",
      "released": "2026-06-21",
      "title": "PinDrift 1.0.1",
      "summary": "Maintenance release that validates the automatic in-app updater end to end. No functional changes versus 1.0.0.",
      "highlights": [
        "Confirms background auto-download + one-click restart updating"
      ],
      "sections": {
        "changed": [
          "Version bump to 1.0.1; no functional changes from 1.0.0."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "3e252a7434d1297d8b491a9710f4232168a335087aa3d873905535b68c558335",
          "bytes": 116178740,
          "signed": false
        }
      }
    },
    {
      "version": "1.0.0",
      "channel": "stable",
      "released": "2026-06-20",
      "title": "PinDrift 1.0",
      "summary": "The first stable release. Independent multi-device control lets you place and move each connected iPhone separately, with per-device routes and drag-to-move pins. Anti-Speed adds a phone-side speed governor handed off by QR, and new devices auto-open a guided setup sheet.",
      "highlights": [
        "Independent multi-device control: each connected iPhone gets its own location, route, and saved spot - they no longer all move together",
        "Per-device routes: run different routes on different phones at the same time",
        "Drag a device's pin directly on the map to move it",
        "Auto-detect: plug in a new iPhone and PinDrift opens the setup sheet automatically",
        "Anti-Speed: a phone-side live speed governor you hand off from the desktop via QR",
        "Persist-after-disconnect lock, kept in sync between the desktop and the phone remote"
      ],
      "sections": {
        "added": [
          "Per-device (per-UDID) control plane: independent placement, routes, and lock state for every connected iPhone.",
          "Auto-detect new device: connecting an unconfigured iPhone opens a guided per-device setup sheet.",
          "Draggable secondary-device map pins.",
          "Anti-Speed phone module: a live accelerometer + heading speed governor, handed off from the desktop tab via a QR code.",
          "Phone remote-control hand-off for driving a session from the phone."
        ],
        "changed": [
          "App version bumped to 1.0.0 across the installer, backend, and UI.",
          "The lock control is now strictly a persist-after-disconnect setting, kept in sync between the desktop and the phone remote."
        ],
        "known_issues": [
          "The installer is unsigned; SmartScreen shows 'Windows protected your PC'. Verify the SHA-256 against this page or /dev/smartscreen.html before running.",
          "macOS host build is not yet available; PinDrift is Windows-only on the host side for now.",
          "Multi-device is validated in simulation and in single-device use; running 2+ physical iPhones at once is newly shipped in 1.0."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/win",
          "sha256": "b73ab164e533402b6c2635d56ca1355c1bdf012c10bb1003f0a35c2d5a25f84d",
          "bytes": 116178839,
          "signed": false
        }
      }
    },
    {
      "version": "0.2.0-preview",
      "channel": "beta",
      "released": "2026-05-11",
      "title": "Tools tab preview",
      "summary": "New Tools tab introduces geofences, recordings, triggers, convoy mode, course importer, and the measure tool. Pin annotations and favorite folders ship alongside. The HTTP API and CLI design is locked; implementation lands in 0.2.0 final.",
      "highlights": [
        "Geofence designer: draw circles or polygons on the map, then fire enter / exit / dwell on demand to test app triggers",
        "Recorder / replay: capture the real GPS trace from your phone over time, replay it later",
        "Triggers & scheduling: time-of-day, geofence, and calendar-based scenario triggers",
        "Convoy mode: multiple iPhones move together along a route with per-device offsets",
        "Course importer: paste a public Strava / RideWithGPS / Komoot URL to pull a route into the Route tab",
        "Mixed-mode routes: walk -> drive -> walk legs with per-leg mode + speed",
        "Pin annotations: notes on waypoints and favorites",
        "Favorite folders: group favorites into Home / Office / QA / Demo categories",
        "Measure tool: click two points for distance and bearing"
      ],
      "sections": {
        "added": [
          "New top-level Tools tab in the sidebar.",
          "Geofences: draw circles or polygons on the map, persist as named regions with metadata, and trigger enter / exit / dwell actions from the tools list.",
          "Recordings: capture mainPin location samples once per second, save as named recordings, replay at original tempo. Export individual recordings as JSON for sharing.",
          "Triggers / scheduling: time-of-day, geofence-transition, and calendar-tagged triggers persist between launches; enable / pause each independently.",
          "Convoy mode: roster of all connected iPhones; designate one as anchor and configure per-device north/east offsets in meters. Apply to fan a single route across the convoy.",
          "Course importer: paste a public Strava / RideWithGPS / Komoot URL. PinDrift verifies the host and imports the course into the Route tab.",
          "Measure tool: click two points on the map. Distance in metric + imperial. Bearing in degrees + cardinal direction.",
          "Pin annotations: optional note field on waypoints and favorites; stored in scenario export.",
          "Favorite folders: optional folder name per favorite. Folders are collapsible, renameable, and persist their collapsed state across launches.",
          "Mixed-mode routes: new 'Mixed' option in Route mode segmented control. Insert leg breaks between waypoints; each leg has its own mode and speed cap.",
          "Anti-crack hardening architecture document at docs/hardening-architecture.md (internal).",
          "HTTP API + CLI design document at docs/api-and-cli.md (internal). Implementation targeting 0.2.0 final."
        ],
        "changed": [
          "Sidebar grew from four tabs to five (Device, Location, Route, Tools, Settings).",
          "Tab-switcher hides the static-spoof pin on tabs where it would compete with other primary visuals (Route, Tools, Settings).",
          "License policy: previously 'one active host PC, unlimited free transfers, unlimited phones connected'. Now 'one active host PC, one free transfer per 180-day window, several phones connected'. The 180-day cooldown prevents license-as-a-service abuse; emergency transfers (theft, hardware failure) can still be expedited with documentation. The multi-device cap reflects the realistic single-host ceiling on commodity hardware - see dev/multi-device-scaling.html for the reasoning. Existing v0.1.0 licenses are grandfathered: the cooldown only begins on the next transfer initiated after May 11, 2026."
        ],
        "known_issues": [
          "Recorder samples are taken from the static-spoof pin in mockup mode. In production they come from the daemon's per-device location stream.",
          "Course importer's mockup mode generates a plausible route around the current pin; production daemon performs the real fetch + GPX parse server-side to avoid CORS.",
          "Calendar trigger backend is stubbed; v0.2.0 final integrates with Outlook / Google Calendar via OAuth."
        ]
      }
    },
    {
      "version": "0.1.0",
      "channel": "beta",
      "released": "2026-05-09",
      "title": "Public beta",
      "summary": "First public build of PinDrift. iOS spoofing, multi-device, wireless mode, Windows installer, and a full website ship together.",
      "highlights": [
        "iOS 17+ tunneling via the developer-disk-image channel (RemoteXPC tunneld)",
        "Live map, static spoof, routes (walk / bike / drive), favorites, presets, match clock",
        "Multi-device fan-out for Lifetime accounts",
        "Wireless mode after one-time USB pair",
        "Frameless Electron UI with custom title bar"
      ],
      "sections": {
        "added": [
          "PinDrift launcher (Python / PyInstaller) with self-elevation to admin so Apple's mobile-device pipe is reachable on locked-down machines.",
          "Splash + tray UI: native splash on cold boot, system-tray icon for resume / pause / quit while the UI is hidden.",
          "Single-instance guard via a Win32 named mutex (Global\\PindriftSingleton). Launching twice raises the already-running window.",
          "Managed-process supervisor for tunneld (port 49151) and the PinDrift daemon (port 49152). Crashes are restarted with exponential backoff; persistent failure surfaces a tray notification.",
          "Tunneld watchdog: cross-checks usbmuxd against tunneld every 5 seconds; if tunneld is blind to a phone usbmuxd can see for more than 15 seconds, tunneld is restarted in place.",
          "Auto-start at login via Windows Task Scheduler (opt-in during install).",
          "Crash reporter: bundles the last 5 minutes of logs, scrubs lat/lng with a generic regex sweep before upload, requires explicit user confirmation to send.",
          "DPAPI-encrypted local license token so the activation survives reboots without re-entering credentials.",
          "Damm-checksum 33-character license keys (PINDRIFT-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX, 125 bits, Crockford base32).",
          "Frameless Electron UI with custom Minimize / Maximize / Close controls wired through context-isolated IPC.",
          "Frontend Settings panel cleanup: subscription tier and billing references removed (we're not subscription anymore); collapsible details for advanced toggles.",
          "Single-phone UX: the per-row mini-card hides when only one device is connected; IDLE / SPOOFING pill moves into the main device-card header.",
          "Refund modal aligned with the 14-day / 5-minute refund policy and the Lunis Group competitor-termination clause.",
          "Agreement modal on first launch: blocks the tutorial until the user accepts Terms, Privacy, and Acceptable Use; AAA-arbitration / Fulton County GA forum.",
          "GPX import for routes (drop a .gpx from a bike computer / watch onto the Route tab)."
        ],
        "changed": [
          "Repositioned: PinDrift now sells one host PC at a time, with a 180-day cooldown between transfers. Previous marketing language about 'unlimited PCs' and 'unlimited transfers' has been retired across all affected pages.",
          "Refund policy refactored: zero-usage gate replaced with a 14-day / under-5-minute cumulative active-spoof window. Heartbeat counters (spoof_seconds) enforce this server-side at refund time.",
          "Account model: one license, one active host PC, up to 3 connected phones, one free PC transfer per 180-day window via the web portal.",
          "Pricing simplified to Lifetime $30 one-time, Enterprise custom. Subscription tier was never shipped and has been removed from the codebase.",
          "Country gating: PinDrift is US-only for v0.1. We do not sell to EU / EEA / UK / Switzerland; the checkout will block these countries until the GDPR work in v0.3 lands.",
          "Trademark notices on /vs.html and /dev/apps-and-detection.html updated to name every referenced third party for nominative-fair-use protection."
        ],
        "fixed": [
          "Tunneld 'blind state' after USB replug events: previously required a manual restart, now self-heals via the watchdog within ~15s.",
          "PowerShell mojibake on terms.html (Ãƒâ€šÃ‚Â§ for Ã‚Â§): files were being read as Latin-1 and re-written as UTF-8, double-encoding the section sign. Build process now pins UTF-8 round-trip.",
          "License card layout: long keys no longer wrap weirdly; Show/Hide toggle now lives in the row header (1Password-style code-block).",
          "FAQ inconsistencies: license / move-PC / company-shutdown questions rewritten to match the 1-host-PC + free-transfers model.",
          "Apple Devices service misdiagnosis: launcher used to claim 'Apple Mobile Device Service is not installed' even when the Microsoft Store Apple Devices app was running. Detection now checks for the usbmuxd TCP socket on port 27015 instead of the legacy Windows service name."
        ],
        "security": [
          "Update check is the only outbound call during normal operation besides the licensing heartbeat. The request carries no UDID, email, license, or version-fingerprint information.",
          "Update check pins to https://pindrift.app and rejects cross-host redirects.",
          "Local license tokens are DPAPI-bound to the Windows user account, so copying the token file to another user or machine does not authorize that user."
        ],
        "known_issues": [
          "Code-signing certificate is not yet in place. The installer is unsigned in v0.1.0; SmartScreen will show 'Windows protected your PC'. See /dev/smartscreen.html for an explanation and the SHA-256 verification path.",
          "macOS host build is not available. PinDrift v0.1 is Windows-only on the host side. macOS support is on the roadmap but not in v0.1.",
          "Android device support is feature-flagged off in the v0.1.0 installer; the daemon's Android codepath exists but is not surfaced in the UI yet.",
          "Apple Pay / contactless payments will not work while Developer Mode is enabled on the phone (Apple's choice, not ours). Toggle Developer Mode off when you need to tap a card.",
          "Step counters in Apple Health and Google Fit are accelerometer-based; spoofing GPS will not add to your step total."
        ]
      },
      "download": {
        "windows_x64": {
          "url": "https://pindrift.app/download/Pindrift-Setup-0.1.0.exe",
          "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
          "bytes": 0,
          "signed": false
        }
      }
    },
    {
      "version": "0.0.7",
      "channel": "internal",
      "released": "2026-04-22",
      "title": "Pre-release seven (internal)",
      "summary": "Final internal build before the public beta. Frozen for QA.",
      "highlights": [
        "Internal-only build used to validate the full installer and updater chain"
      ],
      "sections": {
        "added": [
          "Inno Setup installer with the auto-start checkbox and transparent unsigned-installer disclosure card on the welcome page.",
          "build_icon.py and hash_release.py utilities for reproducible release artifacts.",
          "version.json + SHA256SUMS.txt generation in the release pipeline."
        ],
        "changed": [
          "Splash window moved from the main thread to a worker thread so the launcher's elevation prompt no longer freezes it.",
          "Terms Ã‚Â§ 13 broken into 13.1 (for-cause), 13.2 (discretionary), 13.3 (operational discontinuation), 13.4 (effect), 13.5 (competitor with Lunis Group definition)."
        ],
        "fixed": [
          "Spec file uac_admin=True now actually requests elevation on first run instead of silently failing under PyInstaller --onefile.",
          "Tray icon double-click no longer races the single-instance mutex during cold boot."
        ]
      }
    },
    {
      "version": "0.0.6",
      "channel": "internal",
      "released": "2026-04-08",
      "title": "Pre-release six (internal)",
      "summary": "Architecture lockdown: PinDrift.exe launcher supervises tunneld + daemon + Electron.",
      "sections": {
        "added": [
          "ManagedProcess supervisor abstraction with restart-with-backoff and tray-notification hooks.",
          "Crash bundle scrubber: regex sweep over the last 5 minutes of logs strips coordinates before the bundle leaves the machine.",
          "Initial Electron preload bridge exposing window.pindrift API (minimize, maximize-toggle, close, is-maximized)."
        ],
        "changed": [
          "License key format finalized: 33 characters, Crockford base32, Damm checksum. Length increased from 25 to 33 to push brute-force entropy past 125 bits."
        ],
        "fixed": [
          "Two-process race during shutdown where the daemon kept the tunneld socket open after the launcher exited; daemon now drops the listener on SIGTERM."
        ]
      }
    },
    {
      "version": "0.0.5",
      "channel": "internal",
      "released": "2026-03-19",
      "title": "Pre-release five (internal)",
      "summary": "Multi-device fan-out lands. Frontend rewrite for the device tab.",
      "sections": {
        "added": [
          "Device tab: bulk-select pill (All / None) at the top of the device list.",
          "Multi-device action fan-out for Apply / Stop / Route across selected devices.",
          "Per-device editing: uncheck a phone to leave it alone while you edit another.",
          "Match-clock display in the SPOOFING banner (timezone + local time at the spoofed location)."
        ],
        "changed": [
          "Multi-device gated to Lifetime tier (token-cap enforcement, client-side); free-tier accounts see the second device but the Apply button is disabled with a tooltip."
        ]
      }
    },
    {
      "version": "0.0.4",
      "channel": "internal",
      "released": "2026-02-28",
      "title": "Pre-release four (internal)",
      "summary": "Routes: walk, bike, drive, custom.",
      "sections": {
        "added": [
          "Route tab with waypoint editing, GPX import.",
          "Walk (~5 km/h), Bike (~19 km/h), Drive (snaps to roads, posted speed limits), Custom (set kph) modes.",
          "Driver type selector for Drive mode: Normal / 5-Over / Speeder.",
          "Behavior toggles: Loop, Stop-and-go, Jitter (~4 m GPS noise)."
        ]
      }
    },
    {
      "version": "0.0.3",
      "channel": "internal",
      "released": "2026-02-04",
      "title": "Pre-release three (internal)",
      "summary": "First fully wireless session.",
      "sections": {
        "added": [
          "Wireless mode: after a one-time USB pair, PinDrift talks to the phone over Wi-Fi.",
          "Headless always-on build skeleton."
        ],
        "fixed": [
          "Wireless reconnect after the phone roamed to a different Wi-Fi network used to require a PinDrift restart. Now reconnects automatically within ~10 seconds."
        ]
      }
    },
    {
      "version": "0.0.2",
      "channel": "internal",
      "released": "2026-01-12",
      "title": "Pre-release two (internal)",
      "summary": "Map UI, favorites, presets.",
      "sections": {
        "added": [
          "Mapbox-based live map with Standard / Terrain / Satellite styles.",
          "Favorites: save the locations you spoof to often, one-click recall.",
          "Presets: collapsible grid of well-known places (Times Square, Apple Park, Eiffel Tower, ...).",
          "Map labels overlay: street + place names + country borders, including over satellite tiles (Google-Maps-style Hybrid)."
        ]
      }
    },
    {
      "version": "0.0.1",
      "channel": "internal",
      "released": "2025-12-21",
      "title": "Pre-release one (internal)",
      "summary": "First working spoof.",
      "sections": {
        "added": [
          "End-to-end proof: PinDrift moves an iPhone's CLLocationManager to a chosen lat/lng via tunneld + DT_Simulate_Location.",
          "Project skeleton: pindrift-backend (Python), pindrift-electron (UI), pindrift-installer (Inno Setup), pindrift-mockup (web preview)."
        ]
      }
    }
  ]
}