ivan9448 downloadsBrowse Markdown manuscripts on a responsive, tactile 3D bookshelf.
Manushelf turns a folder of Markdown manuscripts into a responsive, tactile 3D bookshelf inside Obsidian.
Each direct child folder is one book. Manushelf prefers that folder's index.md, then its first naturally sorted Markdown file. It also discovers cover.<image type> automatically. Use 编辑图书信息 from the book folder menu when you want to override the discovered title, description, cover, or entry—no hand-written JSON is required.

Manushelf follows Obsidian's light or dark appearance and rearranges the physical shelf for narrow mobile leaves.

index.library files through Obsidian's public FileView API.Given this vault structure:
books/
first-book/
index.md
cover.webp
second-book/
start.md
books/ and select 在此创建书库, or run 创建书库 from the command palette.books/index.library file.first-book uses index.md; second-book uses its first naturally sorted Markdown file.You can also right-click any folder and choose 作为书库打开 for a temporary view. Use the view action 保存为书库 when you want a persistent .library file.
index.libraryThe UI creates and edits this JSON file:
{
"schemaVersion": 1,
"title": "Engineering books",
"root": ".",
"includeUnmanagedBooks": true,
"sort": {
"by": "order",
"direction": "asc"
},
"rowsPerPage": 3
}
manifest.jsonA book does not need a manifest when automatic discovery is sufficient. Manushelf only writes fields that differ from the discovered values. For example:
{
"schemaVersion": 1,
"title": "Production Kubernetes",
"description": "A practical operations handbook.",
"cover": "art/custom-cover.webp",
"entry": "reader/start.md"
}
Unchanged fields remain automatic and reset buttons remove their overrides. Display title and description come from the entry page's first H1 and first paragraph. Cover discovery supports cover.webp/png/jpg/jpeg/avif/gif in the book root, with assets/cover.* as a fallback. Manushelf does not infer or configure chapters.
See the canonical protocol and JSON Schemas.
npm install
npm run check
Copy main.js, manifest.json, and styles.css to:
<vault>/.obsidian/plugins/manushelf/
Enable Manushelf under Community plugins.
npm run check
npm run release:check
Create a GitHub release whose tag exactly matches manifest.json (for example 1.0.0) and attach main.js, manifest.json, and styles.css. See the release runbook for the complete Community Plugins process.
Manushelf only reads and writes files inside the active vault through Obsidian's public Vault API. It has no telemetry, analytics, accounts, payments, ads, remote cover lookup, self-update mechanism, or runtime network requests. Diagnostic messages do not include note bodies.
Report security issues using SECURITY.md.
Source code is MIT licensed. Three.js and Preact are MIT licensed. Runtime PBR/HDR assets are CC0 assets from Poly Haven; models are generated by the repository's Blender script. Full provenance and hashes are recorded in THIRD_PARTY_NOTICES.md and assets-source/provenance/.
1.0.0 is the initial Community Plugins release candidate. The production roadmap and release gates are in 007, with exact release operations in 008.