Traffic routed through FKN’s proxy and WebVPN relays is metered per connected account when one is available, otherwise per IP. Free-tier usage gets a daily volume; past it, transfers are throttled to a slower rate until the daily window resets. An active subscription lifts that throttle. cloud.quota() lets an app read the current state.
the user has a paid subscription, throttle never applies
premium// has an active subscription
conststatus:cloud.QuotaStatus
status.
overQuota: boolean
overQuota// today's free-tier volume is spent
conststatus:cloud.QuotaStatus
status.
throttled: boolean
throttled// transfers are rate-limited right now (over quota, not premium)
conststatus:cloud.QuotaStatus
status.
usedBytes: number
bytes egressed through FKN relays today (per connected account or anonymized IP), saturates at limitBytes:
consumption past the free-tier volume is private and never reported
usedBytes// bytes egressed through FKN relays today, saturates at limitBytes
conststatus:cloud.QuotaStatus
status.
limitBytes: number
limitBytes// free-tier daily volume before throttling
conststatus:cloud.QuotaStatus
status.
remainingBytes: number
remainingBytes// free-tier volume left today
conststatus:cloud.QuotaStatus
status.
bytesPerSecond: number
bytesPerSecond// current effective egress rate cap
conststatus:cloud.QuotaStatus
status.
bitsPerSecond: number
bitsPerSecond// the same cap in bits per second, for display
bytesPerSecond is the rate the relays are actually clamping this user to right now: the free rate under quota, the throttled rate once over it, or the premium rate for subscribers. Reading it means you never have to hard-code the platform’s rate constants.
usedBytes saturates at limitBytes: consumption past the free-tier volume is private and is never reported, so once a user is over quota the field reads exactly limitBytes. Your app gets everything it needs for a quota meter without FKN exposing anyone’s real transfer volume, in particular a premium user’s.
Quota reflects only traffic that goes through FKN relays. Extension requests use the browser’s connection and are not included. The desktop backend is planned and does not currently handle traffic. This is why quota lives under cloud.* and has no root alias.
cloud.quota() by execution backend
All APIs below are called from browser code. The columns show which backend performs the work.
The value updates on the order of seconds; polling every 10 to 15 seconds while a transfer is running is plenty, and the platform caches the result so frequent polls are cheap.