moff-cli


Namemoff-cli JSON
Version 0.3.1 PyPI version JSON
download
home_pageNone
SummaryMOFF - Markdown Organization and Format Framework. A CLI tool for validating documentation structure.
upload_time2025-08-10 18:42:59
maintainerNone
docs_urlNone
authorNone
requires_python>=3.12
licenseMIT
keywords cli documentation linting markdown validation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # MOFF CLI

**M**arkdown **O**pinionated **F**ile **F**ormatter

A command-line tool for validating and maintaining clean, organized documentation. Designed to work seamlessly with Large Language Models (LLMs) in modern IDEs like Cursor, VSCode, and Zed.

[![Python Version](https://img.shields.io/badge/python-3.12%2B-blue)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## 🎯 Purpose

MOFF helps maintain consistent documentation structure across projects by:
- Validating markdown files against configurable rules
- Enforcing location constraints for different document types
- Checking frontmatter schemas and required fields
- Ensuring headers follow specified patterns and order
- Providing visual feedback through tree visualization

Perfect for projects where documentation quality and consistency matter, especially when working with AI assistants that write markdown documentation.

## ✨ Features

- **📁 Smart Root Detection**: Automatically finds documentation root via `project_*.md` files
- **🔍 Comprehensive Validation**: Check frontmatter, headers, and file locations
- **🌳 Tree Visualization**: See your documentation structure with error highlighting
- **⚙️ Configurable Rules**: Define custom prefixes, patterns, and validation rules
- **💾 Result Persistence**: Save validation results for CI/CD integration
- **🎨 Rich Terminal Output**: Beautiful, colored output using Rich library
- **📚 Verbose Mode**: Shows expected file structure templates when validation fails
- **🔧 Auto-fix**: Automatically fix common issues like missing frontmatter and headers

## 📦 Installation

### Using pip

```bash
pip install moff-cli
```

### Using uv (recommended)

```bash
uv add moff-cli
```

## 🚀 Quick Start

1. **Check your documentation** (creates `settings.json` automatically if not present):
```bash
moff check
```

2. **Visualize documentation structure**:
```bash
moff tree
```

## 📖 Usage

### Commands Overview

```bash
moff --help                    # Show help information
moff --version                 # Show version

moff check                     # Run validation checks
moff check --verbose          # Show expected structure for files with errors
moff check --fix              # Automatically fix fixable issues
moff check --save             # Run checks and save results to moff_results.txt
moff check --save --verbose   # Save results with expected structure templates
moff check --path ./docs      # Check specific directory

moff tree                      # Display documentation tree
moff tree --errors-only       # Show only files with errors
moff tree --no-check          # Skip validation (faster)
```

### Example: Setting Up a Project

1. **Create a project file** (`project_myapp.md`):
```markdown
---
project: myapp
---

# Overview

This is my application's main documentation.

## Requirements

- Python 3.12+
- Rich library
```

2. **Create feature documentation** (`features/feature_auth.md`):
```markdown
---
project: myapp
feature: authentication
linked_features: ["users", "sessions"]
---

# Overview

Authentication system for the application.

## Requirements

- Secure password hashing
- JWT token support
- Session management
```

3. **Validate your documentation** (this will create `settings.json` if it doesn't exist):
```bash
moff check
```

### Example Output

#### Check Command
```
Collecting documentation files...
Root directory: /Users/you/project/docs

✓ All checks passed!

No validation issues found.
```

Or with errors:
```
Validation Summary:
  Total issues: 2
  Errors: 2

Issues found:

features/feature_broken.md:
  error [feature] headers.missing: Missing required header level=2 text='Requirements' (line 10)

tech_database.md:
  error [tech] location.subdirs_only: File must be in a subdirectory, not in root
```

Or with verbose mode to see expected structure:
```
features/feature_broken.md:
  error [feature] frontmatter.missing: Required frontmatter is missing (line 1)
  error [feature] headers.missing: Missing required header level=1 text='Overview'
  error [feature] headers.missing: Missing required header level=2 text='Requirements'

  Expected structure for this file type (feature):
  ---
  project:
  feature:
  linked_features: []
  ---

  # Overview

  ## Requirements
```

#### Fix Command

When running `moff check`, you can use the `--fix` flag to automatically fix certain issues:

```
moff check --fix
```

Fixable issues include:
- Missing frontmatter blocks
- Missing required frontmatter fields
- Missing required headers

Example output:
```
Applying 3 automatic fixes...
Fixed features/feature_broken.md:
  • Added missing frontmatter block
  • Added missing header: Overview
  • Added missing header: Requirements

Fixes applied successfully!
```

Note: Some issues cannot be automatically fixed, such as:
- File location constraints (files in wrong directories)
- Header ordering issues
- Type mismatches in frontmatter values

#### Tree Command
```
📁 docs (documentation root)
├── 📁 features
│   ├── ⚡ feature_auth.md ✓
│   └── ⚡ feature_users.md ✓
├── 📁 technical
│   └── 🔧 tech_database.md ✓
└── 📋 project_myapp.md ✓

Summary:
  Total markdown files: 4
  Files with errors: 0
  Files with warnings: 0

✓ All files passed validation!
```

## 🐍 Programmatic Usage

When installed via pip, `moff-cli` can also be used as a Python library. Import it as `moff_cli`:

### Basic Validation

```python
from pathlib import Path
from moff_cli import Settings, Collector, Checker

# Load settings and collect documentation
settings = Settings()
collector = Collector(settings, start_path=Path.cwd())
collected_data = collector.collect()

# Run validation
checker = Checker(settings)
diagnostics = checker.check(collected_data)

# Process results
if not diagnostics:
    print("✓ All documentation is valid!")
else:
    for diag in diagnostics:
        print(f"{diag.path}: {diag.message}")
```

### Custom Configuration

```python
from moff_cli import (
    Settings,
    PrefixConfig,
    LocationConstraint,
    HeaderRule,
    HeaderMatch
)

# Create custom settings
settings = Settings()

# Add a custom prefix for API documentation
settings.prefixes["api"] = PrefixConfig(
    filename_pattern="api_*.md",
    location=LocationConstraint.SUBDIRS_ONLY,
    frontmatter_required={
        "endpoint": "string",
        "method": "string",
        "version": "string"
    },
    headers_required=[
        HeaderRule(level=1, text="Endpoint"),
        HeaderRule(level=2, text="Request"),
        HeaderRule(level=2, text="Response"),
    ]
)

# Save custom settings
settings.save_to_file(Path("settings.json"))
```

### Tree Visualization

```python
from moff_cli import Settings, Collector, Checker, TreeVisualizer
from rich.console import Console

console = Console()
settings = Settings()

# Collect and check
collector = Collector(settings)
collected_data = collector.collect()
checker = Checker(settings)
diagnostics = checker.check(collected_data)

# Display tree with error highlighting
visualizer = TreeVisualizer(settings, console)
visualizer.show_tree(collected_data, diagnostics)
```

### CI/CD Integration

```python
from pathlib import Path
from moff_cli import Settings, Collector, Checker, Severity

def validate_docs(project_path: Path) -> bool:
    """Validate documentation for CI/CD pipeline."""
    settings = Settings()
    collector = Collector(settings, start_path=project_path)
    checker = Checker(settings)

    # Collect and check
    collected = collector.collect()
    if collected.get("error"):
        print(f"ERROR: {collected['error']}")
        return False

    diagnostics = checker.check(collected)

    # Filter to only errors (ignore warnings)
    errors = [d for d in diagnostics if d.severity == Severity.ERROR]

    if errors:
        print(f"Validation failed with {len(errors)} errors")
        for error in errors:
            print(f"  ✗ {error.path}: {error.message}")
        return False

    return True

# Use in CI/CD
if not validate_docs(Path(".")):
    exit(1)
```

### Available Classes and Functions

- `Settings`: Configuration management
- `Collector`: File discovery and parsing
- `Checker`: Validation engine
- `TreeVisualizer`: Tree visualization
- `Diagnostic`: Validation issue representation
- `Severity`: Error, Warning, Info levels
- `LocationConstraint`: ROOT_ONLY, SUBDIRS_ONLY, ANY
- `HeaderOrder`: STRICT, IN_ORDER, ANY
- `HeaderMatch`: EXACT, REGEX

## ⚙️ Configuration

MOFF uses `settings.json` for configuration. The default configuration supports three document prefixes:

### Default Prefixes

| Prefix | Pattern | Location | Purpose |
|--------|---------|----------|---------|
| `project` | `project_*.md` | Root only | Main project documentation |
| `feature` | `feature_*.md` | Any | Feature specifications |
| `tech` | `tech_*.md` | Subdirs only | Technical implementation details |

### Custom Configuration Example

```json
{
  "version": 1,
  "root": {
    "detect": {
      "method": "project_file",
      "pattern": "project_*.md"
    },
    "override_path": null,
    "ignore": [
      "**/.git/**",
      "**/.venv/**",
      "**/node_modules/**",
      "**/archive/**"
    ]
  },
  "prefixes": {
    "api": {
      "filename": {
        "pattern": "api_*.md"
      },
      "location": "subdirs_only",
      "frontmatter": {
        "required": {
          "project": "string",
          "endpoint": "string",
          "method": "string"
        },
        "optional": {
          "deprecated": "boolean"
        }
      },
      "headers": {
        "required": [
          {
            "level": 1,
            "text": "Endpoint",
            "match": "exact"
          },
          {
            "level": 2,
            "text": "Request",
            "match": "exact"
          },
          {
            "level": 2,
            "text": "Response",
            "match": "exact"
          }
        ],
        "optional": [],
        "order": "in-order"
      }
    }
  }
}
```

### Configuration Options

#### Root Detection
- `detect.method`: Currently supports `"project_file"`
- `detect.pattern`: Glob pattern for root detection (default: `"project_*.md"`)
- `override_path`: Bypass auto-detection with explicit path
- `ignore`: List of glob patterns to exclude

#### Location Constraints
- `"root_only"`: File must be in root directory
- `"subdirs_only"`: File must be in a subdirectory
- `"any"`: File can be anywhere

#### Frontmatter Types
- `"string"`: Text values
- `"number"`: Numeric values (int or float)
- `"boolean"`: True/false values
- `"list"`: Array values
- `"object"`: Dictionary/object values

#### Header Order
- `"strict"`: Headers must appear in exact order
- `"in-order"`: Headers must be in order but others can appear between
- `"any"`: No order enforcement

## 📝 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## 🙏 Acknowledgments

- Built with [Rich](https://github.com/Textualize/rich) for beautiful terminal output
- Uses [markdown-to-data](https://github.com/yourusername/markdown-to-data) for parsing
- Inspired by the need for better documentation tooling in AI-assisted development

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "moff-cli",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.12",
    "maintainer_email": null,
    "keywords": "cli, documentation, linting, markdown, validation",
    "author": null,
    "author_email": "Lennart Pollvogt <lennartpollvogt@protonmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/30/0e/96277da101255769ffa25f1572047f2808aba4069b3054fd1e9e8622c03c/moff_cli-0.3.1.tar.gz",
    "platform": null,
    "description": "# MOFF CLI\n\n**M**arkdown **O**pinionated **F**ile **F**ormatter\n\nA command-line tool for validating and maintaining clean, organized documentation. Designed to work seamlessly with Large Language Models (LLMs) in modern IDEs like Cursor, VSCode, and Zed.\n\n[![Python Version](https://img.shields.io/badge/python-3.12%2B-blue)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## \ud83c\udfaf Purpose\n\nMOFF helps maintain consistent documentation structure across projects by:\n- Validating markdown files against configurable rules\n- Enforcing location constraints for different document types\n- Checking frontmatter schemas and required fields\n- Ensuring headers follow specified patterns and order\n- Providing visual feedback through tree visualization\n\nPerfect for projects where documentation quality and consistency matter, especially when working with AI assistants that write markdown documentation.\n\n## \u2728 Features\n\n- **\ud83d\udcc1 Smart Root Detection**: Automatically finds documentation root via `project_*.md` files\n- **\ud83d\udd0d Comprehensive Validation**: Check frontmatter, headers, and file locations\n- **\ud83c\udf33 Tree Visualization**: See your documentation structure with error highlighting\n- **\u2699\ufe0f Configurable Rules**: Define custom prefixes, patterns, and validation rules\n- **\ud83d\udcbe Result Persistence**: Save validation results for CI/CD integration\n- **\ud83c\udfa8 Rich Terminal Output**: Beautiful, colored output using Rich library\n- **\ud83d\udcda Verbose Mode**: Shows expected file structure templates when validation fails\n- **\ud83d\udd27 Auto-fix**: Automatically fix common issues like missing frontmatter and headers\n\n## \ud83d\udce6 Installation\n\n### Using pip\n\n```bash\npip install moff-cli\n```\n\n### Using uv (recommended)\n\n```bash\nuv add moff-cli\n```\n\n## \ud83d\ude80 Quick Start\n\n1. **Check your documentation** (creates `settings.json` automatically if not present):\n```bash\nmoff check\n```\n\n2. **Visualize documentation structure**:\n```bash\nmoff tree\n```\n\n## \ud83d\udcd6 Usage\n\n### Commands Overview\n\n```bash\nmoff --help                    # Show help information\nmoff --version                 # Show version\n\nmoff check                     # Run validation checks\nmoff check --verbose          # Show expected structure for files with errors\nmoff check --fix              # Automatically fix fixable issues\nmoff check --save             # Run checks and save results to moff_results.txt\nmoff check --save --verbose   # Save results with expected structure templates\nmoff check --path ./docs      # Check specific directory\n\nmoff tree                      # Display documentation tree\nmoff tree --errors-only       # Show only files with errors\nmoff tree --no-check          # Skip validation (faster)\n```\n\n### Example: Setting Up a Project\n\n1. **Create a project file** (`project_myapp.md`):\n```markdown\n---\nproject: myapp\n---\n\n# Overview\n\nThis is my application's main documentation.\n\n## Requirements\n\n- Python 3.12+\n- Rich library\n```\n\n2. **Create feature documentation** (`features/feature_auth.md`):\n```markdown\n---\nproject: myapp\nfeature: authentication\nlinked_features: [\"users\", \"sessions\"]\n---\n\n# Overview\n\nAuthentication system for the application.\n\n## Requirements\n\n- Secure password hashing\n- JWT token support\n- Session management\n```\n\n3. **Validate your documentation** (this will create `settings.json` if it doesn't exist):\n```bash\nmoff check\n```\n\n### Example Output\n\n#### Check Command\n```\nCollecting documentation files...\nRoot directory: /Users/you/project/docs\n\n\u2713 All checks passed!\n\nNo validation issues found.\n```\n\nOr with errors:\n```\nValidation Summary:\n  Total issues: 2\n  Errors: 2\n\nIssues found:\n\nfeatures/feature_broken.md:\n  error [feature] headers.missing: Missing required header level=2 text='Requirements' (line 10)\n\ntech_database.md:\n  error [tech] location.subdirs_only: File must be in a subdirectory, not in root\n```\n\nOr with verbose mode to see expected structure:\n```\nfeatures/feature_broken.md:\n  error [feature] frontmatter.missing: Required frontmatter is missing (line 1)\n  error [feature] headers.missing: Missing required header level=1 text='Overview'\n  error [feature] headers.missing: Missing required header level=2 text='Requirements'\n\n  Expected structure for this file type (feature):\n  ---\n  project:\n  feature:\n  linked_features: []\n  ---\n\n  # Overview\n\n  ## Requirements\n```\n\n#### Fix Command\n\nWhen running `moff check`, you can use the `--fix` flag to automatically fix certain issues:\n\n```\nmoff check --fix\n```\n\nFixable issues include:\n- Missing frontmatter blocks\n- Missing required frontmatter fields\n- Missing required headers\n\nExample output:\n```\nApplying 3 automatic fixes...\nFixed features/feature_broken.md:\n  \u2022 Added missing frontmatter block\n  \u2022 Added missing header: Overview\n  \u2022 Added missing header: Requirements\n\nFixes applied successfully!\n```\n\nNote: Some issues cannot be automatically fixed, such as:\n- File location constraints (files in wrong directories)\n- Header ordering issues\n- Type mismatches in frontmatter values\n\n#### Tree Command\n```\n\ud83d\udcc1 docs (documentation root)\n\u251c\u2500\u2500 \ud83d\udcc1 features\n\u2502   \u251c\u2500\u2500 \u26a1 feature_auth.md \u2713\n\u2502   \u2514\u2500\u2500 \u26a1 feature_users.md \u2713\n\u251c\u2500\u2500 \ud83d\udcc1 technical\n\u2502   \u2514\u2500\u2500 \ud83d\udd27 tech_database.md \u2713\n\u2514\u2500\u2500 \ud83d\udccb project_myapp.md \u2713\n\nSummary:\n  Total markdown files: 4\n  Files with errors: 0\n  Files with warnings: 0\n\n\u2713 All files passed validation!\n```\n\n## \ud83d\udc0d Programmatic Usage\n\nWhen installed via pip, `moff-cli` can also be used as a Python library. Import it as `moff_cli`:\n\n### Basic Validation\n\n```python\nfrom pathlib import Path\nfrom moff_cli import Settings, Collector, Checker\n\n# Load settings and collect documentation\nsettings = Settings()\ncollector = Collector(settings, start_path=Path.cwd())\ncollected_data = collector.collect()\n\n# Run validation\nchecker = Checker(settings)\ndiagnostics = checker.check(collected_data)\n\n# Process results\nif not diagnostics:\n    print(\"\u2713 All documentation is valid!\")\nelse:\n    for diag in diagnostics:\n        print(f\"{diag.path}: {diag.message}\")\n```\n\n### Custom Configuration\n\n```python\nfrom moff_cli import (\n    Settings,\n    PrefixConfig,\n    LocationConstraint,\n    HeaderRule,\n    HeaderMatch\n)\n\n# Create custom settings\nsettings = Settings()\n\n# Add a custom prefix for API documentation\nsettings.prefixes[\"api\"] = PrefixConfig(\n    filename_pattern=\"api_*.md\",\n    location=LocationConstraint.SUBDIRS_ONLY,\n    frontmatter_required={\n        \"endpoint\": \"string\",\n        \"method\": \"string\",\n        \"version\": \"string\"\n    },\n    headers_required=[\n        HeaderRule(level=1, text=\"Endpoint\"),\n        HeaderRule(level=2, text=\"Request\"),\n        HeaderRule(level=2, text=\"Response\"),\n    ]\n)\n\n# Save custom settings\nsettings.save_to_file(Path(\"settings.json\"))\n```\n\n### Tree Visualization\n\n```python\nfrom moff_cli import Settings, Collector, Checker, TreeVisualizer\nfrom rich.console import Console\n\nconsole = Console()\nsettings = Settings()\n\n# Collect and check\ncollector = Collector(settings)\ncollected_data = collector.collect()\nchecker = Checker(settings)\ndiagnostics = checker.check(collected_data)\n\n# Display tree with error highlighting\nvisualizer = TreeVisualizer(settings, console)\nvisualizer.show_tree(collected_data, diagnostics)\n```\n\n### CI/CD Integration\n\n```python\nfrom pathlib import Path\nfrom moff_cli import Settings, Collector, Checker, Severity\n\ndef validate_docs(project_path: Path) -> bool:\n    \"\"\"Validate documentation for CI/CD pipeline.\"\"\"\n    settings = Settings()\n    collector = Collector(settings, start_path=project_path)\n    checker = Checker(settings)\n\n    # Collect and check\n    collected = collector.collect()\n    if collected.get(\"error\"):\n        print(f\"ERROR: {collected['error']}\")\n        return False\n\n    diagnostics = checker.check(collected)\n\n    # Filter to only errors (ignore warnings)\n    errors = [d for d in diagnostics if d.severity == Severity.ERROR]\n\n    if errors:\n        print(f\"Validation failed with {len(errors)} errors\")\n        for error in errors:\n            print(f\"  \u2717 {error.path}: {error.message}\")\n        return False\n\n    return True\n\n# Use in CI/CD\nif not validate_docs(Path(\".\")):\n    exit(1)\n```\n\n### Available Classes and Functions\n\n- `Settings`: Configuration management\n- `Collector`: File discovery and parsing\n- `Checker`: Validation engine\n- `TreeVisualizer`: Tree visualization\n- `Diagnostic`: Validation issue representation\n- `Severity`: Error, Warning, Info levels\n- `LocationConstraint`: ROOT_ONLY, SUBDIRS_ONLY, ANY\n- `HeaderOrder`: STRICT, IN_ORDER, ANY\n- `HeaderMatch`: EXACT, REGEX\n\n## \u2699\ufe0f Configuration\n\nMOFF uses `settings.json` for configuration. The default configuration supports three document prefixes:\n\n### Default Prefixes\n\n| Prefix | Pattern | Location | Purpose |\n|--------|---------|----------|---------|\n| `project` | `project_*.md` | Root only | Main project documentation |\n| `feature` | `feature_*.md` | Any | Feature specifications |\n| `tech` | `tech_*.md` | Subdirs only | Technical implementation details |\n\n### Custom Configuration Example\n\n```json\n{\n  \"version\": 1,\n  \"root\": {\n    \"detect\": {\n      \"method\": \"project_file\",\n      \"pattern\": \"project_*.md\"\n    },\n    \"override_path\": null,\n    \"ignore\": [\n      \"**/.git/**\",\n      \"**/.venv/**\",\n      \"**/node_modules/**\",\n      \"**/archive/**\"\n    ]\n  },\n  \"prefixes\": {\n    \"api\": {\n      \"filename\": {\n        \"pattern\": \"api_*.md\"\n      },\n      \"location\": \"subdirs_only\",\n      \"frontmatter\": {\n        \"required\": {\n          \"project\": \"string\",\n          \"endpoint\": \"string\",\n          \"method\": \"string\"\n        },\n        \"optional\": {\n          \"deprecated\": \"boolean\"\n        }\n      },\n      \"headers\": {\n        \"required\": [\n          {\n            \"level\": 1,\n            \"text\": \"Endpoint\",\n            \"match\": \"exact\"\n          },\n          {\n            \"level\": 2,\n            \"text\": \"Request\",\n            \"match\": \"exact\"\n          },\n          {\n            \"level\": 2,\n            \"text\": \"Response\",\n            \"match\": \"exact\"\n          }\n        ],\n        \"optional\": [],\n        \"order\": \"in-order\"\n      }\n    }\n  }\n}\n```\n\n### Configuration Options\n\n#### Root Detection\n- `detect.method`: Currently supports `\"project_file\"`\n- `detect.pattern`: Glob pattern for root detection (default: `\"project_*.md\"`)\n- `override_path`: Bypass auto-detection with explicit path\n- `ignore`: List of glob patterns to exclude\n\n#### Location Constraints\n- `\"root_only\"`: File must be in root directory\n- `\"subdirs_only\"`: File must be in a subdirectory\n- `\"any\"`: File can be anywhere\n\n#### Frontmatter Types\n- `\"string\"`: Text values\n- `\"number\"`: Numeric values (int or float)\n- `\"boolean\"`: True/false values\n- `\"list\"`: Array values\n- `\"object\"`: Dictionary/object values\n\n#### Header Order\n- `\"strict\"`: Headers must appear in exact order\n- `\"in-order\"`: Headers must be in order but others can appear between\n- `\"any\"`: No order enforcement\n\n## \ud83d\udcdd License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- Built with [Rich](https://github.com/Textualize/rich) for beautiful terminal output\n- Uses [markdown-to-data](https://github.com/yourusername/markdown-to-data) for parsing\n- Inspired by the need for better documentation tooling in AI-assisted development\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "MOFF - Markdown Organization and Format Framework. A CLI tool for validating documentation structure.",
    "version": "0.3.1",
    "project_urls": {
        "Documentation": "https://github.com/lennartpollvogt/moff-cli#readme",
        "Homepage": "https://github.com/lennartpollvogt/moff-cli",
        "Issues": "https://github.com/lennartpollvogt/moff-cli/issues",
        "Repository": "https://github.com/lennartpollvogt/moff-cli"
    },
    "split_keywords": [
        "cli",
        " documentation",
        " linting",
        " markdown",
        " validation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "85237ff82be1589dd05802b95207eddad22ffff1f227ccad5865f1d6b2d87125",
                "md5": "cacdce9f952231d859ec13dcd70b7d59",
                "sha256": "9c464a8578a15a3ff78cf2299444e454c6d5ff3fb550e77862a551f684814da9"
            },
            "downloads": -1,
            "filename": "moff_cli-0.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "cacdce9f952231d859ec13dcd70b7d59",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.12",
            "size": 32290,
            "upload_time": "2025-08-10T18:42:58",
            "upload_time_iso_8601": "2025-08-10T18:42:58.043173Z",
            "url": "https://files.pythonhosted.org/packages/85/23/7ff82be1589dd05802b95207eddad22ffff1f227ccad5865f1d6b2d87125/moff_cli-0.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "300e96277da101255769ffa25f1572047f2808aba4069b3054fd1e9e8622c03c",
                "md5": "d8c5383c6d4d804ec2df5698d2f1ecf0",
                "sha256": "e34c9e22467e57ccc0684d6b90404e2a69cb9108b026f47ddb11009740aaac9e"
            },
            "downloads": -1,
            "filename": "moff_cli-0.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "d8c5383c6d4d804ec2df5698d2f1ecf0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.12",
            "size": 84488,
            "upload_time": "2025-08-10T18:42:59",
            "upload_time_iso_8601": "2025-08-10T18:42:59.450072Z",
            "url": "https://files.pythonhosted.org/packages/30/0e/96277da101255769ffa25f1572047f2808aba4069b3054fd1e9e8622c03c/moff_cli-0.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-10 18:42:59",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "lennartpollvogt",
    "github_project": "moff-cli#readme",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "moff-cli"
}
        
Elapsed time: 1.16643s