Book Metasearch

by bongho
5
4
3
2
1
Score: 27/100

Description

Book note maker with metasearch across Aladin, Kakao, Google Books, and Open Library. Successor to anpigon/obsidian-book-search-plugin (Naver EOL 2026-08-01).

Reviews

No reviews yet.

Stats

2
stars
76
downloads
0
forks
14
days
0
days
8
days
18
total PRs
5
open PRs
2
closed PRs
11
merged PRs
2
total issues
2
open issues
0
closed issues
39
commits

Latest Version

8 days ago

Changelog

Fixed

  • Concurrent edits to a note are no longer overwritten. Appending a Price Watch row and refreshing the auto-filled description both read the note, built a new body from it, and wrote that back. Anything typed in between — and an Aladin price lookup leaves a whole network round-trip of room — was silently discarded. Both paths now use Vault.process(), which reads and writes as one atomic operation.
  • Sentence case in six UI strings: four settings names ending in Keykey, plus the Reading log and Price check headings.

Security

Development-toolchain only — the packages below live in devDependencies and never reach the bundled main.js.

  • Bumped vitest 2.1.9 → 3 and @vitest/coverage-v8 to match, clearing two critical advisories in @vitest/mocker (arbitrary file read/execute while the Vitest UI server is listening). Dependabot never proposed this because the fix needs a major bump — npm audit surfaced it instead. With the follow-up npm audit fix for transitive brace-expansion and fast-uri advisories, npm audit goes from 9 vulnerabilities to 0.

Changed

  • Dependency bumps: eslint 9 → 10, @types/node 22 → 26, happy-dom 15 → 20, esbuild 0.25.5 → 0.28.1 (includes a path-traversal fix in esbuild's dev server), eslint-plugin-obsidianmd 0.4.1, globals, typescript-eslint, and the actions/checkout + actions/setup-node CI actions to v7.
  • Configured obsidianmd/ui/sentence-case with this plugin's own vocabulary (acronyms, provider brand names, and an ignore list for Korean UI copy and literal placeholder strings), taking lint from 48 warnings to 2. The rule stays on so it keeps checking English UI strings.

README file from

Github

Book Metasearch

Book note maker with metasearch across Aladin · Kakao · Google Books · Open Library, queried in parallel. Korean-first with foreign fallback.

Successor to anpigon/obsidian-book-search-plugin (unmaintained). Built to solve the Naver Book Search API EOL (2026-08-01) and provide a proper Korean-first book note workflow.

Install

From the community plugin directory:

  1. In Obsidian, open Settings → Community plugins
  2. Turn off Restricted mode if enabled
  3. Click Browse and search for Book Metasearch
  4. Click Install, then Enable

Features

Core (v1.0)

  • 4-provider metasearch: Aladin (Korean primary) · Kakao (Korean recall) · Google Books (foreign primary) · Open Library (foreign covers/ISBN)
  • Two strategies: Sequential fallback (default) or parallel Fanout with ISBN13 dedupe
  • Commands: Search books · Search by ISBN · Search based on current note · Update book info · Migration helper
  • Template file support with {{variable}} substitution — Templater <% %> blocks are preserved for post-creation execution
  • Frontmatter customization: useDefaultFrontmatter toggle · key case (as-is / camelCase / snake_case / kebab-case) · additional YAML fragment with {{variable}} substitution
  • Cover image download to a configurable folder
  • 37 ISO 639-1 locale codes for cross-provider language filtering
  • API keys masked in settings with click-to-reveal
  • Cover thumbnails in search results (opt-in)
  • Naver EOL migration: opt-in helper detects an existing obsidian-book-search-plugin config and guides users through Aladin setup

v1.1 additions

  • Auto-filled Abstract / Description section — new notes get the provider's book description written into the ## Abstract / Description block (HTML stripped). "Update book info in current note" refreshes it while preserving edits outside the auto-block markers.
  • ISBN13 vault-wide duplicate detection — before creating a note, the plugin scans the vault. On match, DuplicateModal offers: open existing / update existing / create anyway / cancel. Backed by an incremental VaultBookIndex.
  • Reading Log — three commands ("Mark book as wishlist / reading / read") with automatic startedAt / finishedAt date stamping (idempotent). New notes get a configurable initial status (default: wishlist).
  • Insert book citation at cursor — editor command that emits a wikilink to an existing vault note (if any) or an unresolved link. Two link styles.
  • Aladin used-book price check (opt-in) — surfaces used-book minimum prices as a Notice or appended ## Price Watch section.
  • Redacted error diagnostics — healthcheck / migration failures auto-write a diagnostics note with secrets masked, so users can attach it to bug reports.

See CHANGELOG.md for the full v1.1.0 changelog.

Provider setup

Only Aladin and Kakao require API keys (both free, instant issuance). Google Books works without a key at a lower rate limit. Open Library needs no auth.

Provider Auth Free tier Where to get a key
Aladin TTB Key (required) 5,000/day aladin.co.kr/ttb
Kakao REST API Key (required) 30,000/day developers.kakao.com
Google Books API Key (optional) 1,000/day with key, low limit without Google Cloud Console — enable Books API first
Open Library No auth Effectively unlimited

After installing, open Settings → Book Metasearch → Providers, paste keys, and hit Healthcheck on each provider.

Attribution

The Aladin OpenAPI general-tier terms don't strictly mandate a credit link, but keeping the "Book DB by Aladin" footer in generated notes is the polite (and forward-compatible if you ever upgrade to the premium tier). Leave the credit toggle on unless you have a specific reason.

Development

Prerequisites: Node 20+, npm.

git clone https://github.com/bongho/obsidian-book-metasearch.git
cd obsidian-book-metasearch
npm install

# dev — build directly into your vault's plugin folder
export VAULT_PLUGIN_DIR="/path/to/your/vault/.obsidian/plugins/book-metasearch"
mkdir -p "$VAULT_PLUGIN_DIR"
cp manifest.json styles.css "$VAULT_PLUGIN_DIR/"
OUTDIR="$VAULT_PLUGIN_DIR" npm run dev

# production build
npm run build

For hot-reload, install pjeby/hot-reload via BRAT and create an empty .hotreload file in the plugin folder.

License

MIT © 2026 BongHo Lee