Software engineer based in Queretaro, Mexico. I build tools for Obsidian and open-source developer tooling.
I maintain 20+ Obsidian plugins and tools with 1,000+ combined stars. Here are some highlights:
| Plugin | Stars | Description |
|---|---|---|
| Custom Attachment Location | 166 | Customize attachment paths with variables like Typora |
| CodeScript Toolkit | 149 | Run JavaScript/TypeScript scripts directly inside Obsidian |
| Frontmatter Markdown Links | 86 | Markdown link support in frontmatter |
| Advanced Exclude | 70 | Gitignore-style syntax for excluded files |
| Better Markdown Links | 57 | Angle bracket links and relative link management |
| Backlink Cache | 54 | Speed up backlink resolution with caching |
| Smart Rename | 48 | Rename notes while preserving link titles |
See the full list at obsidian-resources.
- obsidian-lib -- Runtime library for Obsidian plugins: plugin base classes, components, settings, modals, vault and metadata helpers
- obsidian-dev-toolkit -- Tooling for Obsidian plugin development: esbuild builder, shared ESLint/Vitest configs, demo vaults and release script; with obsidian-lib it replaces the retired obsidian-dev-utils
- Invoke-NativeApplication -- PowerShell module for proper native command error handling
- typescript-template -- Strict TypeScript project template with ESLint, dprint, commitlint, and full CI
Open issues through the issue forms, not as blank issues.
Filing from the CLI or the API (gh issue create --body, or an AI agent filing for you) skips the form, and gh issue create --template cannot load an issue form. In that case, open the matching form in .github/ISSUE_TEMPLATE/, copy every field as a ### <label> heading in the form's order, and fill in each one. Always state the version you used and your operating system.







