# Limits and Application Control

This page is dedicated to listing the current SDK constraints and learning how to apply product-specific policies such as storage limits, plan tiers, expiration, cellular usage, and deletion rules in the application layer.

The following are the current Android SDK constraints:

| Item | Current implementation |
| --- | --- |
| Packs | Each region consists of one or more pre-generated region packages; there is no maximum package limit |
| Tiles | No SDK-side tile-count limit; `tileCount` is only a catalog estimate |
| Regions | No SDK-side limit on the number of installed regions; the practical limit depends on device storage and the file system |
| Area | Only pre-generated regions in the catalog can be selected; the public API does not support downloads for arbitrary bounds or polygons |
| Zoom | Determined by the region package's `minZoom` / `maxZoom`. The application cannot specify a separate range for a download task |
| Bytes | No SDK-wide storage cap; enqueue and resume require the remaining data size plus a “max(100 MiB, 20%)” safety margin |
| Time period / expiry | The SDK does not automatically expire or periodically delete regions |
| Device | Data resides in an app-specific resource path; uninstalling the application, clearing application data, or deleting the path from host code removes the data |
| Cache | The SDK manages the map cache and installed region data; the application must not directly read, write, or delete internal database files |
| Concurrent downloads | A maximum of three region tasks run concurrently; remaining tasks are queued |
| Tile server | Regional Offline supports only `NGLTomTom`. `NGLMapTiler` is supported only for online maps. |

Application control over product policy:

| Capability | Implementation |
| --- | --- |
| Download selection | Select a `regionId` from the catalog, then call _download()_ |
| Size estimation | Use `totalSize`, `tarSize`, `downloadedBytes`, and `totalBytes` |
| Download warnings | Before enqueueing, the application displays data-usage, roaming, storage, and plan warnings |
| Deletion | _controlDownload(regionId, DownloadAction.DELETE)_ |
| Updates | Compare versions and call `download(clearBefore = true)`. The SDK does not update automatically |
| Expiration | Define the policy in the application or on the server, then call `DELETE` |
| Maximum storage by tier | The SDK does not recognize tiers; the application totals _OfflineInstalledRegion.totalBytes_ and enforces the limit before enqueueing |

The SDK does not enforce product-level limits such as plan tiers, maximum storage by subscription, expiration policy, cellular-download restrictions, or roaming rules. The SDK also does not define any server-side entitlements, account plans, and CDN policies. Implement these policies in the application before enqueueing downloads, using catalog size estimates, installed-region byte counts, and account-level entitlements from your product layer.
