Skip to main content

Maketree CLI

GitHub Repository Latest PyPi version supported Python versions Project licence Black PyPI - Downloads

Create project structures effortlessly with a single command.

📜 Table of Contents

📖 Overview

Maketree is a powerful CLI tool that generates directories and files based on a predefined structure. Instead of manually creating folders and files, just define your structure and let Maketree handle the rest.

demo.gif

🤔 Why Maketree?

  • Saves Time: No more manually creating directories and files.
  • Consistency: Maintain a standard project structure across all your projects.
  • Easy to Use: Define a structure in plain text and generate it instantly.

🚀 Features:

  • Supports nested directory structures
  • Automatically creates missing parent directories
  • Flexible file handling with warning, skip, and overwrite options
  • Preview the directory tree before creation
  • Color support
  • Simple and easy to write structure syntax
  • Lightweight, fast, and has zero dependencies
  • Simple and user-friendly CLI

📦 Installation:

Install via **pip**:

Maketree is available on PyPI. (Recommended if you're a python developer and have python already installed on your system)

You can install it using:

pip install maketree

python>=3.8 must be installed on your system.

Install from **Source**:

If you are installing from source, you will need python>=3.8.

git clone https://github.com/Anas-Shakeel/maketree-cli.git
cd maketree-cli
pip install .

Download **Binaries**: _(No Python Required)_

Maketree provides standalone binaries for Linux, macOS, and Windows. (Recommended if you don't want to install Python.)

  • Download the latest release from the Releases page.

  • (Optional) Move the executable to a directory in your system's PATH (e.g., /usr/local/bin on Linux/macOS OR C:\maketree on Windows).

  • Run maketree from the terminal.

    maketree -h
    

⚡ Quickstart:

Define your project structure in a .tree file:

structure.tree

my_project/
    src/
        main.py
        utils.py
    tests/
        test_main.py
    README.md
    .gitignore

Then, run:

maketree structure.tree

This will instantly generate the entire structure in your current directory.

⚙️ Usage

You can maketree from any location in your terminal. (If installed via pip or if moved the executable to a directory recognized by system's PATH)

Display Help

maketree -h

This will show the available commands and options:

usage: maketree [OPTIONS]

Create complex project structures effortlessly.

positional arguments:
  src                   source file (with .tree extension)
  dst                   where to create the tree structure (default: .)

options:
  -h, --help            show this help message and exit
  -cd, --create-dst     create destination folder if it doesn't exist.
  -et, --extract-tree   write directory tree into a .tree file. (takes a PATH)
  -g, --graphical       show source file as graphical tree and exit
  -o, --overwrite       overwrite existing files
  -s, --skip            skip existing files
  -nc, --no-color       don't use colors in output
  -nC, --no-confirm     don't ask for confirmation
  -v, --verbose         enable verbose mode

Maketree 1.2.0

Creating a Directory Structure

Maketree reads .tree file that defines the folder and file structure and then creates the corresponding structure on your filesystem.

Define the Structure

Create a file named myapp.tree:

src/
    style.css
    app.js
    index.html

This will create a src folder with three files: index.html, style.css, and app.js.

Generate the Structure

To generate the structure, Run:

maketree myapp.tree

It will ask for confirmation with a graphical representation of the structure.

.
└─── src/
│   ├─── app.js
│   ├─── index.html
│   └─── style.css
Create this structure? (y/N):

Output:

1 directory and 3 files have been created.

By default, maketree creates the structure in the current directory.

Syntax for Writing a `.tree` File

To ensure correctness, follow these simple points:

  1. Directories must end with /
  2. Indentation must be exactly 4 spaces (other indentations may cause unexpected results)
  3. File and directory names must be valid according to your OS
  4. Comments start with // (inline comments are not supported)

Example:

myapp.tree

// This is a comment, and is ignored by maketree.
node_modules/
public/
    favicon.ico
    index.html
    robots.txt
src/
    index.css
    index.js
.gitignore
package.json
README.md

Now, run:

maketree myapp.tree

Output: (After confirming)

3 directories and 8 files have been created.

Specifying a Destination Folder

You can specify a destination folder instead of creating the structure in the current directory.

maketree myapp.tree myapp/

It will throw an error if myapp/ does not exist.

Error: destination path 'myapp' does not exist.

Use --create-dst or -cd flag, maketree then creates the destination directory if it doesn't exists.

maketree myapp.tree myapp/ --create-dst

Output:

3 directories and 8 files have been created.

Handling Existing Files

If you run maketree again in the same directory without deleting files, you’ll see an error:

maketree myapp.tree myapp

Output:

Error: Found 8 existing files, cannot proceed. (try --skip or --overwrite)

By default, maketree does not overwrite or skip existing files.

Overwrite Existing Files

Use the --overwrite or -o flag to overwrite existing files:

maketree myapp.tree myapp --overwrite

Output:

0 directories and 8 files have been created.

Skip Existing Files

Use the --skip or -s flag to keep existing files but create missing ones:

maketree myapp.tree myapp --skip

Output: (After deleting 3 files)

0 directories and 3 files have been created.

Extracting the Structure

You can also extract an already created project structure using -et or --extract-tree flag following the directory path of structure:

maketree --extract-tree myapp/

Output:

Tree has been extracted into 'myapp_1.tree'

Notice it created myapp_1.tree, because there was a myapp.tree already in the current directory.

Contents of myapp_1.tree file:

myapp/
    .gitignore
    package.json
    README.md
    node_modules/
    public/
        favicon.ico
        index.html
        robots.txt
    src/
        index.css
        index.js

Now this .tree file can be used whenever you want to create a similar project structure.

Preview the Structure

Use --graphical or -g to visualize the myapp.tree file:

maketree myapp.tree -g

Output:

.
├─── node_modules/
├─── public/
│   ├─── favicon.ico
│   ├─── index.html
│   └─── robots.txt
├─── src/
│   ├─── index.css
│   └─── index.js
├─── .gitignore
├─── package.json
└─── README.md

It is also shown before you create a structure for confirmation.

Avoid Confirming:

By default, maketree confirms before creating the structure. But this can sometimes be anoyying. Use --no-confirm or -nC flag to create the structure without confirming. (Notice the C is capital in -nC)

maketree myapp.tree myapp --no-confirm

Avoid Color Output:

By default, maketree uses ANSI escape codes to color the output.

maketree myapp.tree myapp/

If you're seeing something like this:

←[1m←[3m←[92msrc/←[0m
←[90m├───←[0m ←[1m←[3m←[92mnode_modules/←[0m
←[90m├───←[0m ←[1m←[3m←[92mpublic/←[0m
←[90m│   ←[0m←[90m├───←[0m favicon.ico
←[90m│   ←[0m←[90m├───←[0m index.html
←[90m│   ←[0m←[90m└───←[0m robots.txt
←[90m├───←[0m ←[1m←[3m←[92msrc/←[0m
←[90m│   ←[0m←[90m├───←[0m index.css
←[90m│   ←[0m←[90m└───←[0m index.js
←[90m├───←[0m .gitignore
←[90m├───←[0m package.json
←[90m└───←[0m README.md
←[95mCreate this structure? (y/N): ←[0m

Then your terminal doesn't support ANSI escape codes by default. (there are workarounds but they require extra python dependencies).

You will have to disable colors using --no-color or -nc flag.

maketree myapp.tree myapp/ --no-color

This will disable colors and you'll see normal text again.

Summary

Feature Command Example
Create structure maketree myapp.tree
Set destination maketree myapp.tree myapp -cd
Overwrite files maketree myapp.tree myapp -o
Skip existing maketree myapp.tree myapp -s
Extract structure maketree -et myapp/
Graphical preview maketree myapp.tree -g
Avoid Confirm maketree myapp.tree myapp -nC
Avoid Colors maketree myapp.tree myapp -nc

🖥️ Compatibility

OS Support

Maketree is compatible with the following operating systems:

OS Compatibility
Linux ✅ Supported
macOS ✅ Supported
Windows ✅ Supported

Python Version Support

Maketree works with Python 3.8 and later, ensuring compatibility with the latest Python releases.

Python Version Compatibility
3.8 ✅ Supported
3.9 ✅ Supported
3.10 ✅ Supported
3.11 ✅ Supported
3.12 ✅ Supported
3.13 ✅ Supported (Latest)

❓ FAQ

What is Maketree?

Maketree is a command-line tool that helps developers quickly generate a predefined folder and file structures for your projects. It eliminates the need to manually create directories and files, allowing developers to start coding right away with a well-organized project structure.

Do I have to be a Software Developer to use Maketree?

No, you can be anyone. You can be a lawyer, student, or heck even Yavascript programmer.

Why should I use Maketree?

If you frequently create CLI applications, Maketree saves you time by setting up a standardized project structure instantly. It follows best practices and helps you maintain consistency across different projects.

How do I install Maketree?

You can install Maketree via pip. (for python developers)

pip install maketree

Or download the executable for your OS from Releases page.

How do I use Maketree to generate a project structure?

Simply create a file like anything.tree and define your project structure in it:

anything.tree

src/
    app.js
    index.html
    style.css

then run the following command:

maketree anything.tree

This will create the files and folders you specified in anything.tree file.

What should I do if I find a bug?

If you encounter a bug, please open an issue on GitHub with details about the problem. Be sure to include:

  • A description of the issue
  • Steps to reproduce
  • Expected vs. actual behavior
  • Any error messages you received

How do I uninstall Maketree?

To uninstall Maketree (installed via pip), Run:

pip uninstall maketree

🤝 Contributing

Contributions to Maketree are welcome and highly appreciated. However, before you jump right into it, i would like you to review Contribution Guidelines to make sure you have a smooth experience contributing to Maketree.

Metadata

Release files for maketree 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for maketree 1.2.0
File Size Uploaded
maketree-1.2.0.tar.gz 29.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for maketree 1.2.0
File Interpreter ABI Platform
maketree-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 58.1 kB

Release files / maketree-1.2.0.tar.gz

Download URL maketree-1.2.0.tar.gz
Size 29.1 kB
Tags Source
SHA-256 checksum
How to use checksums
91425ba710e796c35862cb1c20f81719a638e5ce23507f8e14be6c2277609444
BLAKE2b-256 checksum
How to use checksums
283d4c44f600e9df0981b46541f9e805b116d4c8f3e76d1a1663b50280e4d503
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.1

Release files / maketree-1.2.0-py3-none-any.whl

Download URL maketree-1.2.0-py3-none-any.whl
Size 29.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6e56e65f4cb64f37a1a5c48a79d36a344d907609e92cfb37c00cf843edd37f92
BLAKE2b-256 checksum
How to use checksums
abd24e02d318d6ebe1df517106d84f3cc1181f9621548a5f88bdb37ce87cf063
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.1

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page