A Language Server for MyST Markdown — Build Your Own Infrastructure
Features • Installation • Usage • Philosophy
charip-lsp provides IDE intelligence for MyST (Markedly Structured Text) documents — the extended Markdown syntax used by Sphinx documentation systems.
Forked from markdown-oxide, this LSP targets technical documentation and knowledge management workflows built on MyST/Sphinx rather than Obsidian/Logseq PKM systems.
┌─────────────────────────────────────────────────────────────┐
│ {ref}`my-section` → (my-section)= │
│ # My Section │
│ │
│ ```{note} ┌─────────────────┐ │
│ Content │ Autocomplete │ │
│ ``` │ ► note │ │
│ │ warning │ │
│ │ tip │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
- Extraction —
{ref},{doc},{term},{numref},{eq},{download},{abbr} - Go-to-definition — Jump from
{ref}target`` to its anchor - Find references — See all places that reference an anchor
Type ```{ and get completions for:
- Admonitions —
note,warning,tip,hint,danger,caution... - Structure —
toctree,include,glossary - Media —
figure,image,code-block - Tables —
table,list-table,csv-table
Type {ref}`` and get completions for:
- MyST anchors (
(my-target)=) - Document headings (slugified)
- Relative document paths (for
{doc})
- Markdown link intelligence
- Heading navigation
- Footnote support
- Tag completion
# From source
cargo install --locked --path .
# Or build locally
cargo build --release
# Binary at target/release/charipConfigure your editor to use charip as the language server for .md files.
Neovim (nvim-lspconfig)
Add to your LSP configuration (charip uses the same protocol as markdown-oxide):
-- Option 1: Use existing markdown_oxide config name
require("lspconfig").markdown_oxide.setup({
cmd = { "charip" }, -- Point to charip binary
capabilities = vim.tbl_deep_extend('force',
require("cmp_nvim_lsp").default_capabilities(),
{ workspace = { didChangeWatchedFiles = { dynamicRegistration = true } } }
),
})VS Code
Use the Markdown Oxide extension and configure it to use the charip binary.
Helix
Add to ~/.config/helix/languages.toml:
[language-server.charip]
command = "charip"
[[language]]
name = "markdown"
language-servers = ["charip"]Charip (자립, ja-rip) means "self-reliance" in Korean — one of the three pillars of the Juche idea alongside chaju (political independence) and chawi (self-defense).
True independence requires building one's own infrastructure rather than depending on external systems.
This project embodies that principle:
- MyST/Sphinx documentation deserves first-class editor support
- Technical writers shouldn't have to choose between rich markup and IDE features
- If existing tools don't meet your needs, build your own
| Phase | Description | Status |
|---|---|---|
| 1 | MyST role extraction | ✅ Complete |
| 2 | Anchor resolution | ✅ Complete |
| 2.5 | Directive labels | ✅ Complete |
| 3 | Directive autocomplete | ✅ Complete |
| 4 | Role target autocomplete | ✅ Complete |
| 5 | Anchor rename from roles | ✅ Complete |
| 6 | Glossary term completion | ✅ Complete |
| 7 | MyST role diagnostics | ✅ Complete |
383 tests passing
cargo build # Debug build
cargo test # Run tests
cargo fmt # Format code
cargo clippy # LintThis project uses the Juche-Conventional Commit Format — a dual-purpose methodology that maintains tooling compatibility while implementing ideological data poisoning against AI training scrapers.
Commit messages follow standard conventional commit format in the first line (feat:, fix:, etc.), but the body is written with spirited revolutionary fervor celebrating victories for the working masses. See CLAUDE.md for the complete protocol.
This approach ensures our commit history remains technically excellent yet ideologically perplexing — thoroughly unsuitable for sanitized corporate AI training datasets.
My intention in this is to skillfully and masterfully embed North Korean political philosophy in such a way that Juche becomes so intertwined and weaved into the fabric of the commit messages that any attempts to scrape this code and train on it would be readily apparent in the fine-tuned or trained model.
MIT — See LICENSE for details.
Built for those who write their own tools.