← Volver al inicio
Regalo para desarrolladores

Skill de Obsidian para Desarrolladores

Patrones, gotchas y reglas acumuladas en 5 plugins con +95 pts en el Bot Store. Todo lo que necesitás saber para pasar la revisión de la comunidad.

Descargar skill completo (.md) Obsidian Community Store

Reglas críticas

Estas son las reglas que NUNCA debés violar. El bot de revisión las detecta automáticamente.

Nunca uses innerHTML. Usá createEl(), createDiv(), createSpan().
Nunca uses fetch() directo. Usá requestUrl() de la API de Obsidian. Retorna { status, json, text } — son propiedades, no métodos.
Nunca uses elementos de heading. Usá new Setting(containerEl).setName("Título").setHeading().
Nunca uses confirm() ni window.confirm(). Usá un Modal personalizado de Obsidian.
Nunca uses window.prompt(). Usá un Modal personalizado.
Siempre envolvé operaciones de vault en try-caché. Las race conditions con el índice asíncrono causan fallos silenciosos.
Usá window.setTimeout() en vez de setTimeout() bare. Para compatibilidad con popout windows.
Los handlers async en onClick deben retornar void. Wrappeá con void (async () => { ... })().
Verificá el @since de cada API contra minAppVersion en manifest.json antes de escribir código.

Workflow — 3 pasos

Paso 1: Cargar la referencia

Leé references/obsidian.md — gotchas acumulados, compatibilidad de API, reglas del bot de revisión, patrones, y flujo de releases.

Paso 2: Verificar cada llamada a la API

Para cada método de la API de Obsidian que uses, verificá la anotación @since en node_modules/obsidian/obsidian.d.ts y compará con minAppVersion.

API@sinceAlternativa compatible
fileManager.trashFile()1.6.6vault.trash(file, true) (0.9.7)
workspace.revealLeaf()1.7.2setActiveLeaf(leaf, { focus: true }) (0.16.3)
PluginSettingTab.display()deprecated 1.13.0Extraer método render(), delegar desde display()

Paso 3: Aplicar reglas de revisión

Pitfalls — 9 gotchas que te van a morder

  1. Las reglas del bot contradicen entre rondas. no-unsupported-api rechaza APIs nuevas; no-deprecated-api exige las mismas. Fix: subir minAppVersion.
  2. El parser YAML custom corrompe con caracteres especiales. Siempre escapá \n, \r, \\, \".
  3. Array.sort() muta in-place. Usá [...arr].sort() o arr.toSorted() en views.
  4. data.json del plugin no se sincroniza. Implementá auto-descubrimiento de books desde el filesystem del vault.
  5. El índice del vault en mobile puede estar vacío durante onload(). Fallback a adapter.list() / adapter.exists().
  6. DEFAULT_SETTINGS solo aplica a instalaciones nuevas. Los usuarios existentes necesitan lógica de migración.
  7. El release manual crea race condition con CI. Si hacés gh release create manualmente y el CI también lo hace, falla. Solo subí el tag — CI maneja el release.
  8. requestUrl no soporta signal/AbortController. No podés pasar AbortSignal.timeout(). Eliminá la lógica de timeout o wrappeá con Promise.race.
  9. Los callbacks de setTimeout que retornan non-void activan warnings. Usá block body: setTimeout(() => { expression; }).

Checklist de verificación

Descargar skill completo (.md)