RAG-Anything: Why Developers Are Ditching Text-Only RAG
RAG-Anything: Why Developers Are Ditching Text-Only RAG
What if your AI could actually see the charts in your PDFs? Not just read the captions—truly understand the visual story hidden in every diagram, table, and equation. Here's the brutal truth: 90% of RAG systems are flying blind. They choke on anything that isn't plain text, leaving mission-critical visual data rotting in unreadable documents. If you've ever watched your "intelligent" retrieval system completely miss the point of a research paper because it couldn't parse Figure 3, you know exactly what I'm talking about.
The pain runs deeper than embarrassment. Traditional RAG pipelines force you into a Frankenstein architecture—one tool for OCR, another for table extraction, a third for image captioning, then duct-taping everything together with fragile Python scripts. Maintenance nightmares. Version conflicts. Silent failures that only surface in production when your CEO asks why the AI missed a $2M liability buried in a scanned contract's table footnote.
Enter RAG-Anything, the open-source framework that's making text-only RAG look like a relic from 2023. Built by the HKUDS research team on top of the battle-tested LightRAG engine, this isn't another incremental improvement. It's a fundamental reimagining of what retrieval-augmented generation can achieve when vision and language finally merge into a single, coherent pipeline. With native VLM integration, automatic knowledge graph construction across modalities, and support for virtually every document format that exists, RAG-Anything doesn't just process documents—it comprehends them.
Ready to stop building fragile RAG pipelines that crumble the moment someone attaches a PowerPoint? Let's dive into what makes this framework the new standard for serious multimodal AI applications.
What is RAG-Anything?
RAG-Anything is an all-in-one multimodal retrieval-augmented generation framework developed by the Hong Kong University Data Science (HKUDS) research group. Born from the same lab that created the wildly popular LightRAG system, RAG-Anything represents their ambitious next step: extending RAG from the text-only era into true multimodal intelligence.
The project exploded onto GitHub in mid-2025, rocketing past 1,000 stars within weeks of its multimodal query announcement. Its technical report (arXiv:2510.12323) lays out the architecture that enables what the team calls "comprehensive multimodal retrieval capabilities"—a fancy way of saying it handles text, images, tables, equations, charts, and even interleaved combinations without breaking a sweat.
What separates RAG-Anything from the patchwork solutions cluttering the landscape? Philosophical coherence. Where others bolt multimodal features onto creaking text-centric foundations, RAG-Anything was architected from the ground up around a single insight: modern documents are inherently multimodal. A financial report without its charts is misleading. A research paper without its figures is incomprehensible. A patent without its diagrams is legally hazardous.
The framework builds directly on LightRAG, inheriting its graph-based retrieval strengths while dramatically expanding its sensory capabilities. The result? A unified processing framework where a single process_document_complete() call ingests your document, automatically decomposes it by modality, analyzes each element with appropriate specialized processors, constructs a multimodal knowledge graph with cross-modal relationships, and makes everything queryable through text, VLM-enhanced, or fully multimodal interfaces.
This isn't incremental. It's category-defining.
Key Features That Crush Traditional RAG
RAG-Anything's feature set reads like a wishlist every RAG engineer has scribbled on a whiteboard after their third all-nighter debugging pipeline failures. Let's dissect what actually matters:
🔄 End-to-End Multimodal Pipeline The holy grail: one pipeline from document ingestion to intelligent answer. No handoffs between tools, no format conversion losses, no synchronization headaches. The system parses, analyzes, indexes, and retrieves across all modalities within a single coherent workflow. This eliminates the "impedance mismatch" between specialized tools that inevitably corrupts contextual relationships.
📄 Universal Document Support PDFs, Office documents (DOC/DOCX/PPT/PPTX/XLS/XLSX), images (JPG, PNG, BMP, TIFF, GIF, WebP), and text files (TXT, MD). The framework leverages MinerU integration for high-fidelity structure extraction, with alternative parsers including Docling and PaddleOCR for format-specific optimization. One framework, zero format anxiety.
🧠 Specialized Content Analysis Generic "image captioning" doesn't cut it for serious applications. RAG-Anything deploys modality-aware processing units: Visual Content Analyzers that extract spatial relationships and hierarchical structures; Structured Data Interpreters that perform statistical pattern recognition across tables; Mathematical Expression Parsers with native LaTeX support; and an Extensible Modality Handler for custom content types through plugin architecture.
🔗 Multimodal Knowledge Graph This is where RAG-Anything diverges dramatically from vector-only systems. It automatically extracts multimodal entities, establishes cross-modal relationships, and preserves hierarchical document structure through "belongs_to" relationship chains. When you query about a figure, the system understands which section it belongs to, which tables it relates to, and which equations it illustrates.
⚡ Adaptive Processing Modes Flexibility without fragmentation. Choose MinerU-based parsing for maximum fidelity, direct multimodal content injection when you have pre-parsed content, or batch folder processing with configurable worker pools. The framework adapts to your infrastructure, not vice versa.
🎯 VLM-Enhanced Query Mode The August 2025 game-changer: when documents contain images, the system seamlessly integrates them into Vision Language Models for advanced multimodal analysis. Retrieved context isn't just text snippets fed to an LLM—it's visual evidence presented to a VLM that can reason about both what the text says and what the images show.
Real-World Use Cases Where RAG-Anything Dominates
Theory is cheap. Let's examine where this framework actually wins battles:
🔬 Academic Research Intelligence Researchers drowning in multimodal papers finally have a lifeline. RAG-Anything processes PDFs with embedded figures, tables, and mathematical proofs as unified knowledge objects. Query: "How does the attention mechanism in Figure 2 relate to the complexity analysis in Table 1?" Traditional RAG fails catastrophically; RAG-Anything traces cross-modal relationships through its knowledge graph and presents visual evidence to the VLM for coherent synthesis.
📊 Financial Document Analysis Annual reports, 10-K filings, and prospectuses are visual documents disguised as text. Critical risk disclosures hide in table footnotes. Performance trends live in charts. RAG-Anything's Structured Data Interpreter extracts tabular relationships with statistical context, while VLM enhancement enables direct questioning of visual trends: "What's the divergence between the revenue chart on page 12 and the segment breakdown table?"
🏭 Enterprise Knowledge Management Organizations sit on decades of heterogeneous documents: scanned engineering diagrams, PowerPoint training materials, Excel compliance trackers, Word procedure manuals. Traditional approaches require separate pipelines per format, with relationships between documents lost in translation. RAG-Anything's universal format support and direct content list insertion enable unified knowledge bases spanning entire organizational histories.
⚖️ Legal & Contract Intelligence Contract exhibits, patent diagrams, and evidentiary photographs aren't decorative—they're legally operative content. A liability clause referencing "Appendix B, Figure 3" becomes queryable as a unified semantic unit. The Mathematical Expression Parser handles damage calculation formulas with LaTeX precision. Cross-modal relationship preservation ensures exhibits maintain their binding connections to governing clauses.
Step-by-Step Installation & Setup Guide
Getting RAG-Anything operational is straightforward, with options ranging from PyPI one-liners to source builds with uv. Here's the complete path from zero to multimodal RAG:
Prerequisites
Python 3.10+ required. For Office document processing, install LibreOffice:
# macOS
brew install --cask libreoffice
# Ubuntu/Debian
sudo apt-get install libreoffice
# CentOS/RHEL
sudo yum install libreoffice
Installation Option 1: PyPI (Recommended)
# Core installation
pip install raganything
# With all optional format support
pip install 'raganything[all]'
# Granular feature selection
pip install 'raganything[image]' # BMP, TIFF, GIF, WebP support
pip install 'raganything[text]' # TXT, MD processing
pip install 'raganything[image,text]' # Combined selection
Installation Option 2: Source with uv (Modern Python Workflow)
# Install uv if needed
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone repository
git clone https://github.com/HKUDS/RAG-Anything.git
cd RAG-Anything
# Sync dependencies into virtual environment
uv sync
# Handle network timeouts for opencv (common in restricted environments)
UV_HTTP_TIMEOUT=120 uv sync
# Run with uv (no manual activation needed)
uv run python examples/raganything_example.py --help
# Install specific extras
uv sync --extra image --extra text
uv sync --all-extras # Everything
Verify MinerU Installation
# Check command-line availability
mineru --version
# Verify programmatic integration
python -c "from raganything import RAGAnything; rag = RAGAnything(); print('✅ MinerU installed properly' if rag.check_parser_installation() else '❌ MinerU installation issue')"
Models download automatically on first use. For air-gapped environments, configure manual model sources.
Environment Configuration
Create .env in your project root:
OPENAI_API_KEY=your_openai_api_key
OPENAI_BASE_URL=https://api.openai.com/v1 # Optional: for proxies/custom endpoints
OUTPUT_DIR=./output
PARSER=mineru # mineru | docling | paddleocr
PARSE_METHOD=auto # auto | ocr | txt
REAL Code Examples from the Repository
Let's examine production-ready patterns extracted directly from RAG-Anything's documentation, with detailed commentary on implementation nuances.
Example 1: Complete End-to-End Document Processing
This is the canonical integration pattern—initialize configuration, define model functions, process a document, and execute multimodal queries:
import asyncio
from functools import partial
from raganything import RAGAnything, RAGAnythingConfig
from lightrag.llm.openai import openai_complete_if_cache, openai_embed
from lightrag.utils import EmbeddingFunc
async def main():
# API configuration—supports OpenAI-compatible endpoints (Azure, local LLMs, etc.)
api_key = "your-api-key"
base_url = "your-base-url" # Optional: omit for default OpenAI endpoint
# RAGAnythingConfig centralizes all framework settings
config = RAGAnythingConfig(
working_dir="./rag_storage", # Persistent storage for knowledge graph and vectors
parser="mineru", # Parser backend: mineru, docling, or paddleocr
parse_method="auto", # auto=heuristic selection; ocr=force OCR; txt=fast text extraction
enable_image_processing=True, # Activate visual content analysis pipeline
enable_table_processing=True, # Activate structured data interpreter
enable_equation_processing=True, # Activate mathematical expression parser
)
# LLM function: handles all text generation tasks (entity extraction, query response, etc.)
def llm_model_func(prompt, system_prompt=None, history_messages=[], **kwargs):
return openai_complete_if_cache(
"gpt-4o-mini", # Cost-effective model for high-volume operations
prompt,
system_prompt=system_prompt,
history_messages=history_messages,
api_key=api_key,
base_url=base_url,
**kwargs,
)
# Vision model function: CRITICAL for multimodal capabilities
# Handles both traditional single-image analysis AND VLM-enhanced query messages
def vision_model_func(
prompt, system_prompt=None, history_messages=[], image_data=None, messages=None, **kwargs
):
# Path 1: Full multimodal messages (VLM-enhanced query mode)
# RAG-Anything constructs messages with interleaved text and image_url blocks
if messages:
return openai_complete_if_cache(
"gpt-4o", # Vision-capable model required
"",
system_prompt=None,
history_messages=[],
messages=messages, # Pre-constructed multimodal message array
api_key=api_key,
base_url=base_url,
**kwargs,
)
# Path 2: Single image analysis (document processing phase)
elif image_data:
return openai_complete_if_cache(
"gpt-4o",
"",
system_prompt=None,
history_messages=[],
messages=[
{"role": "system", "content": system_prompt}
if system_prompt
else None,
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{image_data}"
},
},
],
}
if image_data
else {"role": "user", "content": prompt},
],
api_key=api_key,
base_url=base_url,
**kwargs,
)
# Path 3: Fallback to text-only LLM (no visual context available)
else:
return llm_model_func(prompt, system_prompt, history_messages, **kwargs)
# Embedding function: powers vector similarity search in the hybrid retrieval system
embedding_func = EmbeddingFunc(
embedding_dim=3072, # text-embedding-3-large dimension
max_token_size=8192, # Chunk size limit for embedding generation
func=partial(
openai_embed.func,
model="text-embedding-3-large", # High-quality embeddings for semantic retrieval
api_key=api_key,
base_url=base_url,
),
)
# Initialize the unified RAG system
rag = RAGAnything(
config=config,
llm_model_func=llm_model_func,
vision_model_func=vision_model_func, # Enables ALL multimodal features
embedding_func=embedding_func,
)
# Process document: parsing → analysis → knowledge graph construction
await rag.process_document_complete(
file_path="path/to/your/document.pdf",
output_dir="./output",
parse_method="auto"
)
# Query type 1: Pure text retrieval (LightRAG-compatible)
text_result = await rag.aquery(
"What are the main findings shown in the figures and tables?",
mode="hybrid" # hybrid=combine local+global+naive retrieval
)
print("Text query result:", text_result)
# Query type 2: Multimodal query with explicit content injection
# Pass structured multimodal content for the system to analyze alongside retrieved context
multimodal_result = await rag.aquery_with_multimodal(
"Explain this formula and its relevance to the document content",
multimodal_content=[{
"type": "equation",
"latex": "P(d|q) = \\frac{P(q|d) \\cdot P(d)}{P(q)}",
"equation_caption": "Document relevance probability"
}],
mode="hybrid"
)
print("Multimodal query result:", multimodal_result)
if __name__ == "__main__":
asyncio.run(main())
Critical insight: The vision_model_func is the linchpin of multimodal capability. Its three-path design elegantly handles the framework's dual needs: (1) analyzing individual images during document ingestion, and (2) processing interleaved text-image messages during VLM-enhanced queries. Without this function, RAG-Anything degrades to standard LightRAG behavior.
Example 2: Direct Multimodal Content Processing
For scenarios requiring granular control over individual modalities—or integration with existing LightRAG instances—use the processor API directly:
import asyncio
from functools import partial
from lightrag import LightRAG
from lightrag.llm.openai import openai_complete_if_cache, openai_embed
from lightrag.utils import EmbeddingFunc
from raganything.modalprocessors import ImageModalProcessor, TableModalProcessor
async def process_multimodal_content():
api_key = "your-api-key"
base_url = "your-base-url"
# Initialize base LightRAG instance (inherited by RAG-Anything)
rag = LightRAG(
working_dir="./rag_storage",
llm_model_func=lambda prompt, system_prompt=None, history_messages=[], **kwargs: openai_complete_if_cache(
"gpt-4o-mini",
prompt,
system_prompt=system_prompt,
history_messages=history_messages,
api_key=api_key,
base_url=base_url,
**kwargs,
),
embedding_func=EmbeddingFunc(
embedding_dim=3072,
max_token_size=8192,
func=partial(
openai_embed.func,
model="text-embedding-3-large",
api_key=api_key,
base_url=base_url,
),
)
)
await rag.initialize_storages()
# Image processor: generates semantic captions and extracts visual relationships
image_processor = ImageModalProcessor(
lightrag=rag,
modal_caption_func=lambda prompt, system_prompt=None, history_messages=[], image_data=None, **kwargs:
openai_complete_if_cache(
"gpt-4o", # Vision model for image understanding
"",
system_prompt=None,
history_messages=[],
messages=[
{"role": "system", "content": system_prompt} if system_prompt else None,
{"role": "user", "content": [
{"type": "text", "text": prompt},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}}
]} if image_data else {"role": "user", "content": prompt}
],
api_key=api_key,
base_url=base_url,
**kwargs,
) if image_data else openai_complete_if_cache(
"gpt-4o-mini", # Fallback to cheaper model for text-only
prompt,
system_prompt=system_prompt,
history_messages=history_messages,
api_key=api_key,
base_url=base_url,
**kwargs,
)
)
# Structured image content with metadata preservation
image_content = {
"img_path": "path/to/image.jpg",
"image_caption": ["Figure 1: Experimental results"], # List supports multiple captions
"image_footnote": ["Data collected in 2024"] # Provenance tracking
}
# Process returns: (description, entity_info)
# description = semantic caption for embedding and retrieval
# entity_info = knowledge graph node with cross-modal relationships
description, entity_info = await image_processor.process_multimodal_content(
modal_content=image_content,
content_type="image",
file_path="research_paper.pdf", # Source document for citation
entity_name="Experimental Results Figure" # Human-readable entity label
)
# Table processor: statistical pattern recognition + semantic interpretation
table_processor = TableModalProcessor(
lightrag=rag,
modal_caption_func=lambda prompt, system_prompt=None, history_messages=[], **kwargs: openai_complete_if_cache(
"gpt-4o-mini", # Tables don't require vision; text model suffices
prompt,
system_prompt=system_prompt,
history_messages=history_messages,
api_key=api_key,
base_url=base_url,
**kwargs,
)
)
table_content = {
"table_body": """
| Method | Accuracy | F1-Score |
|--------|----------|----------|
| RAGAnything | 95.2% | 0.94 |
| Baseline | 87.3% | 0.85 |
""",
"table_caption": ["Performance Comparison"],
"table_footnote": ["Results on test dataset"]
}
description, entity_info = await table_processor.process_multimodal_content(
modal_content=table_content,
content_type="table",
file_path="research_paper.pdf",
entity_name="Performance Results Table"
)
if __name__ == "__main__":
asyncio.run(process_multimodal_content())
Why this matters: The processor API enables surgical insertion of pre-analyzed content into existing LightRAG knowledge bases. This is invaluable when you have specialized upstream analysis (e.g., domain-specific chart parsers, custom OCR pipelines) and want RAG-Anything to handle only the retrieval and synthesis layers.
Example 3: VLM-Enhanced Query Mode
The crown jewel feature—automatic visual analysis of retrieved document content:
# VLM enhanced query: automatically analyzes images in retrieved context
vlm_result = await rag.aquery(
"Analyze the charts and figures in the document",
mode="hybrid"
# vlm_enhanced=True is AUTOMATICALLY set when vision_model_func is available
)
# Manual control when you need precision
vlm_enabled = await rag.aquery(
"What do the images show in this document?",
mode="hybrid",
vlm_enhanced=True # Force enable: retrieve image paths, encode as base64, send to VLM
)
vlm_disabled = await rag.aquery(
"What do the images show in this document?",
mode="hybrid",
vlm_enhanced=False # Force disable: faster, cheaper, text-only retrieval
)
The magic happens automatically: When vision_model_func is provided and vlm_enhanced=True (default when available), RAG-Anything:
- Retrieves relevant text chunks AND their associated image paths from the knowledge graph
- Loads images from disk and encodes as base64 data URIs
- Constructs interleaved messages:
[text context, image 1, text continuation, image 2, ...] - Sends to your VLM (GPT-4o, Claude 3, Gemini, etc.) for unified reasoning
This isn't retrieval-then-captioning. It's genuine multimodal reasoning over document evidence.
Advanced Usage & Best Practices
Optimize Your Parser Selection: MinerU excels at complex PDFs with mixed layouts. Docling dominates Office documents with structural fidelity. PaddleOCR wins for image-heavy, text-sparse content. Benchmark on your actual document distribution—don't default to "auto" in production without validation.
Leverage Direct Content List Insertion: When you have pre-parsed content from external systems (legacy pipelines, vendor APIs, cached results), bypass re-parsing entirely. The insert_content_list() method accepts standardized dictionaries with absolute image paths, preserving your upstream investment while gaining RAG-Anything's retrieval and synthesis capabilities.
Configure Public Asset URLs for Distributed Systems: Running ingestion on servers but serving UIs elsewhere? Set RAGANYTHING_PUBLIC_ASSET_BASE_URL and RAGANYTHING_PUBLIC_ASSET_STRIP_PREFIX to automatically generate CDN-accessible URLs alongside local paths. Your VLM queries can then reference HTTPS endpoints instead of local filesystem paths.
Monitor the Multimodal Failure Modes Checklist: The project maintains docs/multimodal_rag_failure_modes.md with debugging guidance for OCR quality issues, table boundary detection failures, retrieval bias toward text over visuals, and pipeline debugging strategies. Review before production deployment.
Use uv for Reproducible Environments: The uv sync workflow locks dependencies precisely, eliminating the "works on my machine" syndrome that plagues pip-based deployments. Combined with Docker, this enables deterministic multimodal RAG infrastructure.
Comparison with Alternatives
| Dimension | RAG-Anything | Traditional Text RAG | Patchwork Multimodal | Cloud Document AI |
|---|---|---|---|---|
| Unified Pipeline | ✅ Single framework | ✅ Simple | ❌ Multiple tools | ⚠️ Vendor-specific |
| Native VLM Integration | ✅ Automatic VLM queries | ❌ N/A | ❌ Manual implementation | ⚠️ Separate services |
| Knowledge Graph | ✅ Multimodal entities + cross-modal edges | ⚠️ Text-only | ❌ Rarely implemented | ❌ Not available |
| Open Source | ✅ Fully open | Varies | Varies | ❌ Proprietary |
| Self-Hostable | ✅ Local LLMs + embeddings | ✅ | ⚠️ Complex | ❌ Cloud-only |
| LaTeX/Equation Support | ✅ Native parser | ❌ | ⚠️ Limited | ⚠️ Limited |
| Extensibility | ✅ Plugin architecture | Varies | ❌ Fragile integrations | ❌ Vendor lock-in |
| Cost Control | ✅ Bring-your-own API keys | ✅ | ❌ Multiple vendor bills | ❌ Opaque pricing |
| Community/Ecosystem | 🚀 Rapidly growing (HKUDS family) | Mature | Fragmented | Vendor-dependent |
The verdict: If you're building serious multimodal applications where cross-modal reasoning matters, RAG-Anything eliminates architectural complexity that competitors force you to manage yourself. The integration with the broader HKUDS ecosystem (LightRAG, VideoRAG, MiniRAG) provides upgrade paths as your requirements evolve.
FAQ: What Developers Actually Ask
Q: Does RAG-Anything work with local LLMs and open-source VLMs?
A: Absolutely. The llm_model_func and vision_model_func are pure Python callables—swap OpenAI endpoints for Ollama, vLLM, LM Studio, or any OpenAI-compatible server. The framework is model-agnostic; it only requires standard chat completions and vision message formats.
Q: How does this differ from just using MinerU + LightRAG separately?
A: Manual integration leaves you implementing: cross-modal relationship extraction, unified knowledge graph schema, VLM message construction, modality-aware ranking, and error handling across tool boundaries. RAG-Anything provides tested, optimized implementations of all these with coherent APIs. You're buying engineering months for a pip install.
Q: What's the performance overhead of multimodal processing?
A: Document ingestion is slower than text-only (vision API calls for images, table analysis, equation parsing). However, retrieval and query latency remain comparable to LightRAG—the multimodal knowledge graph enables efficient filtering before any VLM calls. Batch processing with max_workers parallelizes ingestion effectively.
Q: Can I migrate an existing LightRAG knowledge base?
A: Yes. Pass your existing LightRAG instance to RAGAnything(lightrag=existing_instance). The framework inherits working directory, storage, and configurations, then adds multimodal capabilities on top. Your existing text queries continue working unchanged.
Q: How accurate is table extraction compared to specialized tools? A: RAG-Anything leverages MinerU's table extraction with statistical interpretation via LLM. For simple tables, this rivals dedicated tools. For complex multi-row headers, merged cells, or nested structures, verify against your ground truth—no universal solution exists yet. The extensible architecture lets you inject custom table processors if needed.
Q: Is commercial use permitted? A: Check the repository's LICENSE file for current terms. As of this writing, HKUDS projects typically use permissive licenses enabling commercial applications. Always verify for your specific release.
Q: What about video or audio content? A: Not natively—RAG-Anything focuses on document modalities (text, image, table, equation). For video, explore the related VideoRAG project from the same research group. The architectures may converge in future releases.
Conclusion: The Multimodal RAG Standard Has Arrived
We've lived too long in the text-only ghetto of RAG, pretending that documents are just strings of characters when every meaningful document in business, science, and law is a multimodal artifact. The frameworks that powered 2023's RAG boom were brilliant for their era, but they're architecturally incapable of the cross-modal reasoning that modern applications demand.
RAG-Anything isn't an upgrade. It's an escape hatch.
By unifying document parsing, multimodal analysis, knowledge graph construction with cross-modal edges, and VLM-enhanced retrieval into a single coherent framework, the HKUDS team has eliminated the integration tax that was suffocating multimodal RAG adoption. The code examples above aren't toy demos—they're production patterns extracted from real documentation, ready to adapt to your infrastructure.
The GitHub star trajectory tells the story: developers are voting with their forks. The research paper provides theoretical rigor. The ecosystem integration with LightRAG, VideoRAG, and MiniRAG ensures you're not betting on a dead-end project.
Stop building Frankenstein pipelines. Start building intelligent systems that actually understand your documents.
👉 Star RAG-Anything on GitHub — clone it, break it, improve it, and join the community defining what multimodal RAG means in 2025 and beyond.
The future of retrieval isn't reading about images. It's seeing them, understanding them, and reasoning across every modality that matters.
Last updated: October 2025 | Framework version: Check releases for latest
Comments (0)
No comments yet. Be the first to share your thoughts!