My project: fuji - an Emacs personal digital library

Contents

I just released a personal project, and I guess you could call it my first “Vibe Coding” output.

Github: https://github.com/ruanxiang/fuji

I hesitated for a long time about whether to release this. First, I’m genuinely busy. Second, I’m a lazy villager at heart—if I can lie down, I’ll never stand. Being an open-source maintainer is often a thankless chore (though realistically, probably no one will ask me to maintain this little project anyway), so I rarely open-source my personal tools. But in the end, I felt this one was worth sharing.

This is a tool built for Emacsers like me. It started because I wanted a better way to read academic papers. Everyone is using LLMs to read papers now, but I just couldn’t stand the workflow: upload a PDF to an AI, open a web page or an app, click around with the mouse, switch contexts… For an Emacs user, this workflow is incredibly inefficient.

I wanted a tool that allows me to live entirely inside Emacs: open a paper, and immediately start pair-programming with an AI to discuss it. As I wrote it, it grew into exactly what it needed to be.

You can think of it as a Personal Digital Library with an Emacs Frontend. I named it Fuji. The name has two layers of meaning: in Chinese, it sounds like “shoulder the satchel and travel” (a metaphor for scholarly pursuit); in Japanese, it sounds like “Mount Fuji” (implying “admiring the high mountain”).

You can throw any format at it—PDF, DOCX, EPUB, JPG, or even a URL. It handles academic papers, news articles, or just your daily scratchpad notes.

  1. No Mouse : Everything happens within two keystrokes.
  2. Text is King : No bloated databases or flashy UIs. The engine is text-based—clean, convenient, and blazing fast.
  3. Pluggable & Extensible : By design, *Extraction Tools and RAG Backends are fully pluggable . While built-in support is currently limited (Marker, Graphlit, etc.), you can easily extend it to hook into any service or MCP interface you prefer.
  4. Pure Emacs : It adheres to the purest Emacs philosophy.

In short, Fuji is a Personal Knowledge Base tightly bound to its user, featuring the geekiest UI and the most efficient operations. If you are an Emacser, you feel me!

  1. 📚 Digital Library Add or remove documents, manage tags. Fuji supports Full-Text Search, not just filenames. Whether it’s a PDF or an EPUB, you can fuzzy search with any text—or Regex if you’re hardcore. Even with thousands of books, search is instant. Browsing a document in Emacs and like it? One command adds it to your library and switches you to Fuji Reading Mode.

  2. 📖 Immersive Reading Emacs split layout: Original document (PDF/DOCX/EPUB) on the left, AI chat on the right. The AI’s context isn’t just the current file; it connects to your entire library’s Knowledge Graph. Most importantly, **Conversation is Memory**—any time you reopen a document, your previous discussion history loads automatically. Seamless continuity.

  3. 🎓 Academic Writing & Citation This was the original spark.

    • BibTeX Management: One-key fetch of DOI info into your Bib file.
    • Citation God Mode: Writing a paper and need a citation but can’t remember the details? Launch the Citation command, search your library with keywords (full-text match, not just titles!), select, and hit enter. The correct citation format inserts instantly.
  4. 🧠 Private Think Tank As your documents grow, Fuji becomes your second brain. You can lock the AI conversation to a specific scope of knowledge (RAG). It doesn’t just understand you; it engages with you in the most precise context.

I released Fuji because I have ambitious ideas for it—I want to craft a reading tool unlike anything before. But I am lazy, and busy. I don’t know if the next big version will be out in a year or never.

But whatever, let’s just ship it. Github: https://github.com/ruanxiang/fuji (Star it if you like, Maintenance is… sporadic at best)

Note for Package Users: I plan to submit this to MELPA for easy `package-install`. But given my lazy nature, this might take a while. Don’t rush me, let it flow.