# Development {#development}


If you want to contribute to the development of Firefly III, first of all: thank you!

Please read the [contribution rules](https://sourcey-firefly.pages.dev/explanation/support/index.md) and please also read about [Firefly III's architecture](https://sourcey-firefly.pages.dev/explanation/more-information/architecture/index.md).


## Languages {#languages}



### Firefly III {#firefly-iii}


- Firefly III is written in PHP %PHPVERSION.
- The current, v3-layout uses Blade (PHP) and AlpineJS. Several parts of this layout still use vanilla JS


### Data Importer {#data-importer}


- The Data Importer is written in PHP %PHPVERSION
- The layout uses Blade templates and AlpineJS.


## Development environment {#development-environment}


For PHP, you're on your own. Use [Laravel Homestead](https://laravel.com/docs/11.x/homestead) or [Vagrant](https://www.vagrantup.com/) to set up a VM, or use a custom setup with Apache or nginx. Personally, I use a custom-built Vagrant vm.


## Code structure {#code-structure}


This chapter details the code structure, so you know where to start.


### Frontend {#frontend}


Firefly III features two workspaces, detailed in `package.json`. Here you also find references to where the sources are, and the `package.json` details the commands you can run.

The data importer does not feature multiple layouts, but it does have a workspace reference in the `package.json`-file. There is only one workspace (only the `v2`-layout is used) and the sources are listed there. 


### Backend {#backend}


The code structure for the backend is explained on the [architecture](https://sourcey-firefly.pages.dev/explanation/more-information/architecture/index.md) page. The data importer has a similar structure. 


### API {#api}


Firefly III has an API. The code is in the `/app/Api`-directory. The routes and structure of the API are listed in `routes/api.php`. 


## Building Firefly III {#building-firefly-iii}


To build the frontend of Firefly III, run the following commands.

```text
npm install
npm run build --workspace=v3
```

To install the dependencies, run:

```text
composer update --no-dev --no-scripts --no-plugins
```
