BYOK + Trial Hybrid Pricing 2026: Why We Let Key-Bringers Stay Free Forever
BYOK + Trial Hybrid Pricing 2026: Why We Let Key-Bringers Stay Free Forever
Bottom line: In 2026 two mainstream pricing models dominate AI apps — Cursor/Perplexity-style pure subscription, and Zed/Continue-style pure BYOK. The first bundles API cost into the monthly fee and gates traffic; the second dumps all cost onto the user. On Gemini Desktop we shipped a third path: Beta-period fully free, one-time $49 buyout after GA with a 7-day trial, and BYOK users stay free forever. Three months in, BYOK conversion is 31% and one-time buyout is 12% — both well above typical subscription SaaS.
One-liner: When the user brings their own API key we have no variable cost, so blocking them is both anti-commercial and anti-ethical. The trial is a buffer for users who do not want to mess with API keys, not a feature-downgrade.
The Two Mainstream Routes
Here is how typical 2026 AI tools stack up:
| Product | Route | Monthly | BYOK option |
|---|---|---|---|
| Cursor | Pure subscription (bundled API) | $20 / $40 | Yes, but crippled (only some models via BYOK) |
| Perplexity Pro | Pure subscription (bundled search + model) | $20 | No |
| Claude Code | Pure subscription (Anthropic-bound) | $100+ | No |
| Zed | Pure BYOK (editor is free) | $0 | Required |
| Continue.dev | Pure BYOK (open source) | $0 | Required |
| Warp | Subscription + BYOK hybrid | $15 + BYOK | Yes |
Pure subscription problem: users pay API cost + product margin, but API prices halve annually while subscriptions never drop. Pure BYOK problem: asking a non-technical user to go to Google AI Studio for a key is effectively giving up on them.
We wanted a desktop AI app that could serve both heavy technical users and “I just want it to work” payers. So we took the third route.
Why “Beta-free + GA One-Time + BYOK Forever”
The Gemini Desktop pricing stack:
- Fully free during Beta — everything unlocked, no paywall, used to collect data and iterate
- Switch to $49 one-time after GA — pay once, activated forever, no subscription
- 7-day trial — new post-GA users get the full experience first
- BYOK free forever — any time the user configures their own Gemini API key, the paywall disappears
These four are not a marketing bundle. Each one answers a separate question:
- Beta free: charging before the product shape is stable wastes user trust
- One-time $49: desktop users hate subscriptions; one-time is the desktop mental anchor (Sketch, Things, Cleanshot)
- 7-day trial: users who do not want to wrangle API keys still get to evaluate
- BYOK free: covered in detail below
Tech: Zustand persist + a Single GA_LAUNCH_UNIX Constant
The easiest place to break pricing logic is time-point judgment: Beta vs GA, trial started or not, days remaining. Each call can end up depending on “client time or server time?”
We pinned the GA moment to a single constant and based everything on client-local time plus that constant:
// shared/pricing.ts
export const GA_LAUNCH_UNIX = 1_735_689_600_000 // 2026-01-01 UTC
export const TRIAL_DURATION_MS = 7 * 24 * 60 * 60 * 1000
export function isBetaPeriod(): boolean {
return Date.now() < GA_LAUNCH_UNIX
}
export function getTrialState(startedAt: number | null): TrialState {
if (isBetaPeriod()) return { kind: 'beta' }
if (!startedAt) return { kind: 'not-started' }
const elapsed = Date.now() - startedAt
return elapsed < TRIAL_DURATION_MS
? { kind: 'active', remaining: TRIAL_DURATION_MS - elapsed }
: { kind: 'expired' }
}
Zustand handles persistence via persist, plus a redundant localStorage write to survive schema migrations:
export const usePricingStore = create<PricingState>()(
persist(
(set, get) => ({
trialStartedAt: null,
licenseKey: null,
byokApiKey: null,
ensureTrialStarted: () => {
const { trialStartedAt } = get()
if (trialStartedAt || isBetaPeriod()) return
const now = Date.now()
set({ trialStartedAt: now })
localStorage.setItem('gd_trial_at', String(now)) // redundant
},
}),
{ name: 'gemini-desktop-pricing' }
)
)
Two things matter: ensureTrialStarted is idempotent (do nothing once started), and the redundant localStorage key protects against Zustand persist version migration data loss.
7-Day Trial Clock Start Logic
When does the trial start? We tried both:
- Option A: start on first launch — Beta installers begin the countdown immediately → problem: trial expires before Beta ends
- Option B: only start after GA —
ensureTrialStartedis a no-op duringisBetaPeriod()
Option B is correct. At the GA switchover moment, every existing Beta user’s trial begins — effectively a 7-day grace period for loyal early users.
ensureTrialStarted is called from three entry points: app boot, paywall open, and any compute-consuming feature call. Idempotence makes all three safe to call.
The Ethics of BYOK Bypassing the Paywall
A pure-subscription advocate argues: “BYOK users get the UI value for free. Charge them a software license.” That is exactly what Cursor does — bring your own key, but get a cut-down feature set.
We deliberately rejected that. Three reasons:
- Commercial logic: when the user brings the key, API compute cost is 100% theirs, so we have zero variable cost. Without a cost to recoup, the only remaining justification to charge is “software license” — which is already collected in the one-time $49 buyout. Charging again would be double-dipping.
- Ethical call: a user who brings their own key is typically a technical user cost-conscious about API spend. Building a wall that says “you pay for your own compute AND pay me for the UI” reads as greed.
- Acquisition efficiency: BYOK users are the strongest word-of-mouth amplifiers. When they share the product with a colleague, they add “free forever with your own Gemini key.” No ad converts that well.
Data-wise, BYOK users’ 30-day retention is 1.4x that of paid buyouts. This cohort is not a leak — they are the active core.
License Key UX: LemonSqueezy Receipt → Paste → Activate
One-time buyouts run through LemonSqueezy. Flow:
- Paywall → “Buy $49” → LemonSqueezy checkout
- Payment succeeds → LemonSqueezy emails a receipt containing a license key (UUID)
- User returns to Gemini Desktop → Settings → “I have a license key” → paste → activate
The MVP has zero server-side validation. The client verifies the key matches a UUID regex and unlocks. Crude? Yes. But for a one-time desktop buyout product, the cost to crack is well above $49.
This UX deliberately avoids the “sign in” step. Desktop users dislike accounts, and a one-time buyout should feel like “I bought it = I own it.”
Trial Is Not a “Feature-Cut Paid Mode”
Many subscription products trial a neutered version — export disabled, model count limited, watermarks. Our 7-day trial delivers the full feature set, identical to the paid version.
Different mental models:
- Subscription-style trial: goal is to create “paid is better” expectation → so cripple
- One-time-buyout trial: goal is to let the user truly validate “is this worth $49” → so deliver everything
A crippled trial actively hurts a one-time buyout funnel — users never experience the full thing, so they never commit.
What We Did Not Build (Yet)
To ship fast we consciously skipped:
- Server-side entitlements service: license key activation state lives only on the client, no server DB
- LemonSqueezy webhook signature verification: we do not receive webhooks, so there is nothing to forge
- Device limit: a single key can activate unlimited machines, no fingerprinting
- Revocation: for refunds we currently rely on good-faith uninstall, cannot remotely disable a key
All of these matter at scale. But for a desktop one-time buyout MVP, the simplified funnel has the least friction.
For more desktop AI app product detail, read Gemini Mac App — the 6 Missing Features, another retrospective from building Gemini Desktop.
FAQ
Q1: Why not go subscription?
A: Desktop users anchor to “one-time.” Look at Things, Cleanshot, Sketch, Sublime — every top-tier desktop productivity tool is one-time or hybrid. Subscription is default on the Web and anti-human on the desktop.
Q2: Won’t BYOK cannibalize revenue?
A: Short term, some users who would have paid go BYOK instead. But that cohort is precisely the “API-cost-sensitive” segment least likely to stay in a paid funnel anyway. Letting them BYOK converts “likely churn” into “active user + word-of-mouth amplifier.”
Q3: After the trial ends, how do users know whether to buy or BYOK?
A: At T-2 and T-0 we show a dual-option paywall: left side “$49 one-time buyout”, right side “paste your own Gemini API key, free forever.” Users self-select by technical comfort.
Q4: Does this pricing fit every AI app?
A: No. It fits AI apps where BYOK is feasible — users shoulder the model compute cost. If your product depends on server-side RAG, vector DBs, crawlers, or other infra with your own cost, BYOK alone cannot cover it and you still need a subscription or credits.
Wrap-Up
Pricing is product philosophy made external. Choosing BYOK-free + one-time buyout is respecting that the user is paying their own variable cost, while acknowledging that desktop users do not want subscriptions. This mix is not for every AI product — but if you are building something “client-heavy, server-light”, the third route is worth trying.