What changed, and when
Customer-visible changes to the SDKs, the dashboard, pricing and this site, newest first. SDK versions are also published as GitHub Releases on appglance-apple and appglance-android, each with its own changelog.
How to read this. Dates are the day a change reached the live service or a release was tagged. Internal work (infrastructure, billing plumbing, refactors) is left out unless you can see it from outside.
What's next. AppGlance is in public beta, and the near-term order is: the AppGlance iPhone app to the App Store; after that, bringing the app to parity with the web dashboard (webhooks, scoped event deletion, CSV export). Beta feedback moves things up this list: support@appglance.app.
31 August 2026
Site
- The iPhone app is on the App Store, and the site finally says so. AppGlance for iPhone shipped on 28 August, but every public page here still described it as in development, including the answer a search engine quotes. Fixed everywhere. It is free and works on every plan, including Free: live mode is the only feature the plans gate.
- Two new comparisons, and questions answered on all of them. AppGlance vs PostHog and AppGlance vs App Store Connect Analytics are both live. The PostHog page says in its first paragraph that their free tier is ten times ours, because it is. The App Store Connect page argues for using both rather than switching, because that is the honest answer. Every comparison page also gained a "Questions people ask" section, marked up so a search engine or an AI assistant can quote the answer rather than guess at it.
- The SDK size, re-measured at 1.2.4. The site quoted ~270 KB on iOS and a 107 KB Android AAR, both measured at 1.2.2. On the same compiler, 1.2.4 measures ~300 KB on iOS (297,971 bytes of __TEXT plus __DATA) and a 114 KB AAR. 1.2.2 re-measures at 268 KB on that same toolchain, so the roughly 30 KB is code that 1.2.3 and 1.2.4 added, not the compiler. Every page that quoted the old figures now quotes the new ones. A stale size claim is worse than none.
24 August 2026
Service
- Alerts stop calling old users new. Since 1.2.4 the dashboard has told a
real arrival from someone who already had the app when the SDK arrived; alerts now honour
the same split. An
installalert to a channel a person reads (push, Discord, ntfy) stays quiet for the already-had-it wave instead of announcing each of those people as a "new user". The JSON webhook is the machine channel and is not filtered: it still receives every install, labelled with anoriginofnew,pre_existingorunknown, so your own tooling can agree with the charts. Prefer to hear the wave anyway? The Alerts tab gained a switch, and pushes are then captioned "already had it", never "new user". - The last two surfaces catch up. The fast "new users today" tile and the session feed's new-user chip (dashboard and iPhone app alike) now apply the same already-had-it split as the charts and alerts, so an adoption wave no longer reads as a flood of new users anywhere.
22 August 2026
SDKs
- Swift SDK 1.2.4 and Kotlin SDK 1.2.4. An app that adds
AppGlance years after launch has a user base the SDK has never seen, and every one of those
installs used to read as a brand new user on the day that build shipped: one enormous spike,
with the real arrivals buried inside it. The SDK now reports when the app itself first
arrived, so the dashboard can tell an existing user from a new one.
It costs nothing and asks for nothing. On Apple the date rides the signed
AppTransactionthe SDK already fetches to label the environment; on Android it rides the samePackageInfoit already reads for your version name. No new permission, no manifest entry, nothing added to your App Store or Data safety answers: it is a date about the app, not about the person, and it is sent once per install. TestFlight builds send no store date, because the sandbox answers every account with the same placeholder, which is not evidence of anything.
21 August 2026
SDKs
- Swift SDK 1.2.3 and Kotlin SDK 1.2.3. Debug mode now says out
loud when the server deliberately kept less than it was sent: a response can carry
throttled(one install sending faster than any real usage does, in practice an event call in a loop) andover_quota_dropped(the account past its plan's cap and grace), and each now logs one line naming the count and the likely cause. Release builds are unchanged, nothing is re-sent, and none of it ever counts against the plan.
Service
- Room to be popular. The per-app request ceiling now scales with the plan, sized well past the peak hour each plan's own event cap implies, so a large app in a single country is never rate limited at its own busiest moment. The per-install brake is unchanged: one device in a loop is still stopped at once, costs nothing against the plan, and the app's owner now gets a push and an email, at most once a day per app, saying which app and why.
Site
- Public beta, said out loud. The site now says what was already true: AppGlance is in public beta. Beta accounts get direct support from the developer and launch pricing that stays theirs: subscribe during the beta and your price never goes up while you stay subscribed. The iPhone app ships through the App Store, not a separate beta.
- A size claim corrected. The homepage said "~200 KB SDK" for iOS. Re-measured at 1.2.2 on the current stable compiler, the honest number is ~270 KB (the earlier figure came from an older toolchain; nothing about the SDK changed). The Android AAR is 107 KB at 1.2.2, up from the 83 KB measured at 1.0.0. Every page that quoted the old numbers now quotes the new ones, and the comparison table says which competitor figures are still on the older toolchain.
- Two new comparisons. AppGlance vs Mixpanel and AppGlance vs Amplitude, both stating plainly that their free tiers are bigger than ours and where each tool wins.
- One optional question at signup. "Where did you find AppGlance?" on the first-app page, skippable, stored on your account and nowhere else. It exists so a one-person company can learn which of its posts actually reached anyone.
- Terms clarified. Section 9 of the terms of use now says plainly what was already spread across sections 4 and 9: accounts and the service itself can be suspended, changed or discontinued at any time, including if running it stops being sustainable, and if the whole service ever winds down we will aim for advance notice and an export window. Nothing about the beta price promise changes.
19 August 2026
SDKs
- Swift SDK 1.2.2 and Kotlin SDK 1.2.2. A presence ping dropped by the
flush on the way to the background keeps its distance from the ping that replaces it, so a quick return
to the app, or a relaunch, cannot record presence twice within seconds. A client replaced by a second
configureno longer writes the install's stored state when its last request completes. On iOS, an app that collects from TestFlight builds only now opens its session the moment the store's answer lets the build through, instead of staying dark for the rest of the visit. - Swift SDK 1.2.1 and Kotlin SDK 1.2.1. The offline queue keeps the 500-event ceiling it documents on the launch after a crash: the file on disk holds what is owed, which is a little more than the queue's own cap, and restoring it whole started that launch over the limit. On Android a queue the process was killed in the middle of writing is now recovered rather than read as empty, and a write the device could not finish is no longer recorded as though it had landed. Android also backs off further during a long outage, waiting up to five minutes rather than one once ten attempts have failed, which is what the Swift SDK already did.
- Swift SDK 1.2.0 and Kotlin SDK 1.2.0. A device restored from a backup
no longer inherits the install it was restored from. The install id was always per device, but the session
and the stored user properties beside it ride an iCloud or device-to-device transfer, so a new handset
continued the old device's session and believed the server already held its properties, which left that
install's page blank however often the app called
identify. - A first launch that cannot send no longer costs you the install. The install id is minted
before the SDK knows whether the build collects, so a launch behind the environment gate, or one with
collection switched off while the app waits for consent, was the only launch that could ever have recorded
the
installevent. A developer's first Run, then TestFlight, was enough to lose it for good. The debt is remembered and the first collecting launch records it. - Turning collection off now covers what was already recorded. Switching
isEnabledoff is how an app honours a consent withdrawal; the events already queued on disk and the name and emailidentifyhad stored used to survive it. Both are dropped now. A closed environment gate is not a withdrawal and still leaves them alone. - Stored user properties repair themselves. Only a change is ever sent, so an event lost after the fact used to freeze an install's properties for good. The snapshot now moves only when a batch carrying it comes back accepted, so a repeat of values the server really has is still free and anything lost is sent again.
- Delivery is quieter under load. A burst leaves the device as one delivery rather than one
request per event. The Swift SDK widens its retry ceiling to five minutes once ten consecutive failures say
outage rather than blip, and honours a numeric
Retry-Afteron any answered status. The Kotlin SDK arms its own retry after a failure, so a full queue no longer waits for the next launch. - Kotlin: every configuration knob is now reachable from Java through
AppGlance.Configuration.Builder. Kotlin default arguments andDurationare both invisible from Java, so a Java-only app could not set most of them.
17 August 2026
SDKs
- Swift SDK 1.1.0 and Kotlin SDK 1.1.0. The presence ping now measures
silence rather than elapsed time: a real event proves the app is in front of someone just as a ping does,
so a quiet install pings once per interval and a busy one never pings at all. The tick that used to fire
alongside every
session.startis gone. Nothing on your dashboard changes, because "active right now" and session length read the same stamps as before. - Presence cadence now follows your plan. The server answers each accepted batch with the sparsest cadence your plan needs, and SDKs from 1.1.0 treat it as a floor over their configured interval and remember it across launches. Free is 240 seconds, Indie 120, and Studio and above stay at 60. Older SDKs ignore the field and keep their configured interval, so this is additive on the wire.
- Swift SDK 1.0.2. First launches no longer count as two sessions. The session id is now
minted at startup whenever a fresh session is inevitable, so
installand everything recorded before the first foreground share the id thatsession.startadopts. Sending is also backed off withRetry-Afterhonoured, and the presence stamp is persisted so a relaunch cannot double a tick. - Kotlin SDK 1.0.1. The same first-launch session fix, plus configuration validation and a corrected debug and emulator check, so a real device is never mistaken for an emulator and silently dropped.
- Swift SDK 1.0.1. Build environment is read from the store's signed receipt, so TestFlight builds report as TestFlight instead of as App Store.
16 August 2026
SDKs
- Swift SDK 1.0.0 released. iOS 16, macOS 13, tvOS 16, watchOS 9 and visionOS 1 and up;
about 200 KB compiled on iOS, no third-party dependencies. Swift Package Manager:
https://github.com/AppGlance/appglance-apple. - Kotlin SDK 1.0.0 released, published to Maven Central as
app.appglance:appglance:1.0.0. Android 5.0 (API 21) and up; an 83 KB AAR with one AndroidX dependency. Sessions and "active right now" are automatic; nothing to attach to activities. - Both SDKs are MIT licensed and keep a changelog in their repositories.
Dashboard
- Live mode updates in place. On paid plans the Overview, the live count and the feed now change as events arrive, without a refresh. Presence pings power "active right now" and are never billed.
- Delete your account yourself. Security → Delete this account removes the account, its apps and their data. No email required.
- The privacy-label generator in Setup now asks whether your metadata carries personal data, and warns when an event name looks like it carries a value.
Pricing
- Yearly plans: $49, $149, $399 and $999 a year for Indie, Studio, Scale and Max, about two months free against monthly. Monthly prices unchanged: free to 100,000 events, then $4.99, $14.99, $39 and $99.
- Changing plan mid-month keeps the month's event count; it does not start over. Written down on the pricing page.
Site
- Comparisons with Firebase Analytics, TelemetryDeck and Aptabase, each with the other tool's SDK measured the same way as ours and its privacy label written out.
- A troubleshooting guide (every error the ingest API returns, and why events do not show up), a migration guide from Firebase and TelemetryDeck, and an llms.txt index for AI coding agents.
- Pricing got its own page. This about page and this changelog.
15 August 2026
Launch
- appglance.app goes public. The hosted dashboard opens for sign-up: apps and write keys, the live Overview, the feed, users and their stories, funnels, retention, sessions, versions, countries, CSV export, alerts through ntfy, Discord and signed webhooks, and the Setup wizard with generated App Store and Google Play privacy answers.
- Free tier: 100,000 billable events a month, up to 20 apps, every dashboard feature, no credit card.
- The site: the quickstart with a paste-in prompt for AI coding agents, the SDK reference, the live demo on sample data, the free App Store privacy label tool, the privacy-first iOS analytics guide, and the privacy policy, terms of use and DPA.
Something changed that is not listed here? Tell support@appglance.app and we will add it.