
# IDEs

Wails aims to provide a great development experience. To that aim, we now support generating IDE specific configuration
to provide smoother project setup.

Currently, we support [Visual Studio Code](https://code.visualstudio.com/) but aim to support other IDEs such as Goland.

## Visual Studio Code

<p className="text--center">
    <img src="/img/vscode.png" style={{"width": "75%"}}></img>
</p>

When generating a project using the `-ide vscode` flags, IDE files will be created alongside the other project files.
These files are placed into the `.vscode` directory and provide the correct configuration for debugging your application.

The 2 files generated are `tasks.json` and `launch.json`. Below are the files generated for the default vanilla project:

```json title="tasks.json"
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "command": "go",
            "args": ["build", "-tags", "dev", "-gcflags", "all=-N -l", "-o", "build/bin/myproject.exe"]
        },
    ]
}
```

```json title="launch.json"
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Wails: Debug myproject",
            "type": "go",
            "request": "launch",
            "mode": "exec",
            "program": "${workspaceFolder}/build/bin/myproject.exe",
            "preLaunchTask": "build",
            "cwd": "${workspaceFolder}",
            "env": {}
        },
    ]
}
```

### Configuring the install and build steps

The `tasks.json` file is simple for the default project as there is no `npm install` or `npm run build` step needed.
For projects that have a frontend build step, such as the svelte template, we would need to edit `tasks.json` to
add the install and build steps:

```json title="tasks.json"
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "npm install",
            "type": "npm",
            "script": "install",
            "options": {
                "cwd": "${workspaceFolder}/frontend"
            },
            "presentation": {
              "clear": true,
              "panel": "shared",
              "showReuseMessage": false
            },
            "problemMatcher": []
        },
        {
            "label": "npm run build",
            "type": "npm",
            "script": "build",
            "options": {
                "cwd": "${workspaceFolder}/frontend"
            },
            "presentation": {
              "clear": true,
              "panel": "shared",
              "showReuseMessage": false
            },
            "problemMatcher": []
        },
        {
            "label": "build",
            "type": "shell",
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "command": "go",
            "args": ["build", "-tags", "dev", "-gcflags", "all=-N -l", "-o", "build/bin/vscode.exe"],
            "dependsOn":[
                "npm install",
                "npm run build"
            ]

        },
    ]
}
```

:::info Future Enhancement

In the future, we hope to generate a `tasks.json` that includes the install and build steps automatically.

:::