Crear paneles
Crear paneles
Un panel de la comunidad es una carpeta de archivos web que Deska ejecuta en un sandbox sobre tu escritorio. Qué es, cómo habla con Deska, las reglas que sigue y dónde está documentada cada parte.
Qué es un panel
Un panel de la comunidad es una pequeña página web que vive en un escritorio de Deska, junto a terminales, editores y tareas. Lo escribes como una carpeta: un panel.json que dice qué es el panel y qué puede hacer, una página HTML, y los scripts, estilos, imágenes y fuentes que esa página cargue. No hay paso de compilación, ni servidor, ni framework que adoptar. Deska le sirve la carpeta al propio panel.
Deska ejecuta la página en un marco aislado con un origen propio, así que no puede leer tus archivos, tus otros paneles, tus agentes ni tu cuenta. La página solo habla con Deska a través de window.deska, el SDK que Deska sirve en /__deska/sdk.js dentro de cada panel. Con él un panel guarda sus propios datos, sigue el tema, sabe cuándo está en pantalla y, si la persona lo permite, envía avisos, abre enlaces y copia texto.
Un panel aparece en dos lugares:
- En el escritorio, como un panel en el lienzo, en un dock o en una ventana propia. Todo paquete lo tiene.
- En Extras, el popover del lienzo donde están Enfoque y Música, como una fila con una línea de estado y un control redondo. Es opcional; consulta Extras.
El panel más pequeño
Con dos archivos tienes un panel que carga, sigue el tema y te saluda con su nombre:
{
"schema": 1,
"id": "hello-desk",
"name": "Hello Desk",
"version": "0.1.0",
"description": "Says hello in Deska's colors.",
"author": "Your name",
"sdk": 1,
"contributes": { "panel": { "entry": "index.html" } }
}<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="/__deska/sdk.js"></script>
<style>
body { margin: 0; padding: 16px; background: var(--deska-bg); color: var(--deska-text); font: 13px var(--deska-font-ui); }
</style>
</head>
<body>
<p id="hello">Waiting for Deska</p>
<script type="module">
const init = await deska.ready()
document.getElementById('hello').textContent = `Hello from ${init.panel.name}`
</script>
</body>
</html>Ponlos en una carpeta, abre la Biblioteca de paneles (Cmd/CtrlShiftE), ve a Comunidad, luego a Crear un panel, elige Cargar una carpeta y selecciónala. El panel aparece en tu escritorio y se recarga cada vez que guardas. Crea tu primer panel lleva la misma idea más lejos en unos quince minutos.
De una carpeta al escritorio de otras personas
- Construye. Escribe la carpeta, pruébala junto a tu editor con la herramienta de vista previa del repositorio de ejemplos y cárgala en Deska con Cargar una carpeta. Deska la revisa con las mismas reglas que encontrará al publicarse. Consulta Pruebas y depuración.
- Solicita acceso. Publicar está abierto a autores invitados. Cuéntanos qué estás construyendo en deska.dev/panels/apply.
- Publica. Cuando aprueben tu cuenta, pulsa Publicar en la página de la carpeta cargada en Deska. deska.dev vuelve a revisar el paquete y lo publica. Consulta Publicar.
- Lo instalan. Otras personas lo encuentran en Descubrir y en deska.dev/panels, leen qué puede hacer y a qué sitios se conecta, y lo instalan. Lo que instalan sigue a su cuenta en cada computadora donde inician sesión.
- Actualiza. Sube
versiony publica otra vez. Las instalaciones ofrecen la actualización, y antes vuelven a preguntar si la versión nueva pide un permiso o un sitio que no se había permitido.
Las reglas en breve
Cada regla tiene su razón y una forma de resolverla en El sandbox; los límites exactos están en Códigos de error y límites.
| Regla | Qué hacer en su lugar |
|---|---|
| Solo los sitios de network, por https | Declara cada host del que el panel pide datos o carga imágenes, fuentes y medios. La API debe aceptar cualquier origen (CORS). |
| Sin localStorage, indexedDB ni cookies | Guarda los datos en deska.storage: 256 KB por paquete, compartidos por todas sus copias en la computadora. Guarda las imágenes y otros archivos en deska.files: 32 MB por archivo, 256 MB por paquete. |
| Sin descargas | Guarda un archivo con deska.files.save: la persona elige dónde. |
| Sin marcos propios, workers ni scripts remotos | Incluye tus librerías dentro del paquete. Reproduce medios de hosts declarados con <audio> y <video>, o muestra la página de otro sitio a través de Deska con deska.embed. |
| Los formularios nunca navegan; sin ventanas emergentes ni alert() | Maneja el envío con preventDefault() y abre enlaces con deska.openUrl. |
| El foco solo se mueve cuando la persona actúa | Llama a openUrl, clipboard.write y files.save directo desde un clic; pide atención con deska.notify. |
| Sin secretos | No hay un lugar seguro para un token. Usa APIs públicas. |
| Se puede recargar en cualquier momento | Guarda lo importante en el almacenamiento y reconstruye a partir de lo que responde deska.ready(). |
Dónde está cada cosa
Empieza desde un ejemplo
deska-panels-examples en GitHub reúne catorce paneles con licencia MIT, una carpeta inicial y la herramienta de vista previa. Lee uno, cópialo o carga cualquier carpeta de panels/ con Cargar una carpeta. Empieza por Team Clocks, y ten SDK Playground abierto mientras construyes: ejecuta cada llamada y muestra cada código de error. La lista completa, con capturas, está en Paneles de ejemplo.
Si solo quieres instalar paneles, todo lo que necesitas está en Paneles de la comunidad.