> For the complete documentation index, see [llms.txt](https://basedapp.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://basedapp.gitbook.io/docs/integrations/mini-apps-platform/12-open-questions.md).

# Open questions

A running list of unresolved decisions. Each entry has an `id`, the question, options, current leaning, and resolution. Resolved entries are crossed out and moved into the relevant doc.

## Open

(none — all questions resolved through 2026-05-10)

***

## Resolved (decision log)

### ~~Q1 — Pseudonymous user id visibility to partner backend~~ — RESOLVED 2026-04-26

**Decision: Option A.** Pseudonymous id is local-only. Partner backends identify users by wallet address (when granted) or by their own login. Codified in `03-host-contract.md` (`BasedAuth.getUserId`).

### ~~Q2 — Wallet rotation mid-session~~ — RESOLVED 2026-04-26

**Decision: Option C.** Hard-restart the mini-app silently on wallet change. Simpler than the pause-and-prompt path; mini-apps must be designed to boot quickly and any in-progress work is lost (signing flows are user-initiated and short-lived, so this is acceptable). Codified in `02-architecture.md` (lifecycle) and `05-js-runtime.md`.

### ~~Q3 — Verified partner tier — what unlocks?~~ — RESOLVED 2026-04-26

**Decision: Sensible defaults.** Verified tier unlocks: heap (32MB → 96MB), storage quota (50MB → 200MB), faster review SLA, featured placement. No native extensions ever. No `based.ws.*` tier-gated. Codified as defaults in `05-js-runtime.md` and `09-distribution-and-updates.md`.

### ~~Q4 — Number/date formatting~~ — RESOLVED 2026-04-26

**Decision: Standard `Intl.*` first, polyfill if needed.** Expose the standard ECMAScript `Intl.NumberFormat`, `Intl.DateTimeFormat`, `Intl.RelativeTimeFormat`, `Intl.PluralRules`, and `Intl.Collator`. If QuickJS lacks ICU data for a given locale, the runtime falls back to a small host-mediated polyfill that matches the host's locale. No `based.intl.*` namespace. Codified in `05-js-runtime.md` (globals allowlist) and `07-ui-nodes-and-renderer.md` (Localization).

### ~~Q5 — Docs site stack~~ — RESOLVED 2026-04-26

**Decision: Docusaurus.** Codified in `10-developer-experience.md`. Re-evaluate at phase 5.

### ~~Q6 — JSX preset on by default?~~ — RESOLVED 2026-04-26

**Decision: Off by default; opt-in via `based init --jsx`.** Codified in `10-developer-experience.md`.

### ~~Q7 — Inter-mini-app result passing — schema?~~ — RESOLVED 2026-04-26

**Decision: Free-form `Map<String, dynamic>` for v1.** Add intent-style schemas in v2 if cross-mini-app traffic grows. Codified in `03-host-contract.md` (`BasedNav.openMiniApp`).

### ~~Q8 — Hot-reload of running mini-apps in production?~~ — RESOLVED 2026-04-26

**Decision: Never mid-session.** Cold-boot is the only update path. The kill list is the emergency lever. Codified as a platform principle in `09-distribution-and-updates.md` (Update model).

### ~~Q9 — How does a mini-app know the user's chain preferences?~~ — RESOLVED 2026-04-26

**Decision: Read-only via `based.host.preferredChain`.** Mini-apps may pre-select for smoother flow but must always show a chain picker before signing. Codified in `03-host-contract.md` (`BasedHostInfo`).

### ~~Q10 — TypeScript optionality for partners~~ — RESOLVED 2026-04-26

**Decision: REQUIRED.** Every mini-app must be authored in TypeScript. CLI rejects pure-JS bundles at build time. The published bundle is still ES2020 JS (TS is compiled away), but the source-of-truth is TS and `tsconfig.json` is part of the project template. Codified in `10-developer-experience.md` (Languages and toolchain).

### ~~Q11 — Should `based.signing.signEvm` ever auto-broadcast?~~ — RESOLVED 2026-04-26

**Decision: Add it for v1.** A new `based.tx.send(req)` method signs and broadcasts in one call. Implementation note: the host owns broadcast routing per chain (we pick a default RPC; partners can override per-call with a `relay` field that must be in their `permissions.network` allowlist). Spec to be added to `03-host-contract.md` as `BasedTx`.

### ~~Q12 — Bundle source map exposure~~ — RESOLVED 2026-04-26

**Decision: Private by default.** Source maps are stored on the platform side for partner dashboards only; not served from the public bundle CDN path. Codified in `09-distribution-and-updates.md` and `05-js-runtime.md` (Source maps).

### ~~Q13 — Tenant-restricted mini-apps~~ — RESOLVED 2026-04-26

**Decision: Based-only, forever.** The mini-app platform is a Based-tenant feature only. Hyena and any future tenants do not get the mini-app surface. The host gates the entire platform on `tenantId == "based"`. Codified in `01-overview.md` and `02-architecture.md`.

### ~~Q14 — Push notification model — partner-driven or client-driven?~~ — RESOLVED 2026-05-10

**Decision: Both, layered.** Partners drive remote pushes via a server-to-server API (`/api/partners/notifications/push`) with `mp_*` API keys. The mini-app's JS bundle additionally has `based.notifications.show()` for local banners. Tokens never reach mini-app code in either path. Brand prefix + icon enforced server-side. Codified in `15-notifications.md`, `17-partner-api.md`, and the new `permissions.notifications.local` field in `04-manifest.md`.

### ~~Q15 — iOS Live Activities — custom layouts per mini-app, or fixed catalogue?~~ — RESOLVED 2026-05-10

**Decision: Fixed catalogue.** Three templates (`progress` / `status` / `countdown`) compiled into the host's Widget Extension. Partners pick a template + supply state; they cannot ship custom SwiftUI. Same templates render on Android via the platform's progress-notification idiom (or `Notification.ProgressStyle` on Android 16+). Avoids the "every partner runs custom Swift in the host process" threat model. Codified in `03-host-contract.md` (`BasedLiveActivity`), `15-notifications.md`, and the iOS Widget Extension at `flutter/based_app/ios/MiniAppLiveActivity/`.

### ~~Q16 — Should partners see push tokens?~~ — RESOLVED 2026-05-10

**Decision: No, never.** The gateway holds tokens; partners specify recipients by email or wallet address. The gateway resolves to internal user ids and dispatches via APNs / FCM. Prevents token exfiltration / sale, and lets us revoke an individual user's notifications without partner cooperation. Codified in `17-partner-api.md` (Threat model section).

***

## How to add an entry

1. Pick the next available `Q<n>`.
2. Add it under **Open** with: question, options, trade-off, current leaning.
3. When resolved, write the decision in 1–3 lines, link to the doc/section that codifies it, and move the entry to **Resolved** with strikethrough on the original question.
