Name | moff-cli JSON |
Version |
0.3.1
JSON |
| download |
home_page | None |
Summary | MOFF - Markdown Organization and Format Framework. A CLI tool for validating documentation structure. |
upload_time | 2025-08-10 18:42:59 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.12 |
license | MIT |
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.
[](https://www.python.org/downloads/)
[](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[](https://www.python.org/downloads/)\n[](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"
}