Product Craft Bible
Command Palettes & Keyboard-first UI
Inicio Navegación y Búsqueda Command Palettes & Keyboard-first UI
Navegación y Búsqueda

Command Palettes & Keyboard-first UI

12 reglas Superhuman / Paul BuchheitUX Patterns for Developers / GitHub PrimerAlicja Suska / Mobbin Command Palette Best PracticesNielsen Norman Group · Accelerators Maximize Efficiency
180

Command Palettes & Keyboard-first UI

12 reglas
1569

Responder a cada tecla en menos de 100ms

Los resultados de busqueda deben filtrar y renderizar en menos de 100ms por keystroke para sentirse instantaneos. Por encima de 100ms el usuario percibe lag; por encima de 300ms la interfaz parece rota. El filtrado debe correr client-side contra un índice pre-cargado, jamas un request de red por tecla.

Superhuman / Paul Buchheit
Preferir
rename fil
Acciones
Rename File F2
Filter Files ⌘F
Filtrado local · resultados en <40ms
Evitar
rename fil
Consultando servidor...
Esperando respuesta API · ~320ms
Latencia de red visible en cada tecla
1570

Abrir la paleta en menos de 150ms con fade-in de 200ms

El overlay debe aparecer en menos de 150ms del shortcut y animarse con un fade-in de máximo 150-200ms. Animaciones más largas contradicen el contrato de velocidad del patrón. Focus debe moverse al input en el frame 1 de la animación, no al terminar. Respetar prefers-reduced-motion.

UX Patterns for Developers / GitHub Primer
Preferir
Buscar acciones...
Focus asignado en frame 1
opacity 0→1
translateY(-4px)→0
150ms ease
Evitar
Escribe un comando...
Aún animando · focus no asignado
scale(0.9)→1
300ms
focus en setTimeout
1571

Mostrar 5-8 resultados por defecto; nunca más de 10 sin agrupar

La lista por defecto muestra 5 a 8 resultados sin scroll. Más de 10 sin agrupar obliga a escanear visualmente y elimina la ventaja de velocidad. Cuando el total supera 10, agrupar por categoría con headers en all-caps y limitar cada grupo a 3-5 items. Altura máxima recomendada: 480-500px.

Alicja Suska / Mobbin Command Palette Best Practices
Preferir
pro...
Navegación
Project Settings ⌘,
Products Dashboard
Acciones
Promote to Admin
Proforma Invoice
Ver 12 resultados más →
Evitar
pro...
Project Settings
Profile Preferences
Products Dashboard
Proforma Invoice
Progress Report
Project Archive
Promotional Codes
... 33 más
1572

Mostrar badges de shortcut inline, alineados a la derecha, en cada resultado

El shortcut de cada comando aparece como badge a la derecha en su fila, usando el simbolo del OS (⌘ vs Ctrl, ⌥ vs Alt). Comandos sin shortcut no muestran badge. Usa elementos <kbd> para semejanza semántica con ARIA. Tamaño de glyphs ~11px, en color secundario (60% opacidad o token text-2).

Nielsen Norman Group · Accelerators Maximize Efficiency
Preferir
Buscar...
New Issue ⌘N
Archive E
Rename File F2
Move to Project sin atajo
Evitar
Buscar...
New Issue
Archive
Rename File
Move to Project
1573

Pre-poblar el estado vacio con 5-7 comandos recientes o fijados

Al abrir la paleta sin query, mostrar 5-7 comandos usados recientemente o defaults curados. Esto hace la paleta inmediatamente útil: la acción más probable es el item #1, alcanzable con un solo Enter. Etiquetar la sección "Recientes" para que el usuario entienda que la lista es personalizada.

Sam Solomon · Designing Command Palettes
Preferir
Buscar acciones...
Recientes
Rename F2
Move to Project
Assign to Me
Set Priority: Urgent
Duplicate
Evitar
Escribe un comando...
Sin resultados recientes
1574

Usar fuzzy matching con scoring jerárquico, no prefix exacto

La busqueda debe encontrar "New Issue" escribiendo "nwiss" y "Project Settings" con "prj set". El scoring prioriza: (1) match exacto, (2) iniciales ("ni" → "New Issue"), (3) caracteres consecutivos, (4) caracteres dispersos. Resaltar en negrita los caracteres coincidentes para explicar el resultado.

UX Patterns for Developers / Alicja Suska
Preferir
gi
Go to Issue ⌘I
Go to Inbox ⌘1
Git Ignore ,
Evitar
gi
Sin resultados para "gi"
Escribe "Go to" para ver opciones
1575

No sobreescribir shortcuts reservados del OS o browser para el trigger

El shortcut de apertura no debe conflictuar con combinaciones reservadas del OS o browser. La opción más segura en web es ⌘K / Ctrl+K (adoptado por Linear, GitHub, Vercel, Notion y no reservado). Dentro de la paleta, letras solas (j/k para navegar) son seguras porque solo activan sin inputs enfocados.

Knock.app / Hidde de Vries · keyboard shortcuts need modifier keys
Preferir
Trigger recomendado
K macOS
/
Ctrl K Win/Linux
Linear ✔ GitHub ✔ Vercel ✔ Notion ✔ Raycast ✔
Evitar
Shortcut elegido
Ctrl + F = Buscar en página (browser)
El browser intercepta la combinación antes que la app
1576

Atrapar foco dentro de la paleta y devolverlo al trigger al cerrar

Mientras la paleta esta abierta, Tab y Shift+Tab solo ciclan dentro del overlay. Escape cierra la paleta en un solo press y devuelve el foco al elemento que la abrio. Usar role="combobox" en el input y aria-activedescendant en cada navegación con flecha.

W3C WAI-ARIA APG · Combobox Pattern
Preferir
Nueva Issue
Esc cierra paleta
activeElement = [button "Abrir paleta"]
Lector de pantalla anuncia: "Abrir paleta, botón"
Evitar
Nueva Issue
Después de cerrar paleta:
document.activeElement = <body>
Usuario de teclado no sabe donde esta el foco
1577

Ensenhar shortcuts just-in-time: mostrar el tip después de la acción vía GUI

Mostrar un toast no bloqueante con el shortcut equivalente inmediatamente después de que el usuario completa una acción con raton o menú. Mostrar máximo 3 veces por acción. Nunca antes de que el usuario haya demostrado necesidad realizando la acción.

Nielsen Norman Group · Accelerators Maximize Efficiency
Preferir
Panel de issues
Actualizar diseño de auth Archivado vía menú
Archiva más rápido
Presiona E directamente
Auto-dismiss 5s · max 3 apariciones
Evitar
Bienvenido a la app
Aprende todos los atajos antes de empezar
Nueva issue⌘N
ArchivarE
Buscar⌘K
...44 atajos más
1578

Proveer referencia de shortcuts busqueda con ? o ⌘/

Toda app keyboard-first expone una referencia completa y buscable vía ? (cuando no hay input enfocado) o ⌘/ / Ctrl+/. La referencia se abre dentro de la app, no en una nueva pestana. Incluye busqueda live por nombre de acción e incluye link a "Personalizar".

Nielsen Norman Group · Google Docs (patrón Ctrl+/)
Preferir
Atajos de teclado ?
Navegación
Ir a IssuesG → I
Ir a ProyectosG → P
Evitar
Ayuda
Atajos de teclado (help.example.com)
Se abre en nueva pestana · sin busqueda · puede estar desactualizado
1579

Usar aria-live="polite" para anunciar conteos y selección a lectores de pantalla

Una region aria-live="polite" visualmente oculta anuncia el total de resultados tras cada keystroke ("5 resultados") y el item enfocado con flechas ("Rename, 2 de 5"). Sin esto los usuarios de lector de pantalla no saben si la paleta esta respondiendo.

W3C WAI-ARIA APG · Combobox Pattern · MDN
Preferir
UI visible
ren
Rename
Rename File
Render Preview
3 resultados
Anuncios aria-live
Al filtrar "ren":
"3 resultados"
Al presionar flecha abajo:
"Rename File, 2 de 3"
HTML oculto:
<div aria-live="polite" aria-atomic="true" class="sr-only">
1580

Delimitar resultados al contexto actual; etiquetar comandos contextuales

La paleta distingue comandos globales (siempre disponibles) de contextuales (solo en la vista actual). Los contextuales aparecen primero con una etiqueta de contexto en texto secundario. Eliminar comandos irrelevantes en lugar de mostrarlos desactivados; los grayed-out generan desconfianza.

Sam Solomon / VS Code Command Palette UX Guidelines
Preferir
Buscar...
En esta selección
Format Selection ⌥⇧F
Comment Out
Replace in Selection
Global
New File
Open Terminal
Evitar
Buscar...
New Issue
Format Selection(no disponible)
Comment Block(no disponible)
Replace in Selection(no disponible)
Archive
...194 comandos más, muchos desactivados