API referencei99dashTypes
MiniAppManifest
The `manifest.json` schema every mini-app ships. Identity, locale, and the contract that lets the catalog filter pre-clear or dim your tile per car.
The full schema for a mini-app's manifest.json — the durable
identity + metadata the catalog stores, the launcher uses, and the
backend validates at publish time. Every field on the wire matches
the field on disk; no auto-rewrite at install except for icon /
coverImage / screenshots[] which the publish service rewrites
to absolute CDN URLs.
Minimal valid manifest
{
"id": "fuel-prices",
"name": { "en": "Fuel Prices", "ar": "أسعار الوقود" },
"icon": "./icon.svg",
"url": "https://miniapps.i99dash.app/fuel-prices/",
"version": "1.0.0",
"category": "services"
}That's the floor — every other field has a sane default. Most
real-world manifests add description and safeWhileDriving.
Field-by-field
Identity
| Field | Required | Notes |
|---|---|---|
id | yes | URL-safe, ≤ 64 chars, lowercase + alphanumeric / - / _, must not start with a separator. Lives forever in pinned home-screen shortcuts (/.../m/<id>) — never rotate post-publish. Bump version instead. |
version | yes | Opaque semver-shaped string. Bumped per release; busts the WebView cache. |
minHostVersion | no | Hosts below this show an "update your app" card. Omit for "any". |
Display
| Field | Required | Notes |
|---|---|---|
name | yes | Locale map — at least one entry. Fallback: requested locale → en → first entry. |
description | no | Same shape as name. UI degrades gracefully when absent. |
icon | yes | Bundle-relative path (./...), PNG or SVG, 256×256, ≤ 100 KB. Publish rewrites to a CDN URL. |
coverImage | no | 16:9 hero banner, ≤ 1280×720, ≤ 500 KB. |
screenshots[] | no | Up to 8 images, ≤ 1920×1080, ≤ 800 KB each. Order is publisher-chosen. |
Catalog placement
| Field | Required | Notes |
|---|---|---|
category | yes | Closed enum — see CATEGORY_SLUGS. Drives the Store grouping. |
tags[] | no | Lowercase + hyphen, ≤ 24 chars each, ≤ 8 tags. Search/filter only. |
Runtime / launch
| Field | Required | Notes |
|---|---|---|
url | yes | HTTPS only, must live under an allow-listed origin (miniapps.i99dash.app in v1). Enforced at launch — a catalog row pointing off-allowlist is rejected. |
safeWhileDriving | default false | Whether the app may render while the car is moving (>5 km/h). Default conservative. Only set true for read-only / glanceable / no text input / no video / no interactive map UIs. |
Network egress
| Field | Required | Notes |
|---|---|---|
network | no | Declared external-egress allow-list: the bare HTTPS origins (https://host[:port], no path / query / fragment / userinfo / wildcard / IP literal / localhost) this app may reach with normal fetch()/XHR. Max 10; lowercased, canonicalized, and de-duped at parse time. The car host enforces it as a per-app Content-Security-Policy response header — every undeclared origin is blocked. Unauthenticated: declared fetch() is raw browser egress with no i99dash credentials attached; it's a least-privilege control reviewed at publish, not a guarantee against a malicious author. Omit (or []) ⇒ no third-party egress (the app can still load its own bundle). |
See Calling an external API for the mental model and Call a third-party API for a worked example.
Type signature
Prop
Type
Source
- Import:
import { MiniAppManifest, MiniAppManifestSchema } from 'i99dash' - Subpath:
types - File:
src/types/manifest.ts
Related
MiniAppManifestSchema— the Zod runtime validator.VEHICLE_CAPABILITIES— the closed list of capability strings used for runtime detection.CATEGORY_SLUGS— the closed list of categories.- Vehicle profile concept — what the catalog filter consults.
- Capability detection guide — runtime hardware detection.