Learn how to structure and package your BooApp for submission.
BooApps are self-hosted. You deploy your app to any HTTPS host — Vercel, Netlify, Cloudflare Pages, GitHub Pages, your own server — and submit the URL in the developer console. Peqaboo loads it inside a WebView and injects the peqaboo global at document_start.
https://my-app.vercel.app/
├── index.html # Entry — must return 200 + valid HTML
├── booapp.json # Optional — auto-import for the submission form
├── icon.png # Recommended 512x512 PNG
├── app.js
└── styles.css
(any static stack works: plain HTML, Vite, Next.js export, etc.)The booapp.json auto-import file
booapp.json at the root of your deploy (e.g. https://my-app.vercel.app/booapp.json). When you paste your URL in the developer console, Peqaboo fetches this file and pre-fills the submission form — name, icon, category, declared scopes. It's optional (you can fill the form by hand) but recommended; it also keeps your submission and code in sync via git.Requirements
entryUrl must be HTTPS and return 200 with valid HTMLpermissions must be valid scope ids (see Permissions)appId must be globally unique (kebab-case)The manifest file describes your BooApp and its configuration. All paths are relative to the zip root.
{
"appId": "my-pet-tracker",
"name": "My Pet Tracker",
"shortDescription": "Track your pet's daily activities",
"icon": "https://my-pet-tracker.vercel.app/icon.png",
"entryUrl": "https://my-pet-tracker.vercel.app",
"category": "health",
"permissions": [
"auth.requireLogin",
"pet.list",
"pet.read",
"media.takePhoto",
"location.getCurrent"
],
"orientation": "portrait",
"themeColor": "#FFFFFF",
"author": {
"name": "Developer Name",
"email": "dev@example.com"
},
"privacy": {
"dataCollection": ["user_profile", "pet_data"],
"privacyPolicyUrl": "https://example.com/privacy"
}
}| Parameter | Type | Required | Description |
|---|---|---|---|
appId | string | Yes | Globally unique kebab-case id (lowercase, hyphens, e.g. "pet-loyalty-card") |
name | string | I18nString | Yes | Display name of your BooApp (2-30 characters). Either a plain string or an i18n object keyed by locale. |
shortDescription | string | I18nString | Yes | Short description (max 120 characters) |
icon | string | Yes | HTTPS URL to a 512x512 PNG (or relative path resolved against your deploy root) |
entryUrl | string | Yes | HTTPS URL Peqaboo loads in the WebView (your hosted app) |
category | string | Yes | One of: event, tool, game, commerce, utility, health, social, finance |
permissions | string[] | Yes | Declared scope ids — see the Permissions doc for the full set |
| Parameter | Type | Required | Description |
|---|---|---|---|
orientation | "portrait" | "landscape" | "auto" | No | Default "portrait" |
themeColor | string | No | Hex color used for the loading splash and status bar tint |
author | { name, email } | No | Developer contact info shown on the public listing |
privacy | PrivacyConfig | No | Privacy declarations (data collection, policy URL) |
Two flat fields control the runtime chrome. The host renders the nav bar (back button, title, close button) — your page should not include its own.
{
"orientation": "portrait", // "portrait" | "landscape" | "auto"
"themeColor": "#FFFFFF" // Splash + status bar tint
}{
"privacy": {
"dataCollection": ["user_profile", "pet_data", "location"],
"dataSharing": [],
"dataRetention": "30 days",
"privacyPolicyUrl": "https://example.com/privacy",
"termsOfServiceUrl": "https://example.com/terms"
}
}Best Practice