Saltar al contenido
supastack
Explorar la documentación

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /es/docs/desktop/updates.md (or send Accept: text/markdown).

Actualizaciones automáticas y canales de release

Feeds de actualización firmados, el canal stable/beta y el flujo de release incluido.

Genera el par de claves del updater una vez

El updater verifica firmas minisign en los artefactos descargados. Genera un par de claves con el firmante de Tauri y guarda la clave privada como TAURI_SIGNING_PRIVATE_KEY con su contraseña en TAURI_SIGNING_PRIVATE_KEY_PASSWORD, ambas en tu almacén de secretos —nunca en el repositorio—. Las compilaciones que crean artefactos del updater emiten un archivo adyacente .sig junto a cada instalador; la clave pública va a los clientes, la privada se queda en CI.

corepack pnpm --filter @supastack/desktop exec tauri signer generate -w ~/.tauri/product.key

Configura el updater en tiempo de compilación

tauri.conf.json distribuye un bloque de updater centinela con endpoints y pubkey vacíos —consérvalo, porque el plugin del updater no puede inicializarse sin las claves presentes—. Los valores reales se fusionan en profundidad en tiempo de compilación mediante un overlay JSON de --config o la variable de entorno TAURI_CONFIG; check:release-config imprime el overlay exacto a pegar cuando SUPASTACK_UPDATER_ENDPOINT y SUPASTACK_UPDATER_PUBKEY están definidos.

Define ambos o ninguno: un overlay solo de endpoints deja pubkey vacío, así que las comprobaciones parecen funcionar mientras cada instalación falla la verificación de firma. La URL del endpoint lleva los marcadores {{target}}, {{arch}} y {{current_version}} —la ranura de versión es obligatoria— más un segmento de ruta opcional {{channel}} que habilita los canales de release.

# check:release-config prints this overlay for tauri build --config:
# {"plugins":{"updater":{"endpoints":["https://releases.example.com/{{channel}}/{{target}}/{{arch}}/{{current_version}}"],"pubkey":"<base64 public key>"}}}
# SUPASTACK_UPDATER_ENDPOINT=
# SUPASTACK_UPDATER_PUBKEY=

Publica el feed latest.json

Cada endpoint responde un manifiesto latest.json —version, notes, pub_date y un mapa platforms que cubre darwin-aarch64, darwin-x86_64, windows-x86_64, windows-aarch64, linux-x86_64 y linux-aarch64— donde cada entrada empareja la URL del instalador con su signature.

Constrúyelo con el script release:manifest: explora un directorio de bundle en busca de artefactos .app.tar.gz, -setup.exe (preferido sobre .msi) y .AppImage —cada uno debe tener su vecino .sig— y escribe o fusiona el manifiesto. Los flags cubren --version, --base-url, --bundle-dir con --platform, --merge para acumular plataformas entre ejecuciones, --notes, --pub-date y --out.

corepack pnpm --filter @supastack/desktop release:manifest -- \
  --version 1.2.0 \
  --base-url https://releases.example.com/stable \
  --bundle-dir src-tauri/target/release/bundle \
  --platform windows-x86_64 \
  --merge latest.json

Canales stable y beta

Cuando un endpoint contiene el marcador {{channel}}, el menú de la app habilita una casilla Beta Updates que alterna el feed entre stable y beta. La elección persiste en un archivo update-channel junto a la configuración de la app; SUPASTACK_UPDATE_CHANNEL la sobrescribe por ejecución —cualquier cosa no reconocida se ignora con un aviso— y stable es el predeterminado. Sin el marcador, el conmutador permanece deshabilitado y solo se comprueba el feed stable.

Cuándo se comprueban las actualizaciones

Una comprobación silenciosa en segundo plano se ejecuta al arrancar y solo muestra un diálogo cuando existe una actualización; el elemento de menú Check for Updates… informa cada resultado. Las comprobaciones se serializan: una segunda petición concurrente se descarta. Una actualización disponible ofrece Install and Restart, que descarga, instala y reinicia la app; las compilaciones sin configurar responden que las actualizaciones no están configuradas, y los fallos aparecen como diálogos en lugar de reintentos.

El flujo de release incluido

.github/workflows/desktop-release.yml compila la matriz —macOS en ambas arquitecturas, Windows y Ubuntu— en etiquetas desktop-v* o en un dispatch manual con una versión y un canal. Estampa la versión del manifiesto desde la etiqueta (una release que se lo salta se ofrece a sí misma como actualización para siempre), fusiona los manifiestos por plataforma y crea una release de GitHub en borrador que lleva latest.json más cada instalador y firma —marcada como prerelease para canales beta—.

Necesita SUPASTACK_APP_URL y SUPASTACK_UPDATER_ENDPOINT como variables del repositorio, y SUPASTACK_UPDATER_PUBKEY más la clave privada de firma y su contraseña como secretos; las credenciales de firma de Apple son añadidos opcionales. El runbook completo vive en docs/desktop-updates.md del repositorio.

Verificación y solución de problemas

Instala una compilación, publica un manifiesto más reciente en un feed de prueba y confirma que el diálogo de actualización llega en la siguiente comprobación y la app reinicia en la versión nueva. Después cambia a beta y confirma que la respuesta del feed de canal cambia.

Preguntas frecuentes

14 preguntas

¿Qué es supastack?

supastack es una base modular para construir productos SaaS con IA. Reúne la infraestructura común para que puedas centrarte en las funciones propias de tu producto.

¿Soporta web y móvil?

Sí. supastack incluye apps Next.js y Expo como puntos de partida para experiencias web y móviles.

¿Qué autenticación incluye?

Better Auth cubre correo/contraseña, OTP e inicio social. Los espacios de trabajo personales se aprovisionan con la cuenta para que los registros permanezcan delimitados desde el primer día.

¿Cómo se soporta la IA?

supastack incluye IA multi-proveedor configurable, seguimiento de uso, presupuestos y soporte cifrado de claves propias (BYOK).

¿Cómo se gestionan las suscripciones?

Para productos construidos sobre el kit, la facturación Stripe, las suscripciones y los permisos forman la base del acceso de pago. Los secretos de proveedor permanecen en el servidor.

¿Dónde vive el código propio de mi producto?

Las funciones propias del producto permanecen en un codebase separado, mientras el producto configura e integra los módulos base de supastack.

¿Cómo funciona el precio de supastack?

El kit es una compra única con actualizaciones de por vida: Stack único a 249 $ —a elegir entre los repositorios Next.js (web), Expo (iOS y Android) o Tauri (macOS y Windows)—, Doble stack a 398 $ con dos repositorios a elegir, o Paquete completo a 399 $ con los tres repositorios y el monorepo completo, más 75 $ por plaza de desarrollador adicional. Sin suscripción al kit. El pago en este sitio entrega tu clave de licencia por correo, con acceso al repositorio por invitación de GitHub.

¿Cómo delimitan los espacios de trabajo mis datos?

Los registros del usuario se delimitan por workspaceId. Identidad, permisos, uso de IA, eventos de facturación y entradas de auditoría permanecen dentro del límite del espacio personal.

¿Cómo funcionan los jobs en segundo plano?

Trigger.dev es el runtime de jobs explícito. El contrato JobRunner solo promete enqueue, status y cancel — la semántica de workflow sigue siendo específica y explícita de Trigger.dev.

¿En qué se diferencia el email de la divulgación?

El email transaccional cubre flujos de producto como avisos de finalización de tareas. La divulgación en frío y las campañas pertenecen al producto, fuera del módulo de email de este kit.

¿Cómo funcionan las compras móviles?

La app móvil incluye compras nativas y restauración con RevenueCat, con acceso verificado por tu servidor. Configura las cuentas de las tiendas y completa las pruebas en dispositivos antes de publicar. La facturación web es independiente.

¿Dónde residen las claves de los proveedores de IA?

Las credenciales BYOK están cifradas y permanecen en el servidor. Las claves se saneen en los logs; el uso y los presupuestos siguen visibles a nivel de espacio de trabajo.

¿Qué métodos de pago acepta el checkout?

El checkout alojado en Stripe acepta tarjetas y, una vez activadas las billeteras en la cuenta de Stripe, también puede ofrecer Alipay y WeChat Pay — muy útil para compradores en China. Las autorizaciones de billetera se confirman de forma asíncrona, por lo que la página de la licencia se actualiza en cuanto se liquida el pago.

¿Puedo obtener un reembolso?

Una vez que tienes acceso al repositorio, supastack es tuyo para siempre, por lo que no se puede reembolsar. Pero no te preocupes: obtienes el código fuente completo con actualizaciones de por vida para crear y lanzar productos ilimitados para ti o tus clientes. Solo no puedes revender el código ni redistribuir el repositorio como plantilla o starter kit.

ES
Tema