Scaffold
Download the starter, versioned SDK, TypeScript declarations, and manifest schema.
Textxt Mini Apps are HTTPS web applications that run in a sandboxed chat panel. Use the SDK, test against a local host, submit a signed-in release, and ship through one review pipeline.
Download the starter, versioned SDK, TypeScript declarations, and manifest schema.
Use host.html to simulate context, messages, drafts, boards, polls, events, and errors.
Paste manifest.json into Developer Console. Textxt attaches ownership and review metadata.
Approved releases enter the catalog. Updates require a higher semantic version.
The starter has no build step. It includes an app, manifest, local Bridge host, and standalone validator.
mkdir conversation-notes && cd conversation-notes
BASE=https://textxt.com/mini-apps/starter
curl -fsSLO "$BASE/index.html"
curl -fsSLO "$BASE/manifest.json"
curl -fsSLO "$BASE/host.html"
curl -fsSLO "$BASE/textxt-mini-app.js"
curl -fsSLO "$BASE/validate-manifest.mjs"
npx serve .
# Open the printed URL + /host.html
Use --local while your start URL is localhost. Production submission always requires HTTPS.
node validate-manifest.mjs \
--local manifest.json
node validate-manifest.mjs \
--remote manifest.json
The SDK pins the parent origin, creates request IDs, handles timeouts, maps Bridge errors, and dispatches events. Do not implement raw postMessage transport.
<script src="https://textxt.com/mini-apps/sdk/1.0.0/textxt-mini-app.js"></script>
<script>
const bridge = window.TextxtMiniApp.createBridge();
bridge.on("context", (context) => {
console.log(context.bridge.availableCommands);
});
await bridge.sendMessage({ text: "Result from my app" });
</script>
Users consent per app and chat. New release permissions are never granted automatically.
const context = await bridge.getContext();
const canPoll = context.bridge
.availableCommands
.includes("createPoll");
| Group | Commands | Notes |
|---|---|---|
| Context | getContext | Chat, topic, locale, theme, discovery metadata, and a non-authenticated correlation session. |
| Conversation | sendMessage, setDraft, updateMessage, shareMiniAppMessage, openTopic | All writes are permission-checked by the host. |
| Shared data | listBoards, createBoard, getBoard, saveBoard, subscriptions, Caro mutations | Chat-scoped persisted collaboration with revision checks. |
| Polls | createPoll, getPoll, listPolls, castVote, closePoll | Realtime poll state managed by Textxt. |
| Host | uploadFile, resize, logEvent, closeMiniApp | File access is only available in the real host. |
Never include ownerId, review status, or timestamps. Textxt derives those from the authenticated submission.
{
"manifestVersion": 1,
"appId": "conversation-notes",
"name": "Conversation Notes",
"description": "Capture a note and send it back to the conversation.",
"iconUrl": "https://example.com/icon.png",
"startUrl": "https://example.com/app/index.html",
"allowedOrigins": ["https://example.com"],
"permissions": ["readContext", "sendMessage", "setDraft"],
"capabilities": ["message.text"],
"bridgeVersion": "1.0",
"visibility": "private",
"tags": ["notes", "productivity"],
"version": "1.0.0",
"privacyPolicyUrl": "https://example.com/privacy",
"supportUrl": "https://example.com/support",
"releaseNotes": "Initial release."
}
private | Only the developer can discover and install it. |
shared | Available to signed-in Textxt users through sharing. |
public | Listed in public discovery after review. |
Mini Apps are isolated from Textxt authentication and direct Firestore access. The Bridge is the only supported host boundary.
session.id or legacy sessionToken as authenticationSign in to Textxt, open Settings → Mini app developer, paste the validated manifest, and submit. Developers never write catalog records directly.
You can update or withdraw the release while it waits for review.
Textxt checks function, iframe compatibility, mobile UX, privacy, and least privilege.
Load the manifest back into the editor, address review notes, and resubmit.
The approved version becomes authoritative for existing and future installs.
Increase the semantic version, write release notes, and submit again. Removed origins and permissions are revoked at runtime. New permissions still require explicit user consent.
Third-party apps can share standard Mini App cards. Interactive inline bubble renderers are trusted host extensions and require a separate platform review; arbitrary app code never runs in the message list.