Create a Gora app
A Gora app starts as a local folder. You edit it locally, validate it locally, then deploy it to a Gora endpoint.Choose a starter template
The fastest path is to use a template:| Template | Use it when |
|---|---|
offchain-callback | Your app returns an off-chain result or callback payload |
mobile-coin-flip | You want a small mobile-signing example |
agent-mobile-signing | Your AI agent prepares user-paid transactions or approvals |
typescriptjavascriptpythonwasm
offchain-onlysmart-contract-nativeoffchain-program-walletai-agent-wallet
Generated files
A TypeScript app looks like this:| File | Purpose |
|---|---|
src/index.ts / src/index.js / src/main.py | App code that Gora runs |
gora.app.json | Manifest: id, runtime, capabilities, contract links |
policy.json | Allowed actions, chains, limits, and payment rules |
ui/index.html | Optional mobile UI rendered in the Gora wallet WebView |
fixtures/request.json | Local request input for testing |
.gora/ | Local receipts, package output, config, and contract metadata |
Mobile UI
The mobile wallet renders app-specific UI as HTML only. Add aui section to gora.app.json:
ui.html with inline HTML. For partner-hosted apps you can use ui.url.
The WebView injects window.Gora so your HTML can ask native code for wallet context, read declared views, invoke the app, and open the native signer:
Runtime contract
For JS, TS, and Python apps:Build
artifacts/program.wasm.
Validate
- manifest and policy JSON
- app id and package metadata
- artifact path and runtime kind
- allowed actions and chains
- linked contract metadata
- obvious secret-looking fields
Package
gora deploy uploads to Gora.
What not to put in an app
Do not put these in source, manifest, policy, fixtures, package metadata, or stdout:- private keys
- seed phrases
- deployer keys
- API tokens
- RPC secrets
- Algod tokens