A lightweight DSL for scaffolding files and folders
Project description
🧱 Bytecraft
A human-readable DSL for scaffolding files and folders.
pip install bytecraft
Bytecraft lets you describe a project structure in plain, readable instructions and execute it with a single command — no Bash, no Python boilerplate, no mental overhead.
# bootstrap.bc
set-working-folder "my-app"
make-folder "src"
make-folder "src/utils"
make-folder "assets"
make-file "README.md" with "# my-app"
make-file "src/main.py" with "print('Hello, World!')"
make-file "src/utils/helper.py"
py -m bytecraft bootstrap.bc
[Bytecraft] Working folder set: my-app
[Bytecraft] Created folder: my-app/src
[Bytecraft] Created folder: my-app/src/utils
[Bytecraft] Created folder: my-app/assets
[Bytecraft] Created file: my-app/README.md
[Bytecraft] Created file: my-app/src/main.py
[Bytecraft] Created file: my-app/src/utils/helper.py
Installation
Requires Python 3.10+
pip install bytecraft
Commands
set-working-folder
Sets the base directory for all subsequent relative paths. Created automatically if it doesn't exist.
set-working-folder "my-project"
make-folder
Creates a directory and any missing parent directories. Does nothing if the folder already exists.
make-folder "src/utils"
make-file
Creates a file. Parent directories are created automatically. Overwrites if the file already exists.
# Empty file
make-file "src/__init__.py"
# With inline content
make-file "VERSION" with "1.0.0"
# With a multi-line block
make-file "README.md" with ---
# My Project
Some description here.
---
set
Defines a variable. Variables can be referenced anywhere using {{name}} syntax.
set project "my-app"
set version "1.0.0"
make-file "VERSION" with "{{version}}"
make-file "src/main.py" with "# {{project}} v{{version}}"
Variables also interpolate inside multi-line blocks:
set author "Sourasish Das"
make-file "README.md" with ---
# {{project}}
Maintained by {{author}}.
---
Comments
Lines starting with # are ignored.
# This is a comment
Forgiving Syntax
Bytecraft is intentionally forgiving. Quotes are optional — if they're missing, Bytecraft will try to recover and interpret your intent:
make-file hello.txt with Hello World
is treated the same as:
make-file "hello.txt" with "Hello World"
Unknown commands print a warning and are skipped rather than crashing the whole script.
Full Example
# Project scaffold
set project "dashboard"
set author "Sourasish Das"
set version "0.1.0"
set-working-folder "{{project}}"
make-folder "src"
make-folder "src/components"
make-folder "src/utils"
make-folder "tests"
make-folder "assets"
make-file "VERSION" with "{{version}}"
make-file "src/main.py" with "# Entry point for {{project}}"
make-file "README.md" with ---
# {{project}}
Version: {{version}}
Author: {{author}}
---
make-file "tests/test_main.py" with ---
import unittest
class TestMain(unittest.TestCase):
def test_placeholder(self):
self.assertTrue(True)
---
Limitations (v0.1.1)
- No loops or conditionals
- No append mode
- No imports or includes
- No strict mode
These are planned for future versions.
Roadmap
-
append-filecommand - Loops and conditionals
- Strict mode
- Import / include system
- Template support
License
Server-Lab Open-Control License (SOCL) 1.0
Copyright (c) 2025 Sourasish Das
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bytecraft-0.1.2.tar.gz.
File metadata
- Download URL: bytecraft-0.1.2.tar.gz
- Upload date:
- Size: 7.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fae89fb0f665a41917d0baedf10d6c7df3bb703263858046f790e3c45eea557c
|
|
| MD5 |
36af0eed40b3254394bd38636f621a72
|
|
| BLAKE2b-256 |
5258894bfcfc2914aad1c73aa01e44cb1439e4502ba785d20b402e6f9f59e35c
|
File details
Details for the file bytecraft-0.1.2-py3-none-any.whl.
File metadata
- Download URL: bytecraft-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74e768db1dacd62ed862733de93072e7de27693afb6b7a963f3f43e7b449400e
|
|
| MD5 |
f4fecc8e21c36cc4a3d42dc284d05280
|
|
| BLAKE2b-256 |
595d57451a80cd58103722f5ddfc1f87fd4f065f68f706d5f09da2201164e534
|