Projects
A project is a folder on your computer. It can use any stack, for example Laravel, WordPress, .NET, Node.js, Go, Python, Rust or Ruby. All projects show in one list, and all projects use the same tools.
Some features need DDEV, for example the start and stop controls, the status dot, the Logs tab and the Database card. These features show only for projects that run in DDEV. See DDEV Projects.
A project can also be one part of a monorepo. For example, a DDEV web project can have a Flutter mobile app in a different folder. You can add that folder as a different project.
Create a project
- Click New Project in the top bar.
- In step 1, What are you building?, select a stack and fill in Description, Name and Folder.
- Click Next. In step 2, How do you run it?, select a run method. Each stack shows only the methods that apply to it.
- Click Create Project.
Stacks, templates and run methods show their logos. For a stack with templates, select one template. Other PHP has a list of project types.
| Stack | Template | Run methods |
|---|---|---|
| Laravel | DDEV, Laravel Sail, Docker Compose, Local PHP, Other | |
| Symfony, WordPress, Drupal, Other PHP | Drupal: Drupal 11, Drupal 10. Other PHP: a DDEV project type | DDEV, Docker Compose, Local PHP, Other |
| Node.js | React, Vue, Svelte, Vanilla, Next.js, Nuxt | Package manager, Docker Compose, Other |
| .NET | Web API, MVC, Blazor, Console, Class library | .NET CLI, Docker Compose, Other |
| Python | Python, Other | |
| Go | Go, Other | |
| Rust | Binary, Library | Cargo, Other |
| Clone a repository, Empty folder | DDEV, Docker Compose, Other |
Run methods
Each run method has setup commands and a run command. Step 2 shows them before you create the project. The setup commands run in the project folder.
| Run method | Setup commands | Run command |
|---|---|---|
| DDEV | DDEV configuration and the install commands of the stack. See DDEV Projects. | Use the start and stop controls of the project |
| Laravel Sail | composer create-project laravel/laravel ., composer require laravel/sail --dev, php artisan sail:install --no-interaction | ./vendor/bin/sail up |
| Docker Compose | The commands of the stack template | docker compose up |
| Local PHP | The commands of the stack template | Laravel: php artisan serve. Other PHP stacks: php -S localhost:8000 with the web root of the stack |
| Package manager | <manager> create <template> and <manager> install | <manager> run dev |
| .NET CLI | dotnet new <template> | dotnet watch. Console: dotnet run. Class library: dotnet build |
| Python | python3 -m venv .venv | .venv/bin/python main.py |
| Go | go mod init <name> | go run . |
| Cargo | cargo init | cargo run |
| Other | The commands of the stack template | The command that you type |
The stack template commands are: composer create-project (Laravel, Symfony, Drupal), wp core download (WordPress), and git clone (Clone a repository). Other PHP and Empty folder have no commands.
Local PHP uses the PHP on your computer, for example from Laravel Herd.
For Node.js, select the Package manager in step 2: npm, pnpm, Yarn or Bun. Step 2 shows only the package managers that are installed.
The run command shows as read-only text. To change it, click the edit icon. For Docker Compose, Python and Other, the command field is open when you select the method. For Other, you can leave it empty. For Docker Compose, add a compose.yaml to the project folder if the project does not have one.
The app saves the run method and the run command with the project. The Run card on the Overview tab shows the run command first.
Tool check
The app checks that the tools of the run method are installed, for example ddev, docker, php, composer, npm or dotnet. Each run method shows the installed version of its main tool. The app gets the version from the tool, for example dotnet --list-sdks or docker --version. If a tool is missing, step 2 shows a notice with an install link and Check again, and Create Project is disabled.
The setup commands need an empty or new folder. Empty folder and Python can use a folder that has files.
The app adds the project to the project list with its stack, then runs the commands. One notification shows the progress. If a command fails, the notification has Show output and Open folder.
Add a project
Drop the folder anywhere in the app window, or click Import in the top bar. See Import Projects.
All projects show in one list on the Projects page, sorted by name. Each project has one type badge, for example Laravel, WordPress, .NET, Node.js or Go. A DDEV project shows a status dot with its running or stopped status. Other projects show a hollow status dot.
Stack detection
The app finds the stack from the files in the project folder. If no file matches, it also looks in the direct subfolders (one level only), for example src/Shop.Api.csproj or backend/go.mod.
| Stack | Files |
|---|---|
| .NET | *.sln, *.slnx, *.csproj, *.fsproj, *.vbproj, global.json |
| Laravel | artisan |
| Symfony | symfony.lock |
| WordPress | wp-config.php |
| PHP | composer.json |
| Ruby | Gemfile |
| Python | pyproject.toml, requirements.txt, Pipfile, manage.py |
| Go | go.mod |
| Rust | Cargo.toml |
| Node.js | package.json |
The app saves the stack when you add the project. The type badge shows the stack. For a project that you added before this feature, the app finds the stack when it loads the projects. If the app cannot find the stack, it tries again later.
Projects sidebar
The Projects page has a list of projects at the left. To collapse or expand it, click the panel icon or press ⌘+B (Ctrl+B on Windows and Linux). When the list is collapsed, each project shows a short monogram. Each monogram is unique.
Hover a project to see its details, for example the type, the versions, the URL, the Git state and the path.
Available tabs
A project that does not run in DDEV has these tabs. To go to a tab, press ⌘ (Ctrl on Windows and Linux) and the tab number.
| Tab | Details |
|---|---|
| Overview | Name, Type, Runs with, Path, GitHub repository, the Remote server card, the Security card, the Services card (Compose projects) and the Run card |
| Terminal | Terminal |
| Remote SSH | Remote SSH |
| Files | Files |
| Git | Sub-tabs Changes and History (Git Changes), Issues and Actions (GitHub) |
| Scratchpad | Notes and snippets. The code runner is available in DDEV projects. |
| Health | Sub-tabs Security (Dependency Security) and Uptime (Uptime Monitoring) |
If the app cannot find the stack, Type on the Overview tab tells you so.
Recipes at the right end of the tab bar opens the Recipes panel. It shows only the recipes that apply to the project.
The Logs tab and the Database card are for DDEV projects, which also get a DDEV Services card. See DDEV Projects. Docker Compose and Sail projects get their own Services card.
To open the project in your editor, click IDE at the top of the project page. Set the editor command in Configuration.
Run commands
The Run card on the Overview tab shows the run command that you selected when you created the project, with a Run button. Below it, the card shows the commands that the project defines. Click a command to run it in the project folder, in a headless terminal. Hover a command to see the full command line.
| Source | Commands |
|---|---|
.NET solution (*.sln, *.slnx in the project folder) | dotnet build <solution>, and dotnet test <solution> when the solution has a test project |
| .NET project that runs (web, worker, console, Aspire host) | dotnet run --project <path> and dotnet watch --project <path>. With a solution, the card uses the projects in the solution. Without a solution, the card also shows dotnet test and dotnet build for each project. |
package.json | <manager> run <script> for each script. The manager comes from the packageManager field, or else from the lockfile: bun.lock/bun.lockb (bun), pnpm-lock.yaml (pnpm), yarn.lock (yarn), package-lock.json (npm). Install hooks and pre/post hooks of other scripts do not show. |
composer.json | composer run <script> for each script. Event hooks such as post-autoload-dump do not show. |
Makefile | make <target> for each top-level target. Special targets (.PHONY) and pattern rules (%.o) do not show. A ## comment after the target becomes its description. |
go.mod | go run . (when main.go is in the project folder), go run ./cmd/<name> for each cmd/<name>/main.go, go test ./..., go build ./... |
Cargo.toml | cargo run (when src/main.rs or a [[bin]] exists), cargo test, cargo build |
When the project has more than one source, tabs at the top of the card select the source.
The app reads the files only when the card opens. It looks for .NET projects in the subfolders of the project and skips folders such as node_modules, bin, obj, vendor and hidden folders. It keeps the result and reads a file again only when its modification time changes.
Edit project details
On the Overview tab, hover a value and click the edit icon. You can change the name and the GitHub repository URL. The Git tab finds the GitHub repository from the Git remote. Set a GitHub URL to use a different repository.
When you rename the project, it stays open with the new name, on the same tab. The terminal sessions of the old name close. The Scratchpad notes move to the new name.
Remove a project
- Go to the Projects page.
- Click the delete icon on the project card.
This removes the project from DevWorkspace Pro only. Your files stay on disk. The app closes the terminal sessions of the project and deletes its Scratchpad notes.