- what are project applications and how they’re structured
Webiny uses the term project application (or just application) in order to depict a specific logical segment of your project.
Project applications are higher-level organizational units formed from one or more packages that, as the name itself suggests, form applications. Every application, essentially, consists of two pieces:
- Your application code, which includes one or more Node.js packages. These packages can be anything from a simple GraphQL API or a single Lambda function to a complete React application.
- Cloud infrastructure that hosts your code or which is being utilized by it, which is also described and deployed using code. For that matter, by default, Webiny relies on a solution called Pulumi, which is a modern infrastructure as code solution.
Learn more about the fundamental organizational units - project applications and packages, by visiting the Project Applications and Packages page.
Moving on, every application has its own folder. For example, in a newly created Webiny project, by default, you end up with three applications.
The api (
./api), which represents your project’s (GraphQL) API, admin (
./apps/admin), and finally, the website (
./apps/website), which is your public website.
These applications are shown in the following directory tree:
. ├── api │ ├── pulumi │ ├── Pulumi.yaml │ ├── Pulumi.dev.yaml │ ├── code │ └── index.ts ├── apps │ ├── admin │ │ ├── pulumi │ │ ├── Pulumi.yaml │ │ ├── Pulumi.dev.yaml │ │ ├── code │ │ └── index.ts │ └── website │ ├── pulumi │ ├── Pulumi.dev.yaml │ ├── Pulumi.yaml │ ├── code │ └── index.ts └── (...)
If we take a look at the directory tree above, we can notice a consistent files and folders structure.
As mentioned, every application consists of your code and cloud infrastructure (also described via code).
code folder is where all of the application’s code is located. In the case of the
./api/code), it contains several packages that form the GraphQL API. In case of
./apps/website/code), it contains React applications.
On the other hand, the
pulumi folder and the
index.ts files contain Pulumi code that define your cloud infrastructure. Again, in the case of the
api application, these define several cloud infrastructure resources like Lambda functions, an API Gateway, a DynamoDB table, and so on. The
website applications contain fewer cloud resources, as they serve a bit simple (but still important) purpose.
To learn more about Pulumi and relevant files mentioned above, check the Infrastructure as code with Pulumi key topic.
To learn more about the necessary cloud infrastructure resources Webiny is relying on, check out the Cloud Infrastructure page.
Every Webiny project can have any number of applications. This depends on the project requirements that are in front of you.
Yes, and in most cases, they are working together.