Vai al contenuto principale

Web API.
Risultati nativi.

Le API JavaScript che già conosci, senza i limiti del browser. Push vere, Face ID, fotocamera nativa, dal codice web che hai già.

Gira anche nel browser: fallback automatici su ogni API.

import { getAppo } from '@appolabs/sdk'
const appo = getAppo()
await appo.push.requestPermission()
await appo.biometrics.authenticate('Sign in')

API di @appolabs/sdk: ogni chiamata di questa pagina funziona già.

Browser vs Appo

Cosa ti dà il browser.
Cosa ti dà Appo.

Lo stesso JavaScript. La differenza è cosa succede quando lo esegui.

Notifiche push

Nel browser
const reg = await navigator.serviceWorker
.register('/sw.js')
const sub = await reg.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: VAPID_PUBLIC_KEY,
})
// then: a push server, the Web Push
// protocol, and a PWA install on iOS

Service worker, chiavi VAPID, e su iOS solo dopo l'installazione come PWA.

Con Appo
await appo.push.requestPermission()
appo.push.onMessage((msg) => {
render(msg)
})

Consegnate ad app chiusa. Schermata di blocco, badge, suono.

Biometria

Nel browser
const cred = await navigator.credentials.get({
publicKey: {
challenge, // from your server
rpId: 'example.com',
allowCredentials, // registered keys
},
})
// then: verify the assertion server-side

Una cerimonia WebAuthn con challenge dal tuo server.

Con Appo
const ok = await appo.biometrics
.authenticate('Sign in')

Face ID o Touch ID. Una chiamata, un booleano.

Fotocamera

Nel browser
const stream = await navigator.mediaDevices
.getUserMedia({ video: true })
// draw to a <canvas>, grab a frame,
// stop every track when done

Uno stream video in una scheda. La cattura è a carico tuo.

Con Appo
const photo = await appo.camera.takePicture()

La fotocamera nativa. Ti restituisce una foto.

Storage sicuro

Nel browser
localStorage.setItem('token', jwt)
// plaintext, readable by any
// same-origin script, evictable

In chiaro, leggibile da ogni script same-origin, e il browser può cancellarlo.

Con Appo
await appo.storage.set('token', jwt)

Keychain su iOS, Keystore su Android. Cifrato.

E nel browser?

Lo stesso codice gira anche lì. Ogni API ha un fallback automatico, e puoi differenziare con appo.isNative

JavaScript Bridge

Dieci namespace. Un bridge.

Ogni API si usa come le web API che già conosci, con un'implementazione nativa dietro.

appo.push

requestPermission() · getToken() · onMessage(cb)

Notifiche che arrivano ad app chiusa.

appo.biometrics

isAvailable() · authenticate(reason)

Face ID e Touch ID con fallback web automatico.

appo.camera

requestPermission() · takePicture()

Apre la fotocamera di sistema e restituisce una foto.

appo.location

requestPermission() · getCurrentPosition()

Posizione corrente con gestione permessi inclusa.

appo.haptics

impact(style) · notification(type)

Vibrazioni di impatto e di notifica.

appo.storage

get(key) · set(key, value) · delete(key)

Storage chiave-valore, cifrato.

appo.share

open({ title, message, url })

Il menu di condivisione di sistema.

appo.network

getStatus() · onChange(cb)

Stato della connessione ed eventi di cambio stato.

appo.device

getInfo()

Modello, OS e versione dell'app.

appo.nfc

readTag() · writeTag(records) · onTag(cb)

Lettura e scrittura di tag NDEF.

Pubblicazione

Poi la portiamo negli store.

Il bridge dà al tuo codice capacità native. Appo gestisce la parte che non è codice.

App nativa e firma

App iOS e Android, certificati e firma gestiti per te.

Invio e revisione

Schede store, invio e gestione della revisione, sui tuoi account developer.

Aggiornamenti dopo il rilascio

Aggiornamenti web e contenuti senza nuovo invio; nuove release native quando serve.

Dal terminale

Creala. Aprila.

Un solo comando crea l'app dall'URL del tuo sito. Nessun account per la prova: il QR di installazione arriva dritto nel terminale.

$ npx @appolabs/appo new --url negozio.it
App creata.
█▀▀▀▀▀█ █▀▄▄ █  █▀█▀▀▀▄█  █▀▀▀▀▀█
█ ███ █ ▄▀▀▄▀ ▄▄▄▀ █▄ ▀██ █ ███ █
█ ▀▀▀ █  ▀▄▀█ █  ▄▄▄█▄  █ █ ▀▀▀ █
▀▀▀▀▀▀▀ █▄█ █ █ ▀▄█ █ █▄█ ▀▀▀▀▀▀▀
▀▄▀█ ▀▀█ █  ▀ ▄ █▀▄█▄▀ ▄▄ █▄ █▄▀█
▄ ▀▄▀█▀  █▀█ ▄█▄▄▀▄ █ ▀█▀ ██▀█ █▀
  ██ ▀▀▀▄▀█▀ ▄ ▀▄ █▀ ▄█ ██ ▄▀█▄█
▀██▄▀▄▀▄█▀▄  ▄ ▀█▀▀▄▄█▄  ▄█ ▀▀█
███ █ ▀██ ▀ ▄▄▀█▀▄▀▀▀▀█████ ██▀▄▄
 ▀▀ ▄▀▀▀▄██ ▀▀▄██▀ ▄▀▀▄▄▀▀▄▀█ ▀█
▄█▀▀▀▄▀ █▄ ▀ ███ ▄█ ▀█▄▄▀ ▄▀ █▀▀▄
 ▄ ▀▄▄▀▄  ▀█▄▀▀ █ ▀▄   █  ▀█▄▄ █▀
▀  ▀  ▀▀█▄▀▀▀▄ █▀█ ▄  █ █▀▀▀█▄ ▄
█▀▀▀▀▀█ ██▄█▄▄  ▄  ▀ █▀██ ▀ █▄▄▄
█ ███ █ ▄▀█▀ ▀▀  ▀▄▄█ ▄▀▀▀▀█▀▄▀▀▄
█ ▀▀▀ █ ▀▀ ▀▀ █▄▄▄▄█ ▀  █▀██▄▀  ▄
▀▀▀▀▀▀▀ ▀▀ ▀ ▀▀▀ ▀▀ ▀▀ ▀    ▀ ▀
QR a schermo · inquadralo, l'app si apre sul telefono

Il bottone copia il comando.

Dal tuo editor AI

Descrivi il risultato.

Un comando aggiunge il server al tuo editor AI (Claude Code, Codex). Il tuo assistente chiama i tool di Appo: crea l'app, ti mette l'anteprima sul telefono e la porta negli store: tu approvi.

$ npx @appolabs/appo mcp

Trasforma negozio.it in un'app

create_app(url: "negozio.it")
App creata.

Aprila sul mio telefono

preview_app(id: 128)
QR in chat · inquadralo, l'app si apre sul telefono.

Usi Cursor? La config .mcp.json è nella documentazione.

Porta il tuo stack

0 riscritture
Il tuo codice non cambia
Lo stesso giorno
Da npm install alla build nativa
10 API native
Un solo bridge JavaScript

Funziona con il tuo stack

Prezzi

Nessun rebuild. Nessuna sorpresa.

Inizia gratis con il tuo sito esistente. Passa a un piano superiore quando pubblichi.

Starter

Per chi vuole iniziare

40/mese

120 fatturati ogni 3 mesi

  • App iOS e Android
  • Guida alla pubblicazione sugli store
  • 500 notifiche push/mese
  • JavaScript Bridge completo
  • Sincronizzazione automatica
  • Supporto via email
Inizia gratis
Più popolare

Business

Per aziende in crescita

90/mese

270 fatturati ogni 3 mesi

  • Tutto di Starter
  • Pubblicazione gestita
  • Notifiche push illimitate
  • Face ID / Touch ID
  • Analytics avanzate
  • Branding personalizzato
  • Supporto prioritario via chat
Inizia gratis

Agency

Per team e agenzie

Su misura
  • Tutto illimitato
  • Soluzione white-label
  • Account manager dedicato
  • SLA su misura
  • SSO e gestione team
  • Opzione on-premise
Parla con il team

Domande? Risposte.

Il bridge, i fallback e come funziona la pubblicazione.

Hai una domanda tecnica? Contattaci

Crea la tua prima app dal tuo terminale

Un comando dal terminale, oppure aggiungi il server MCP al tuo editor AI. Niente rebuild.

CLI open sourceDevice-auth, niente cartaMCP per Claude Code, Codex, Cursor