Skip to main content

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: Example:
You can override the default language or app shape:
Supported languages:
  • typescript
  • javascript
  • python
  • wasm
Supported app kinds:
  • offchain-only
  • smart-contract-native
  • offchain-program-wallet
  • ai-agent-wallet

Generated files

A TypeScript app looks like this:
Important files:

Mobile UI

The mobile wallet renders app-specific UI as HTML only. Add a ui section to gora.app.json:
For very small demos you can use 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:
Keep private keys, seed phrases, RPC secrets, and algod tokens out of HTML. The HTML is a UI surface; native wallet code still owns signing.

Runtime contract

For JS, TS, and Python apps:
Do not print logs to stdout. Stdout is parsed as the app result. Example TypeScript result:

Build

For JS, TS, and Python, this verifies that the manifest-declared artifact exists and is non-empty. For WASM, it builds or verifies artifacts/program.wasm.

Validate

Validation checks:
  • 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

This writes:
The package is what 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
Use environment variables or local dev tooling for secrets. The package should be safe to upload. Next: Add chain contracts.