2 pointsby gimalay6 hours ago1 comment
  • gimalay6 hours ago
    I built IWE (Interactive Writing Environment) to manage my markdown notes. It's a CLI tool and LSP server written in Rust.

    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.