# Contributing ## Directory structure ``` frontend/ public/ ; Static files src/ ; React/Typescript sourcecode backend/ compilers/ ; Compiler binaries and configuration coreapp/ ; API Django app migrations/ ; Database migrations (generated by Django) decompme/ ; Main Django app libraries/ ; Library headers .env ; Default configuration .env.local ; Local configuration overrides (not checked-in) ``` ## Setup We use [Docker](https://docker.com) for both development and production environments — it’s the simplest way to get everything up and running. See [DOCKER.md](DOCKER.md) for detailed setup instructions. We officially support running decomp.me on Linux (we use Ubuntu 24.04 LTS) on the `amd64` architecture. Running decomp.me natively on Windows or macOS is not supported and may result in unpredictable behavior or missing functionality. The instructions below assume you are using a Linux system on `x86_64` hardware. ### Prerequisites Dependencies: - Python >=3.10 (Production uses 3.12) - Node.js >=14 <=24 (Production uses 24) - [Yarn](https://yarnpkg.com/getting-started/install) - [uv](https://docs.astral.sh/uv/getting-started/installation/) --- Create a file to hold environment variables: ```shell touch .env.local ``` ### Backend ```shell cd backend ``` * Install Python dependencies with [uv](https://docs.astral.sh/uv/getting-started/installation/) ```shell uv sync ``` - Install compilers ```shell uv run python compilers/download.py ``` - Install libraries ```shell uv run python libraries/download.py ``` - Set up the database ```shell uv run python manage.py migrate ``` - Start the API server ```shell uv run python manage.py runserver ``` --- ### Frontend ```shell cd frontend ``` - Install dependencies ```shell yarn ``` - Start the development webserver ```shell yarn dev ``` - Access the site via [http://localhost:8080](http://localhost:8080) ### Optional steps - [Configure vscode for development](VSCODE.md) - [Configure wine for Windows compiler on Linux](WINE.md) - [Set up GitHub authentication](GITHUB.md) - [Install nsjail to run the compiler sandbox](SANDBOX.md) - [Configure an nginx reverse proxy](NGINX.md) - Download [wibo](https://github.com/decompals/WiBo/releases/latest) and add it to your system path (for running Windows compilers from Linux) ## Notes ### Updating the database If you modify any database models (`models.py`), you'll need to run the following to update the database: ```shell uv run python manage.py makemigrations uv run python manage.py migrate ``` ### Running tests To ensure everything is working properly, you can run the unit tests in the backend folder. ```shell uv run python manage.py test ``` ### Frontend styling We use Tailwind CSS with Radix UI colors. Each color is on a scale from 1 to 12 (inclusive), each with [a well-defined meaning](https://www.radix-ui.com/docs/colors/palette-composition/understanding-the-scale). ## Linting - Check frontend ```shell cd frontend yarn lint ``` - Autofix frontend ```shell cd frontend yarn lint --fix ``` - Check backend ```shell cd backend uv run mypy uv run ruff check . uv run ruff format . ```