## 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 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
'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(
'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([
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
Whole code:
```dart
import 'package:objd/core.dart';
void main(List args){
createProject(
Project(
name:"This is going to be the generated folder name",
target:"./",
generate: CustomWidget()
),
args
);
}
class CustomWidget extends Widget {
@override
Widget generate(Context context){
return Pack(
name:"mypack",
main: File( // optional
'main',
child: For.of([
Log('Hello World'),
Command('setblock 0 0 0 air')
])
)
);
}
}
```