# mkfile - Advanced File Creator
A powerful command-line utility for creating blank files with support for brace expansion, automatic directory creation, desktop notifications, and clipboard integration.
## Features
- ✨ **Brace Expansion**: Create multiple files with a single command
- 📁 **Auto Directory Creation**: Automatically creates parent directories if they don't exist
- 📋 **Clipboard Integration**: Copies absolute file paths to clipboard
- 🔔 **Desktop Notifications**: Optional Growl notification support
- 🖥️ **Cross-Platform**: Works on Windows, Linux, and macOS
- 🎯 **Smart Parsing**: Handles complex patterns with spaces and multiple items
## Installation
```bash
pip install mkfile
```
### Optional Requirements
- Python 3.6+
- Optional dependencies for enhanced features:
```bash
pip install clipboard # For clipboard support
pip install gntp # For Growl notifications
```
## Usage
### Basic Syntax
```bash
mkfile [OPTIONS] FILE [FILE ...]
```
### Examples
#### Create Single File
```bash
mkfile test.txt
```
#### Create Multiple Files
```bash
mkfile file1.txt file2.py file3.js
```
#### Create Files with Directory Structure
```bash
mkfile src/main.py tests/test_main.py
# Creates: src/ and tests/ directories automatically
```
#### Brace Expansion - Simple
```bash
mkfile test/{a,b,c}.txt
# Creates: test/a.txt, test/b.txt, test/c.txt
```
#### Brace Expansion - Directory Prefix
```bash
mkfile dotenv{__init__.py,core.py,utils.py}
# Creates: dotenv/__init__.py, dotenv/core.py, dotenv/utils.py
```
#### Brace Expansion - With Spaces (Flexible Syntax)
```bash
mkfile src{main.py, utils.py config.py}
# Creates: src/main.py, src/utils.py, src/config.py
# Note: Handles both comma and space separation inside braces
```
#### Complex Project Structure
```bash
mkfile src/{__init__.py,main.py,utils.py} tests/{__init__.py,test_main.py} README.md setup.py requirements.txt
```
#### Real-World Example - Python Package
```bash
mkfile mypackage/{__init__.py,core.py,exceptions.py,utils.py} tests/{__init__.py,test_core.py} setup.py pyproject.toml README.md LICENSE requirements.txt .gitignore
```
## Brace Expansion Syntax
### Supported Formats
1. **Standard format** (recommended):
```bash
mkfile dir/{file1,file2,file3}
```
2. **Directory prefix** (no slash):
```bash
mkfile dir{file1,file2,file3}
# Automatically adds '/' → dir/file1, dir/file2, dir/file3
```
3. **With spaces** (flexible):
```bash
mkfile dir{file1, file2, file3}
mkfile dir{file1 file2 file3}
# Both work! Splits by comma AND spaces
```
4. **With file extensions**:
```bash
mkfile src/{main,utils,config}.py
# Creates: src/main.py, src/utils.py, src/config.py
```
### Brace Expansion Rules
- Items inside `{}` can be separated by:
- Commas: `{a,b,c}`
- Spaces: `{a b c}`
- Both: `{a, b, c}` or `{a, b c}`
- If prefix doesn't end with `/` or `\`, it's treated as a directory name
- Empty items are skipped
- Nested braces are not supported
## Command-Line Options
### `--version`
Show version information
```bash
mkfile --version
```
### `--debug`
Enable detailed error messages and stack traces
```bash
mkfile --debug file1.txt file2.txt
```
### `--help`
Show help message with examples
```bash
mkfile --help
```
## Output
### Success
```
✓ File created: "C:\PROJECTS\myproject\src\main.py"
✓ File created: "C:\PROJECTS\myproject\src\utils.py"
2/2 file(s) created successfully
```
### With Errors
```
✓ File created: "valid.txt"
✗ Error creating file "invalid/path/file.txt": [Errno 13] Permission denied
1/2 file(s) created successfully
```
## Features in Detail
### Automatic Directory Creation
The script automatically creates all parent directories:
```bash
mkfile deep/nested/path/to/file.txt
# Creates: deep/ → deep/nested/ → deep/nested/path/ → deep/nested/path/to/
```
### Clipboard Integration
After creating each file, its absolute path is automatically copied to your clipboard (requires `clipboard` module).
### Desktop Notifications
If Growl is installed and running, you'll receive desktop notifications for each file created.
**Note**: The "Could not initialize Growl" warning is normal if Growl is not running. The script continues to work perfectly without it.
### Cross-Platform Paths
The script uses Python's `pathlib` for cross-platform compatibility. Use forward slashes (`/`) in commands on all platforms - they'll be converted automatically.
## Troubleshooting
### "Could not initialize Growl" Warning
This is **normal** and **harmless**. It means Growl notification service isn't running. The script works fine without it.
To suppress this warning, you can:
- Install and run Growl
- Or ignore it (doesn't affect functionality)
### Permission Denied Errors
If you get permission errors:
- Check directory permissions
- Run with appropriate privileges
- Use `--debug` flag for more details
### Files Not Created in Expected Directory
Check your brace expansion syntax:
```bash
# WRONG - No directory separator
mkfile mydir{file1,file2} # Creates: mydir/file1, mydir/file2 ✓
# If you want nested directories, use /
mkfile mydir/{subdir/file1,file2} # Creates: mydir/subdir/file1, mydir/file2
```
## Tips & Best Practices
1. **Use quotes for files with spaces**:
```bash
mkfile "my file.txt"
```
2. **Combine with other commands**:
```bash
mkfile src/{main,utils}.py && code src/main.py
```
3. **Create project templates**:
```bash
# Save as a shell script
mkfile project/{src,tests,docs}/{__init__.py} README.md setup.py
```
4. **Verify with tree command**:
```bash
mkfile test/{a,b,c}.txt && tree test/
```
## Version History
### v2.0
- Added smart brace expansion parsing
- Auto directory creation
- Support for space-separated items in braces
- Improved error handling
- Better cross-platform support
- Class-based architecture
### v1.0
- Initial release
- Basic file creation
- Growl notifications
## License
Free to use and modify.
## Contributing
Feel free to submit issues and enhancement requests!
---
**Quick Reference**:
```bash
# Single file
mkfile file.txt
# Multiple files
mkfile file1 file2 file3
# With directories
mkfile src/main.py tests/test.py
# Brace expansion
mkfile src/{main,utils,config}.py
# Complex structure
mkfile mypackage/{__init__,core,utils}.py tests/{__init__,test_core}.py README.md
```
## Author
[Hadi Cahyadi](mailto:cumulus13@gmail.com)
[](https://www.buymeacoffee.com/cumulus13)
[](https://ko-fi.com/cumulus13)
[Support me on Patreon](https://www.patreon.com/cumulus13)
Raw data
{
"_id": null,
"home_page": "https://github.com/cumulus13/mkfile",
"name": "mkfile",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "file creation, command-line, brace expansion, developer tools",
"author": "cumulus13",
"author_email": "cumulus13@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/4c/76/101a3132af991c92bceb672212690189a5548e5867b455b4ac3305940837/mkfile-1.0.12.tar.gz",
"platform": null,
"description": "# mkfile - Advanced File Creator\n\nA powerful command-line utility for creating blank files with support for brace expansion, automatic directory creation, desktop notifications, and clipboard integration.\n\n## Features\n\n- \u2728 **Brace Expansion**: Create multiple files with a single command\n- \ud83d\udcc1 **Auto Directory Creation**: Automatically creates parent directories if they don't exist\n- \ud83d\udccb **Clipboard Integration**: Copies absolute file paths to clipboard\n- \ud83d\udd14 **Desktop Notifications**: Optional Growl notification support\n- \ud83d\udda5\ufe0f **Cross-Platform**: Works on Windows, Linux, and macOS\n- \ud83c\udfaf **Smart Parsing**: Handles complex patterns with spaces and multiple items\n\n## Installation\n\n```bash\npip install mkfile\n```\n\n### Optional Requirements\n\n- Python 3.6+\n- Optional dependencies for enhanced features:\n\n```bash\npip install clipboard # For clipboard support\npip install gntp # For Growl notifications\n```\n\n## Usage\n\n### Basic Syntax\n\n```bash\nmkfile [OPTIONS] FILE [FILE ...]\n```\n\n### Examples\n\n#### Create Single File\n```bash\nmkfile test.txt\n```\n\n#### Create Multiple Files\n```bash\nmkfile file1.txt file2.py file3.js\n```\n\n#### Create Files with Directory Structure\n```bash\nmkfile src/main.py tests/test_main.py\n# Creates: src/ and tests/ directories automatically\n```\n\n#### Brace Expansion - Simple\n```bash\nmkfile test/{a,b,c}.txt\n# Creates: test/a.txt, test/b.txt, test/c.txt\n```\n\n#### Brace Expansion - Directory Prefix\n```bash\nmkfile dotenv{__init__.py,core.py,utils.py}\n# Creates: dotenv/__init__.py, dotenv/core.py, dotenv/utils.py\n```\n\n#### Brace Expansion - With Spaces (Flexible Syntax)\n```bash\nmkfile src{main.py, utils.py config.py}\n# Creates: src/main.py, src/utils.py, src/config.py\n# Note: Handles both comma and space separation inside braces\n```\n\n#### Complex Project Structure\n```bash\nmkfile src/{__init__.py,main.py,utils.py} tests/{__init__.py,test_main.py} README.md setup.py requirements.txt\n```\n\n#### Real-World Example - Python Package\n```bash\nmkfile mypackage/{__init__.py,core.py,exceptions.py,utils.py} tests/{__init__.py,test_core.py} setup.py pyproject.toml README.md LICENSE requirements.txt .gitignore\n```\n\n## Brace Expansion Syntax\n\n### Supported Formats\n\n1. **Standard format** (recommended):\n ```bash\n mkfile dir/{file1,file2,file3}\n ```\n\n2. **Directory prefix** (no slash):\n ```bash\n mkfile dir{file1,file2,file3}\n # Automatically adds '/' \u2192 dir/file1, dir/file2, dir/file3\n ```\n\n3. **With spaces** (flexible):\n ```bash\n mkfile dir{file1, file2, file3}\n mkfile dir{file1 file2 file3}\n # Both work! Splits by comma AND spaces\n ```\n\n4. **With file extensions**:\n ```bash\n mkfile src/{main,utils,config}.py\n # Creates: src/main.py, src/utils.py, src/config.py\n ```\n\n### Brace Expansion Rules\n\n- Items inside `{}` can be separated by:\n - Commas: `{a,b,c}`\n - Spaces: `{a b c}`\n - Both: `{a, b, c}` or `{a, b c}`\n- If prefix doesn't end with `/` or `\\`, it's treated as a directory name\n- Empty items are skipped\n- Nested braces are not supported\n\n## Command-Line Options\n\n### `--version`\nShow version information\n\n```bash\nmkfile --version\n```\n\n### `--debug`\nEnable detailed error messages and stack traces\n\n```bash\nmkfile --debug file1.txt file2.txt\n```\n\n### `--help`\nShow help message with examples\n\n```bash\nmkfile --help\n```\n\n## Output\n\n### Success\n```\n\u2713 File created: \"C:\\PROJECTS\\myproject\\src\\main.py\"\n\u2713 File created: \"C:\\PROJECTS\\myproject\\src\\utils.py\"\n\n2/2 file(s) created successfully\n```\n\n### With Errors\n```\n\u2713 File created: \"valid.txt\"\n\u2717 Error creating file \"invalid/path/file.txt\": [Errno 13] Permission denied\n\n1/2 file(s) created successfully\n```\n\n## Features in Detail\n\n### Automatic Directory Creation\n\nThe script automatically creates all parent directories:\n\n```bash\nmkfile deep/nested/path/to/file.txt\n# Creates: deep/ \u2192 deep/nested/ \u2192 deep/nested/path/ \u2192 deep/nested/path/to/\n```\n\n### Clipboard Integration\n\nAfter creating each file, its absolute path is automatically copied to your clipboard (requires `clipboard` module).\n\n### Desktop Notifications\n\nIf Growl is installed and running, you'll receive desktop notifications for each file created.\n\n**Note**: The \"Could not initialize Growl\" warning is normal if Growl is not running. The script continues to work perfectly without it.\n\n### Cross-Platform Paths\n\nThe script uses Python's `pathlib` for cross-platform compatibility. Use forward slashes (`/`) in commands on all platforms - they'll be converted automatically.\n\n## Troubleshooting\n\n### \"Could not initialize Growl\" Warning\n\nThis is **normal** and **harmless**. It means Growl notification service isn't running. The script works fine without it.\n\nTo suppress this warning, you can:\n- Install and run Growl\n- Or ignore it (doesn't affect functionality)\n\n### Permission Denied Errors\n\nIf you get permission errors:\n- Check directory permissions\n- Run with appropriate privileges\n- Use `--debug` flag for more details\n\n### Files Not Created in Expected Directory\n\nCheck your brace expansion syntax:\n```bash\n# WRONG - No directory separator\nmkfile mydir{file1,file2} # Creates: mydir/file1, mydir/file2 \u2713\n\n# If you want nested directories, use /\nmkfile mydir/{subdir/file1,file2} # Creates: mydir/subdir/file1, mydir/file2\n```\n\n## Tips & Best Practices\n\n1. **Use quotes for files with spaces**:\n ```bash\n mkfile \"my file.txt\"\n ```\n\n2. **Combine with other commands**:\n ```bash\n mkfile src/{main,utils}.py && code src/main.py\n ```\n\n3. **Create project templates**:\n ```bash\n # Save as a shell script\n mkfile project/{src,tests,docs}/{__init__.py} README.md setup.py\n ```\n\n4. **Verify with tree command**:\n ```bash\n mkfile test/{a,b,c}.txt && tree test/\n ```\n\n## Version History\n\n### v2.0\n- Added smart brace expansion parsing\n- Auto directory creation\n- Support for space-separated items in braces\n- Improved error handling\n- Better cross-platform support\n- Class-based architecture\n\n### v1.0\n- Initial release\n- Basic file creation\n- Growl notifications\n\n## License\n\nFree to use and modify.\n\n## Contributing\n\nFeel free to submit issues and enhancement requests!\n\n---\n\n**Quick Reference**:\n```bash\n# Single file\nmkfile file.txt\n\n# Multiple files\nmkfile file1 file2 file3\n\n# With directories\nmkfile src/main.py tests/test.py\n\n# Brace expansion\nmkfile src/{main,utils,config}.py\n\n# Complex structure\nmkfile mypackage/{__init__,core,utils}.py tests/{__init__,test_core}.py README.md\n```\n\n\n## Author\n[Hadi Cahyadi](mailto:cumulus13@gmail.com)\n \n\n[](https://www.buymeacoffee.com/cumulus13)\n\n[](https://ko-fi.com/cumulus13)\n\n[Support me on Patreon](https://www.patreon.com/cumulus13)\n",
"bugtrack_url": null,
"license": null,
"summary": "Advanced file creator with brace expansion and notification support",
"version": "1.0.12",
"project_urls": {
"Bug Reports": "https://github.com/cumulus13/mkfile/issues",
"Homepage": "https://github.com/cumulus13/mkfile",
"Source": "https://github.com/cumulus13/mkfile"
},
"split_keywords": [
"file creation",
" command-line",
" brace expansion",
" developer tools"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "590b232388073822ae28d7286f8729e74bf4eeec3ff7839d36d4204d38bff020",
"md5": "89fc739779daae02d67d19b5222f2631",
"sha256": "a0a793d8da4cbd23e6644bfc5c31f9befedcd11ccef39206fd0805df58e5ce88"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "89fc739779daae02d67d19b5222f2631",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 115494,
"upload_time": "2025-10-11T02:29:46",
"upload_time_iso_8601": "2025-10-11T02:29:46.410611Z",
"url": "https://files.pythonhosted.org/packages/59/0b/232388073822ae28d7286f8729e74bf4eeec3ff7839d36d4204d38bff020/mkfile-1.0.12-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2ca9012d07e35eb63393374b5db8d87ca60a35d4e13531e91dba4a639ebd7d64",
"md5": "78a66587b1872a77fcda2e0f0bcc2f95",
"sha256": "e2bb4b015f380341301d277a87079e8d4e15594b009997b979d322263506e451"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "78a66587b1872a77fcda2e0f0bcc2f95",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 412168,
"upload_time": "2025-10-11T02:29:47",
"upload_time_iso_8601": "2025-10-11T02:29:47.930131Z",
"url": "https://files.pythonhosted.org/packages/2c/a9/012d07e35eb63393374b5db8d87ca60a35d4e13531e91dba4a639ebd7d64/mkfile-1.0.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c7bd3ca6623288c4802fc7006ff576735b59d0a2e7d82504b9410609367dd830",
"md5": "fb1f1358a7637eac44d9c993aaf33786",
"sha256": "d8d6a3cc428b5fe4bed1c9c07941460d21c4bcd81edd4f878f7f68f96db55262"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp310-cp310-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "fb1f1358a7637eac44d9c993aaf33786",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 406569,
"upload_time": "2025-10-11T02:29:49",
"upload_time_iso_8601": "2025-10-11T02:29:49.401108Z",
"url": "https://files.pythonhosted.org/packages/c7/bd/3ca6623288c4802fc7006ff576735b59d0a2e7d82504b9410609367dd830/mkfile-1.0.12-cp310-cp310-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "897488485ad293ec795b9781e5bee1138a35439c122c2be6d64525ef3aafc463",
"md5": "528b5e2fe1c4c99bcbb5191e7c0e89fb",
"sha256": "c7c1d69ef22f523c5900f584b2529385d09b60c755d6a3bbc471e3f505f6ff0b"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "528b5e2fe1c4c99bcbb5191e7c0e89fb",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 420253,
"upload_time": "2025-10-11T02:29:51",
"upload_time_iso_8601": "2025-10-11T02:29:51.174019Z",
"url": "https://files.pythonhosted.org/packages/89/74/88485ad293ec795b9781e5bee1138a35439c122c2be6d64525ef3aafc463/mkfile-1.0.12-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a3b7efc123584ae488f146a633dd42c9e0b18f16c252f092e6ce23789e21a9e3",
"md5": "c63fa4f103d71893ccd8a9b48fc25823",
"sha256": "12198e298d0780dae511778d77b282ff6c4434f23eaac1bb2fc7504b4417b1bc"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "c63fa4f103d71893ccd8a9b48fc25823",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 107885,
"upload_time": "2025-10-11T02:29:52",
"upload_time_iso_8601": "2025-10-11T02:29:52.755509Z",
"url": "https://files.pythonhosted.org/packages/a3/b7/efc123584ae488f146a633dd42c9e0b18f16c252f092e6ce23789e21a9e3/mkfile-1.0.12-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7c6e027bcd7bfb63c61eaab8ea070cf91adca0d9edfe0876662f8f2db52fc22f",
"md5": "8cd3295dcc9aa71c168ae3293d5c89dd",
"sha256": "b9b8ffc45c35813137260a2e2faa35845b84e6d2ba5878e590afe645ca9ea254"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "8cd3295dcc9aa71c168ae3293d5c89dd",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 116884,
"upload_time": "2025-10-11T02:29:54",
"upload_time_iso_8601": "2025-10-11T02:29:54.130251Z",
"url": "https://files.pythonhosted.org/packages/7c/6e/027bcd7bfb63c61eaab8ea070cf91adca0d9edfe0876662f8f2db52fc22f/mkfile-1.0.12-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cd08230437a86cdbfb85599db26ce7fad14be815d9beb41c06cd684b318b83bb",
"md5": "ea72d96aeb7c1ea530d1832a6f3c5edb",
"sha256": "ffa99ade17f14ed733967dde35d712d6161b87d8dcf0bf882ed2e7672c1baef4"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "ea72d96aeb7c1ea530d1832a6f3c5edb",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 438856,
"upload_time": "2025-10-11T02:29:55",
"upload_time_iso_8601": "2025-10-11T02:29:55.173070Z",
"url": "https://files.pythonhosted.org/packages/cd/08/230437a86cdbfb85599db26ce7fad14be815d9beb41c06cd684b318b83bb/mkfile-1.0.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b0a17b447087eb94013d6c09f7484cd9fd80e6e64b13d006d1294fe84bf81bc0",
"md5": "6f41e08febb28f36d3d4631e746dc325",
"sha256": "6f39ea9f36b0da2956c7be2e5da2dcac72773a6305f54574d5849377e279f5d5"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp311-cp311-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "6f41e08febb28f36d3d4631e746dc325",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 424041,
"upload_time": "2025-10-11T02:29:56",
"upload_time_iso_8601": "2025-10-11T02:29:56.566572Z",
"url": "https://files.pythonhosted.org/packages/b0/a1/7b447087eb94013d6c09f7484cd9fd80e6e64b13d006d1294fe84bf81bc0/mkfile-1.0.12-cp311-cp311-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "df6fd1c692bcc5d377d2bc300a72f7bf06186286ba2995d294ea3b456c60bbfa",
"md5": "ae97a52aae3828e6b61387ff6135590a",
"sha256": "2511ec9dfc2fb10718ad177e46ae44db7b9476586f90887d34c33919ea8fd581"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "ae97a52aae3828e6b61387ff6135590a",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 438863,
"upload_time": "2025-10-11T02:29:57",
"upload_time_iso_8601": "2025-10-11T02:29:57.864407Z",
"url": "https://files.pythonhosted.org/packages/df/6f/d1c692bcc5d377d2bc300a72f7bf06186286ba2995d294ea3b456c60bbfa/mkfile-1.0.12-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9a834762fbed9b1783c0a22be59c853bd1af0a72cdb943604c53ce42a84e3bc7",
"md5": "1ec548e3d98b71c884c80f50a0c86068",
"sha256": "c16411f30156d5f83ee2c682114f408a5bfbd7390890f8b178111aecb45fabd3"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "1ec548e3d98b71c884c80f50a0c86068",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 108198,
"upload_time": "2025-10-11T02:29:59",
"upload_time_iso_8601": "2025-10-11T02:29:59.506811Z",
"url": "https://files.pythonhosted.org/packages/9a/83/4762fbed9b1783c0a22be59c853bd1af0a72cdb943604c53ce42a84e3bc7/mkfile-1.0.12-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f011632f8c87d8b41585a6dae05ee0e109e49bbd4693a44b7f2ab580c564dcd5",
"md5": "315211d5d2574209462af9393e82e726",
"sha256": "8907bbcbba123756119b09391a9af5460d084d09b80da33ecbbeed3140eded0e"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "315211d5d2574209462af9393e82e726",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 116455,
"upload_time": "2025-10-11T02:30:01",
"upload_time_iso_8601": "2025-10-11T02:30:01.071004Z",
"url": "https://files.pythonhosted.org/packages/f0/11/632f8c87d8b41585a6dae05ee0e109e49bbd4693a44b7f2ab580c564dcd5/mkfile-1.0.12-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "44bf6fe40248af5813d22a4a28414935bedb4512aa33bb92f5ae9f7bd87ac51b",
"md5": "dd82759da000b69ca1d3773e8f57f59a",
"sha256": "0b98041a0fa1c245ec2155c57d2ee8ca68c1d86598dc05fe2865b4653fdd8563"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "dd82759da000b69ca1d3773e8f57f59a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 423054,
"upload_time": "2025-10-11T02:30:02",
"upload_time_iso_8601": "2025-10-11T02:30:02.473350Z",
"url": "https://files.pythonhosted.org/packages/44/bf/6fe40248af5813d22a4a28414935bedb4512aa33bb92f5ae9f7bd87ac51b/mkfile-1.0.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fc34e955df57e8097e5745873293f28e2dd25a85a968732d741dbf6d6b22f9ff",
"md5": "2cf95f8c4fde2fd3f9074683fcc8c214",
"sha256": "9918d18edcd122873a80a3c6209f2e7ecec478d6f213067f777297741576358b"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp312-cp312-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "2cf95f8c4fde2fd3f9074683fcc8c214",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 404368,
"upload_time": "2025-10-11T02:30:03",
"upload_time_iso_8601": "2025-10-11T02:30:03.994971Z",
"url": "https://files.pythonhosted.org/packages/fc/34/e955df57e8097e5745873293f28e2dd25a85a968732d741dbf6d6b22f9ff/mkfile-1.0.12-cp312-cp312-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "094daedf6ac6b84b16a82250e6bc75815ca0b73b99b8f836610ea600a035aec8",
"md5": "febd94d1359aa96ed003d15066c3b405",
"sha256": "cfc133f3f98402dfda071ec70d8fa545e932412e4840c5db029e9f62c14e15fa"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp312-cp312-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "febd94d1359aa96ed003d15066c3b405",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 423092,
"upload_time": "2025-10-11T02:30:05",
"upload_time_iso_8601": "2025-10-11T02:30:05.870364Z",
"url": "https://files.pythonhosted.org/packages/09/4d/aedf6ac6b84b16a82250e6bc75815ca0b73b99b8f836610ea600a035aec8/mkfile-1.0.12-cp312-cp312-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e7444575e6f08414f54c87dd9c17ce3d3fc47cbf659873947a8d48abe5eadf8c",
"md5": "c63ac0c2e84dc207d3f8c615db3f8be7",
"sha256": "df095210e908ec4eb073072b3eeceb9f5283346aa207d60f4dd2489d5ea9d7e5"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "c63ac0c2e84dc207d3f8c615db3f8be7",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 107952,
"upload_time": "2025-10-11T02:30:07",
"upload_time_iso_8601": "2025-10-11T02:30:07.307008Z",
"url": "https://files.pythonhosted.org/packages/e7/44/4575e6f08414f54c87dd9c17ce3d3fc47cbf659873947a8d48abe5eadf8c/mkfile-1.0.12-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e90e63a0ab266c0b77c52cf8a2c57b67b758406f03d9e8fed9ba7ae60d254296",
"md5": "62534df8e769065719ff7c9140b8d5e3",
"sha256": "105b5055124221d3824d327b9cdde149072a8b67be8130e3e605f9c186922a1b"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "62534df8e769065719ff7c9140b8d5e3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 115923,
"upload_time": "2025-10-11T02:30:08",
"upload_time_iso_8601": "2025-10-11T02:30:08.655571Z",
"url": "https://files.pythonhosted.org/packages/e9/0e/63a0ab266c0b77c52cf8a2c57b67b758406f03d9e8fed9ba7ae60d254296/mkfile-1.0.12-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "92b46dcff57592428e2f1ea842902197b866e079ef8261c3e6499e195c6a1957",
"md5": "311f0d90c75d8eada4794c96f3d87016",
"sha256": "2ea075f255c266b20c12bfb3da78b24b8b649b8ac1e1df56fb872e516caddd8e"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "311f0d90c75d8eada4794c96f3d87016",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 413333,
"upload_time": "2025-10-11T02:30:09",
"upload_time_iso_8601": "2025-10-11T02:30:09.922674Z",
"url": "https://files.pythonhosted.org/packages/92/b4/6dcff57592428e2f1ea842902197b866e079ef8261c3e6499e195c6a1957/mkfile-1.0.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c2a000fd2d03e684f36b824b4cdc9f4fcf06828834ddde3c17b287251a59be2e",
"md5": "1d77c0e8249138c946a35e178da93abc",
"sha256": "d3f1930e9baf473a30899ac04a0036ab6e60a251894f9d614278b2819261efd0"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp39-cp39-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "1d77c0e8249138c946a35e178da93abc",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 407972,
"upload_time": "2025-10-11T02:30:11",
"upload_time_iso_8601": "2025-10-11T02:30:11.453411Z",
"url": "https://files.pythonhosted.org/packages/c2/a0/00fd2d03e684f36b824b4cdc9f4fcf06828834ddde3c17b287251a59be2e/mkfile-1.0.12-cp39-cp39-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "22dc0ba621e0ee3fb1071831f630d97ac790a49ec15dc1db09dbec04cf8a64fd",
"md5": "ff091efe8df3e886f597af066d787c57",
"sha256": "c082d6a0c95aa21016e6733dd432e3addf04dfc2f1ed7faac18bac31cd8dda18"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp39-cp39-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "ff091efe8df3e886f597af066d787c57",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 421175,
"upload_time": "2025-10-11T02:30:12",
"upload_time_iso_8601": "2025-10-11T02:30:12.688640Z",
"url": "https://files.pythonhosted.org/packages/22/dc/0ba621e0ee3fb1071831f630d97ac790a49ec15dc1db09dbec04cf8a64fd/mkfile-1.0.12-cp39-cp39-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e8b241fe84ea695742697affdc9751d77169b5268363904bdbe6469878672a9e",
"md5": "8d64109ff0ff7adb8ae6ec45b27189e0",
"sha256": "30f2fb7c769cbccc110096ce032839b1fa99b893dc0f7fc18e70126508d43a48"
},
"downloads": -1,
"filename": "mkfile-1.0.12-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "8d64109ff0ff7adb8ae6ec45b27189e0",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 108272,
"upload_time": "2025-10-11T02:30:13",
"upload_time_iso_8601": "2025-10-11T02:30:13.853532Z",
"url": "https://files.pythonhosted.org/packages/e8/b2/41fe84ea695742697affdc9751d77169b5268363904bdbe6469878672a9e/mkfile-1.0.12-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4c76101a3132af991c92bceb672212690189a5548e5867b455b4ac3305940837",
"md5": "7cb5af65161f6bb5d18c7afe0653956b",
"sha256": "b5043e017b1125124819e126f0499ed22458a89abf953234593ec0f2071ffb7c"
},
"downloads": -1,
"filename": "mkfile-1.0.12.tar.gz",
"has_sig": false,
"md5_digest": "7cb5af65161f6bb5d18c7afe0653956b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 62468,
"upload_time": "2025-10-11T02:30:15",
"upload_time_iso_8601": "2025-10-11T02:30:15.027273Z",
"url": "https://files.pythonhosted.org/packages/4c/76/101a3132af991c92bceb672212690189a5548e5867b455b4ac3305940837/mkfile-1.0.12.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-11 02:30:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "cumulus13",
"github_project": "mkfile",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "mkfile"
}