## Getting started Let's get started and create our first dart file with `lib/main.dart` file. Then we import the framework with: ```dart import 'package:objd/core.dart'; ``` Then we need to create a new datapack project: ```dart void main(List<String> args){ createProject( Project( name:"This is going to be the generated folder name", target:"./", // path for where to generate the project generate: CustomWidget() // The starting point of generation ), args ); } ``` Next of we need to build this custom Widget: ```dart class CustomWidget extends Widget { @override Widget generate(Context context){ } } ``` To get more details on why we build it like that, check out the [Widget]() documentation. Like we can see the generate method, which is called on build, has to return another Widget, in our case an instance of the Pack class. ```dart Widget generate(Context context){ return Pack( name:"mypack", main: File( // optional path: 'main' ) ) } ``` What we are doing right now is to generate a new subpack with a name(This will be the namespace of your functions later) and a main file(runs every tick) with the name "main.mcfunction". You can run the project already and the result should be a pack with an empty main.mcfunction file. So lets add some functionality to our project in our main file. We can use the Log Widget to display a message to the player. ```dart main: File( path: 'main', child: Log('Hello World') ) ``` But how to add a list of Actions then? Well there's also an Widget for that: `For.of` ```dart child: For.of(List<Widget>[ Log('Hello World'), Command('setblock 0 0 0 air') ]) ``` So now we have a [List](https://www.dartlang.org/guides/language/language-tour#lists) of Widget, so we can use as many as we want