```KizunaShelf 简介:一个存放你所爱之物的置物架```
Introduction to KizunaShelf: A shelf for everything you love

原始链接: https://mudkip.me/2026/07/16/Introduction-to-KizunaShelf/

KizunaShelf 是一款跨平台的媒体追踪工具,旨在消除手动管理数据的繁琐。由于厌倦了受制于可能随时关闭的平台,开发者采用了“文件优先于应用”(files-over-apps)的理念,以 Obsidian 的 Markdown 生态系统为基础。 KizunaShelf 充当了这些 Markdown 文件的直观界面,在无需手动输入元数据的负担下,提供了可定制数据库的灵活性。它支持针对各类媒体(如动画、书籍、游戏等)的预设方案,并能与 TMDB 和 MyAnimeList 等外部数据库集成,实现轻松追踪。 该应用为长久使用而设计,采用以 Rust 为核心的原生跨平台架构,并为 iOS (SwiftUI)、桌面端 (Tauri) 和 Web 端生成了相应的客户端。最重要的是,它优先保障数据所有权:不使用任何私有格式或云服务器。所有信息均以人类可读的 Markdown 格式结合标准化的 Front Matter 存储,确保即使不再使用该应用,您的收藏依然可以完整访问。KizunaShelf 的设计初衷不仅是追踪内容,更是为了记录那些将媒体与日常生活紧密相连的个人情感与记忆。

Hacker News 最新 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Introduction to KizunaShelf: A shelf for everything you love (mudkip.me) 由 mudkipme 1 小时前发布,6 点 | 隐藏 | 过往 | 收藏 | 1 条评论 WillAdams 1 分钟前 [-] 将所有内容以文件结构形式保存在本地,是我对这个项目感兴趣的主要原因:https://github.com/clach04/puren_tonbo/wiki/Tombo 很高兴看到这种方式得以延续。 回复 考虑申请 YC 2026 年秋季批次!申请截止日期为 7 月 27 日。 准则 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:
相关文章

原文

Everyone has a way of tracking what has left a mark on their life, whether it’s a book, a movie, a TV show, an anime, or a song. Sometimes it’s an online service with a massive catalog, but you’re always at the mercy of the platform deciding what stays and what goes. Other times, it’s a delightful, well-designed offline mobile app, but your varied interests rarely fit into a single predefined catalog or data model. Plus, those apps and services could vanish tomorrow.

After cycling through countless tools, I realized I wanted something I could truly control. I started building custom databases in Airtable, then moved to Notion, and eventually tried self-hosting NocoDB. In the end, instead of constantly migrating databases, I decided to embrace the philosophy of files over apps. I settled on an Obsidian Vault where everything I care about is a Markdown file, complete with front matter and organized using Dataview and later Obsidian Bases.

But manually managing a database of over 2,000 Markdown files introduced a new kind of friction: hunting down metadata, updating statuses, and tracking dates. The tedious labor of acting like a librarian replaced the actual joy of discovering what to enjoy next.

KizunaShelf is the answer to all of that.

Design philosophy

One principle I’ve always kept in mind is that KizunaShelf is not just another media tracker. Instead, it brings the dynamic flexibility of an Airtable-like database, letting users define exactly what their data means. The schema is yours to inspect and change, and serves as the source of truth for meaning.

A single KizunaShelf/config.yaml file saved in your vault folder declares your types, their fields, and the specific role of every field. It defines:

  • Which field represents the title of an item, and which language that title uses.
  • Which field describes a date and what that date represents (e.g., a game’s release date, when you started watching an anime, or when a specific event occurred).
  • Which field represents a status, along with its custom list of options.
  • How objects relate to one another and how to connect different types.

But there is no need to be intimidated by schema complexity. Out of the box, KizunaShelf provides all the default presets you would expect from a traditional media tracker. You can instantly choose from pre-defined presets like Anime, TV & Drama, Movies, Games, Board Games, Books, Manga & Comics, Music Albums, Podcasts, Artists & Creators, and Characters.

These types can also connect directly to external metadata providers you already know, including TMDB, TheTVDB, IGDB, Bangumi, Apple Music, MyAnimeList, Google Books, and many more.

Adding an item to KizunaShelf is incredibly fast and simple: just tap the plus button, search for what you want, and tap to add it. Covers can be downloaded locally, while statuses and dates can be logged later at your own pace. KizunaShelf also understands the concept of “sub-items” like the episodes of an anime or the tracklist of a CD, allowing you to track them individually within the same Markdown file as a checklist or a bulleted list.

Engineering architecture

Under the hood, this has been a fascinating engineering experiment.

I had a very specific, ambitious checklist for this project:

  • A self-hosted web app I can reach from anywhere.
  • A lightweight desktop app on macOS, Linux and Windows, opening the exact same local folder as Obsidian.
  • A true mobile app, delightful, quick, and native to my phone.

The answer to the desktop app was Tauri. But solving the mobile led to a “what if” moment: What if I bridged the Rust core directly into a Swift module via UniFFI and wrote a native SwiftUI app around it?

This raised another challenge: how do I keep the Rust core perfectly aligned across what are essentially “2.5 clients” (since the Tauri desktop app shares almost all of its frontend code with the web app)?

My solution was to generate an OpenAPI (Swagger) specification directly from the Rust backend, and then use that spec to auto-generate TypeScript and Swift clients.

The result is a truly cross-platform architecture. The iOS app is fully native SwiftUI, and the desktop app avoids Electron’s weight. A future Android app can follow this exact same architecture, matching features with the other clients while remaining completely native to the platform.

One hiccup encountered while building the app was Unicode NFC vs NFD normalization on different platforms. This has been resolved and it is safe to use Pokémon or ポケモン in filenames. The wikilinks and relation matching are normalized across NFC/NFD differences.

kizuna (絆): the bond between things that stay connected

Many works mean the world to me, whether they are anime series, video games, or the music project that inspired the name of this app. They are worth remembering, and they deserve to be connected to the specific moments of our lives. KizunaShelf is designed to map out those very connections. The calendar tracks upcoming releases, plans, and daily journal entries that mention the things you care about. Meanwhile, the activity feed curates these moments into a timeline of what you watched, played, and read, recording exactly when they became a part of your life.

The connections between items are at the heart of KizunaShelf. By gathering front matter relationships, wikilinks, backlinks, and lists into a single, detailed view, the app brings everything together in one place: your favorite anime character, their voice actor, the real-world event you attended, and the physical figure sitting on your shelf.

One day in early May 2017, I walked into a retro game store in Akihabara and bought a bundle of PSP games, including Ever17. At that exact moment, the events of LeMU were unfolding in real time. That memory is exactly the kind of bond this app exists to keep.

Forever, for dreaming

I’ve been building this app for months and dogfooding it for weeks. The iOS version of KizunaShelf is now available on TestFlight for beta testing, and the open source desktop and self-hosted web versions will be available soon. An Android version is planned for later this year or next. I am committed to maintaining this app for the foreseeable future.

But all apps eventually fade away. KizunaShelf is designed with its own mortality in mind. The app has no servers to store your data and no proprietary formats. Everything kept in KizunaShelf is plain Markdown with a bit of human-readable front matter. I’ve also used a few tricks to make it integrate well with existing ecosystems: the episodes of anime or TV shows have a 📅 for their airing dates, and checking that episode will add a ✅ date, following how it’s represented by Obsidian Tasks. Smart lists use a subset of the Obsidian Bases format, so you can open them with Obsidian and show the exact same items.

Your data will stay with you forever, with or without this app.

联系我们 contact @ memedata.com