Project types
In Coduva, each project consists of a folder, a name.test address, an Nginx virtual host, and optionally a database and an HTTPS certificate. The project record is stored in %APPDATA%\Coduva\coduva.sqlite; no separate Coduva configuration file is written to the project folder.
Types
| Type | How it is created | Database | Web root |
|---|---|---|---|
| Empty PHP | An index.php file with a folder and a welcome page | None | Project folder |
| WordPress | Turkish WordPress core, database, wp-config.php, admin account | Created | Project folder |
| Laravel | composer create-project laravel/laravel, MariaDB connection in .env, artisan migrate | Created | public |
| Added folder | An existing folder; the type is detected automatically | Not connected | Detected |
WordPress setup
- If MariaDB is not running, it is started.
- The latest Turkish (
tr_TR) release of WordPress is downloaded and verified with its SHA-1 value. - A database named after the project is created.
wp-config.phpis written with WP-CLI: userroot, empty password, server127.0.0.1:<MariaDB port>.- The installation is run with WP-CLI: the site title is the project name, the admin user is
admin, the email isadmin@<name>.test, and the password is a random 16-character string.
The admin password is shown only once, at the end of the setup, and is not saved anywhere. To log in later, use the Log in as admin button.
Laravel setup
- If MariaDB is not running, it is started.
composer create-project laravel/laravel <name>runs. An internet connection is required, and it can take several minutes. If virus scanning locks temporary files ("Permission denied"), Coduva tries once more.- A database named after the project is created.
- The following keys are set in the
.envfile:
APP_URL=http://<name>.test
DB_CONNECTION=mariadb
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=<name>
DB_USERNAME=root
DB_PASSWORD=php artisan migrate --forceruns.
The APP_URL and DB_PORT values are set accordingly if the project uses HTTPS or if the ports differ from the defaults.
Failed setup
If the setup fails at any step, Coduva rolls back the folder and database it created during this operation, so no half-finished project is left behind. The last lines of the error output appear in the setup log.
If the target folder for the setup already exists, it must be empty.
Name rules
The project name becomes the first part of the address.
- Lowercase letters (
a–z), digits and hyphens (-) - 1–63 characters
- Cannot start or end with a hyphen
- Reserved names cannot be used:
localhost,phpmyadmin,coduva,www - Two projects cannot have the same name
When you add a folder, the name is suggested from the folder name: Turkish letters are converted to their ASCII equivalents, and other characters become hyphens. Example: Müşteri Sitesi → musteri-sitesi.
The database name is derived from the project name, with hyphens converted to underscores: musteri-sitesi → musteri_sitesi.
Address
Each project's address is <name>.test. Coduva uses only the .test extension.
If the web server is not running on the default ports, the port is added to the address:
| Situation | Address |
|---|---|
| HTTP, port 80 | http://magaza.test/ |
| HTTP, port 8080 | http://magaza.test:8080/ |
| HTTPS, port 443 | https://magaza.test/ |
| HTTPS, port 8443 | https://magaza.test:8443/ |
For the address to work, the hosts file must contain the line 127.0.0.1 <name>.test. Coduva syncs the hosts file when a project is added or removed; this step requires UAC approval. If approval is not given, the project is still saved, and the step can be retried from the Local domains screen.
Type and web root detection
When you add a folder, the type is determined in this order:
| Condition | Type |
|---|---|
wp-config.php exists, or wp-load.php and the wp-includes\ folder exist together | WordPress |
An artisan file exists and laravel/framework appears in composer.json | Laravel |
| Any other case | PHP |
Web root (the root value in Nginx):
| Type | Web root |
|---|---|
| Laravel | <folder>\public |
PHP, if public\index.php exists | <folder>\public |
| PHP (other) and WordPress | <folder> |
The detected web root can be changed to another folder with the Change button on the Web root line of the project's General tab. Use this for applications whose entry file is in a different subfolder, such as web or htdocs.
Nginx is configured for all projects with a front controller setup: if a file is not found, the request is routed to index.php. Access to dot-prefixed files (for example .env or .git) is blocked, except for .well-known. .htaccess files are not read by Nginx.
Per-project settings
From the project's General tab:
| Setting | Options |
|---|---|
| PHP version | Default (Coduva's default PHP version) or any installed, supported version |
| Node.js version | Auto (.nvmrc / latest) or an installed version |
| Use HTTPS | When on, a local certificate is generated for the project and an HTTPS virtual host is added. The same switch is also listed in the project list on the Local HTTPS screen |
Each PHP version has its own FastCGI pool, so projects that use different PHP versions can run at the same time. When the PHP version changes, Nginx reloads without interruption.
With Auto Node selection, the project's .nvmrc file is checked first; if there is none, the engines.node field in package.json is checked. An installed Node that matches that major version is used. If neither exists, the latest installed Node is selected.
Removing a project
Remove project removes the project from Coduva:
- The Nginx virtual host and the
hostsline are removed. - The project certificate is deleted.
- The project's running processes (queue, scheduler, Vite) are stopped.
Project files and the database are not deleted. To delete the database, use the Delete button on the Database screen; delete the folder from Windows Explorer.
Default site
The C:\Coduva\www\localhost folder is served at http://localhost/. It is not a project and does not appear in the Projects list. The welcome page that opens is a summary of your local server:
| Section | Content |
|---|---|
| Top section | The Your local server is ready heading, with links to phpMyAdmin and phpinfo(). If MariaDB cannot be reached, the heading reads Web server is running, and you are advised to start the database from Coduva |
| Web server | Nginx version, HTTP and HTTPS ports |
| PHP | PHP version, FastCGI and OPcache status |
| Database | MariaDB version, connection address (127.0.0.1:<port>) and number of user databases |
| Projects | For each project: name, address (locked if HTTPS is on), type, PHP version and an Open button |
| PHP settings | memory_limit, upload_max_filesize, post_max_size, max_execution_time, display_errors, date.timezone, and OPcache and Xdebug status |
| Locations | Document root, This page, and the paths of php.ini and the PHP error log, each with a copy button |
| Loaded extensions | Extensions loaded by PHP; they can be filtered with the Search extensions box |
The page follows the light and dark theme automatically. The language is chosen from the browser language, Turkish or English, and can be changed with the link at the top right. You can edit the index.php file; Coduva does not overwrite a page you have edited. Details: Directories and files → Welcome page.