tackle is an experimental DSL built as a fork of cookiecutter written in documents such as json, yaml, or toml with primitives of a general purpose programming language including functions, structs, methods, and types with rich control flow. It turns a config file into self documenting CLI in a concise declarative syntax.
Core to the language is the notion of a hook
which is a pydantic BaseModel under the hood. These hooks can be created, called, or combined in documents and / or python with inheritance and composition. Tackle ships with over 100 native hooks to perform rudimentary tasks from prompting users for CLI inputs, reading / manipulating / writing data to and from files, to rendering templates for code generation / schema translations.
Major syntax changes are coming soon and thus using the language is discouraged without reaching out first via discord or leaving issues in this repo. A formal spec is under active development and will be made public Q3/Q4 2024. A private version of this repo is under active development and will be merged in as soon as the spec becomes public.
=< v0.6.0
greeter(target str = 'world')<-:
print->: Hello {{target}}
Future
greeter(target str = 'world')->:
print()<-: Hello {{target}}
When the syntax is stable, this project will be formally released. Please reach out via discord if you want to talk directly about it in the meantime.
Everyone interacting in the tackle project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [PyPA Code of Conduct](https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md.
Special thanks to audreyfeldroy for creating cookiecutter, the basis for this project. Would not have been possible without it and other core dependencies like pydantic and jinja.