The problem: I have thousands of markdown files with links between them. Link titles get out of sync when I rename files, I can't easily find what links to what, and batch operations (normalize formatting, export graphs) required custom scripts.
How it works:
IWE loads markdown files into an in-memory graph structure that understands document hierarchy (headers, lists, links). This enables operations that would be hard to do with plain text processing.
CLI: - iwe normalize - fix link titles, header levels, list numbering across all files - iwe stats - analyze your knowledge base (word counts, most connected docs, orphans) - iwe export dot - export link structure for Graphviz - iwe squash - combine linked docs into a single file (useful for generating PDFs)
LSP (works with VS Code, Neovim, Helix, Zed): - Go-to-definition for links - Backlinks via find-references - Autocomplete for linking notes - Hover preview - Rename with automatic link updates - Code actions: extract section to new file, inline content back, convert lists↔headers
Why another PKM tool?
Obsidian is great but I wanted to stay in my editor (Neovim). Existing LSPs like markdown-oxide cover basics but I needed batch operations and more refactoring capabilities. Building both CLI and LSP on a shared Rust core made sense.
Install: `brew tap iwe-org/iwe && brew install iwe`
or `cargo install iwe iwes`
Happy to answer questions about the architecture or implementation.