
Каждый раз, когда я начинаю новый проект, происходит один и тот же ритуал: создать папку app, в ней api, services, utils, накидать main.py, requirements.txt, .gitignore, README... И так по кругу. Десятки раз.
В какой-то момент я понял, что трачу на это реально ощутимое время — и написал crt: консольную утилиту, которая умеет:
создавать файлы — любое количество, одной командой;
создавать папки — в том числе вложенные структуры любой глубины;
создавать целые проекты по шаблонам — как встроенным, так и своим;
Хочу рассказать, что получилось.
Идея простая: одна строка — целая структура
Вместо того чтобы кликать "New Folder" пятнадцать раз подряд, вы пишете что-то вроде:
crt "app<base.py:control.py>:backends<database<models.py>:base.py>"
И получаете:
your_folder/ │ ├── app/ │ ├── base.py │ └── control.py │ └── backends/ ├── database/ │ └── models.py └── base.py
Синтаксис минималистичный:
:— разделитель файлов и папок в списке;<>— обозначение папки, внутрь которой можно вложить что угодно, хоть ещё папки.
То есть вся файловая структура описывается одной строкой, без единого клика мышкой.
Быстрое создание файлов с расширениями
Если нужно просто накидать пачку файлов — необязательно повторять расширение для каждого:
crt main:test py
your_folder/ │ ├── main.py └── test.py
Удобно, когда создаёшь сразу несколько однотипных файлов.
А если это не разовая задача, а рутина? Шаблоны
Вот тут начинается самое интересное. crt умеет не просто создавать файлы, а разворачивать целые проекты по шаблонам — как своим, так и встроенным.
Посмотреть, что уже есть под рукой:
crt -v ---> Available templates: Default: • postgres (12 files) • fastapi (24 files) • react (71 files) • tg_bot (19 files) • tg_bot_full (96 files) • gitignore (py, js, java, c, c++, go, c#)
Применить шаблон — одна команда:
crt -t fastapi -f
Флаг -f означает, что файлы будут не пустыми файлами, а сразу с заполненным базовым содержимым — рабочий скелет проекта, готовый к правке, а не куча пустых файлов, которые ещё предстоит наполнять.

Шаблоны можно не только использовать, но и создавать из своих же проектов. Понравилась структура вашего FastAPI или связки Telegram-бота? Превратите её в шаблон одной командой:
crt -t my_template -a -p my_project
Флаг -a означает append, что шаблон нужно добавить, а флаг -p означает path - путь где храниться проект, можно не указывать тогда crt возьмёт текущую директорию, где открыт терминал.
Дальше этот шаблон можно переименовать:
crt -t my_template -rn my_temp
Или удалить, если он больше не нужен:
crt -t my_template -rm
Игнорирование лишнего через .crtignore
Если в шаблоне есть файлы и папки, которые тащить не нужно (виртуальные окружения, кэши, логи), можно завести .crtignore в корне проекта — по аналогии с .gitignore:
__pycache__ .venv venv .git .env .DS_Store Thumbs.db .crtignore
.gitignore одной командой
Отдельная приятная мелочь — генерация .gitignore под конкретный стек:
crt -t gitignore py crt -t gitignore js crt -t gitignore go
Поддерживаются Python, JavaScript/Node.js, Java, C, C++, C# и Go. Мелочь, а неприятную рутину закрывает полностью.
Установка
Всё как обычно:
pip install crtfiles
И сразу можно пользоваться — никакой дополнительной настройки не требуется.
Ссылки на проект:
Кому это может пригодиться
Тем, кто часто запускает новые проекты и устал вручную копировать структуру папок и файлы.
Тем, у кого есть своя «коронная» архитектура, и кто хочет разворачивать её одной командой.
Что дальше
Я продолжаю дорабатывать инструмент и открыт к любым идеям и репортам о багах.
Также в планах — возможность развернуть свой сервер, куда можно будет загружать собственные шаблоны проектов и скачивать шаблоны, которые выложили другие пользователи.
Отдельно: если у вас есть качественный шаблон проекта, которым не жалко поделиться, — с радостью добавлю его в список встроенных. Просто пришлите ссылку на GitHub.
Комментарии (2)

danilovmy
05.08.2026 06:51Эээ. Без pip: Github project Template. С pip: Django start-project - - template project
clearmodern
Бро, а не пробовал просто агента попросить заинитить проект?