My project: fuji - an Emacs personal digital library
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.
Key Features of Fuji:
- No Mouse : Everything happens within two keystrokes.
- Text is King : No bloated databases or flashy UIs. The engine is text-based—clean, convenient, and blazing fast.
- 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.
- 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!
Fuji’s Three Core Workflows:
📚 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.
📖 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.
🎓 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.
🧠 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.
Final Thoughts:
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.