Feature Status
Shipped, partial, and planned features.
DevStackBox - Feature Status
THE single source of truth for what is built, what is in progress, and what is planned.
Update this file every time a feature changes status. Do not maintain feature status in README.md, TODO.md, or CHANGELOG.md separately - those should reference this file.
Last Updated: May 2026
Current Version: v0.1.7-dev
Roadmap Phase Status
| Phase | Status | Notes |
|---|---|---|
| Phase 1 - Core Stability | DONE | Items 1.1-1.8 complete. cargo check is clean; current toolchain clippy follow-up is tracked in advanced/troubleshooting ISSUE-017. |
| Phase 1.8 - User Data Root | DONE | Runtime data now lives in %LOCALAPPDATA%\DevStackBox\ (override via DEVSTACKBOX_DATA_DIR). |
| Phase 2 - Modularize Backend | DONE | lib.rs reduced to ~150 lines. Commands split into commands/{mysql,apache,php,config,logs,system,tray}.rs; helpers in utils/{paths,process}.rs; shared types in types.rs; default web templates in src-tauri/templates/. Build check clean. |
Status Key
| Symbol | Meaning |
|---|---|
| DONE | Fully working and tested |
| PARTIAL | Code exists but has bugs or incomplete functionality |
| STUB | UI exists but backend does nothing real |
| PLANNED | Not started, on the roadmap |
Core Infrastructure
| Feature | Status | Notes |
|---|---|---|
| Tauri 2 setup | DONE | v2.1, tray-icon, updater plugins |
| Vite + React 18 | DONE | |
| Tailwind CSS | DONE | v3, compiled to ~27KB |
| shadcn/ui | DONE | Components in src/components/ui/ |
| Framer Motion | DONE | v11 |
| i18next (EN + HI) | DONE | locales/en.json and locales/hi.json |
| Dark / Light mode | DONE | Tailwind + shadcn theme system |
| safeInvoke() wrapper | DONE | Browser mode fallback works |
| MSI installer | DONE | 288.9 MB |
| NSIS installer | DONE | 147.7 MB |
| GitHub Actions CI/CD | DONE | Builds on push to main |
| App version constant | DONE | src/lib/version.ts |
| Shared TypeScript types | DONE | src/types/services.ts |
| TAURI_COMMANDS constants | DONE | src/lib/commands.ts grouped (system/services/php/config/tray/terminal/security/ssl); zero hardcoded command strings remain in frontend components |
| Bundled stack (Apache+PHP+DB) | DONE | All core binaries ship in installer - no internet required |
| First-launch onboarding screen | DONE | Welcome dialog with one-click "Start all services"; remembered in localStorage |
Service Management
| Feature | Status | Notes |
|---|---|---|
| MySQL start / stop | DONE | start_mysql, stop_mysql commands work |
| MySQL status check | DONE | Polls process list for mysqld.exe |
| MySQL version detect | DONE | Reads mysqld --version |
| MySQL data init | DONE | Auto-initializes if data dir missing |
| MySQL config auto-create | DONE | Creates config/my.cnf if missing |
| Apache start / stop | DONE | start_apache, stop_apache commands work |
| Apache status check | DONE | Polls process list for httpd.exe |
| Apache config test | DONE | test_apache_config runs httpd -t |
| Apache config auto-create | DONE | Creates config/httpd.conf if missing |
| Apache 32-bit detection | DONE | Warns user if 32-bit Apache on 64-bit build |
| PHP status check | DONE | Checks php/current/php.exe first (active junction), falls back to php/8.3/php.exe; runs php --version to surface the actual version string |
| PHP as service start/stop | STUB | toggle_php returns true immediately |
| PHP CGI / FastCGI | DONE | ScriptAlias /php/ php/current/ + Action php-script in httpd.conf; php/current junction auto-follows active version; phpMyAdmin reuses same handler |
| PHP 8.4 CGI compatibility | DONE | patch_php_ini() disables deprecated session.sid_* directives, forces error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT and html_errors = Off to prevent CGI header corruption on PHP 8.4 |
| Bulk start all services | DONE | start_all_services Tauri command + Dashboard Start All button |
| Bulk stop all services | DONE | stop_all_services command + tray menu entry |
Service UI
| Feature | Status | Notes |
|---|---|---|
| ServiceManager component | DONE | Polls status every 5 seconds |
| ServiceCard component | DONE | Generic card for service display |
| StatusBadge component | DONE | Running/Stopped indicator |
| ServiceActions component | DONE | Start/Stop/Open buttons |
| MySQL service UI | DONE | mysql-service.tsx |
| Apache service UI | DONE | apache-service.tsx |
| PHP service UI | DONE | php-service.tsx |
| Services page | DONE | Start/stop works, log viewer with service tabs, bulk start/stop/restart all wired |
| Service card primary/overflow | DONE | Secondary actions live in a MoreVertical overflow menu (service-overflow-menu.tsx); Config items show filename right-aligned (httpd.conf / my.cnf / php.ini); cards keep Start/Stop + one Open visible |
| Service workspace (split panel) | DROPPED | Replaced by single-source-of-truth navigation: card overflow Logs routes to the Logs page (with the right tab pre-selected) and Config opens the shared Config editor. The duplicate inline workspace tabs were removed. |
| Dashboard page | DONE | Shows service overview and quick stats |
| Dashboard slim-down | DONE | Status row + Start All / Stop All / Open Services strip + ServiceManager compact + ErrorLogPreview; stat tiles and Quick Actions grid removed |
| Dashboard log preview | DONE | error-log-preview.tsx tails last lines of Apache/MySQL/PHP logs |
Config Management
| Feature | Status | Notes |
|---|---|---|
| Read config file | DONE | read_config command |
| Write/save config file | DONE | update_config command |
| Auto-backup before save | DONE | Saves to config-backups/ |
| Manual config backup | DONE | backup_config command |
| List config backups | DONE | list_config_backups command |
| Restore config backup | DONE | restore_config_backup command |
| Config editor UI (textarea) | DONE | config-editor.tsx - basic textarea |
| Config editor (Monaco) | DONE | @monaco-editor/react; language: ini; theme follows dark/light mode; line numbers, word-wrap, auto-layout |
| Config validation (Apache -t) | DONE | validateConfig button + auto-validation after save in config-editor.tsx calls test_apache_config |
| Config validation (MySQL) | DONE | test_mysql_config runs mysqld --validate-config; auto-validates after save; Validate button shown for mysql service |
Log Viewer
| Feature | Status | Notes |
|---|---|---|
| Read log file (last 1000 lines) | DONE | get_service_logs command |
| LogViewer component (static) | DONE | Renders text, no streaming |
| Log display on services page | DONE | Uses LogViewer with search and copy/download actions |
| Real-time log streaming | DONE | Frontend polls get_service_logs every 2s while auto-refresh is on. Tauri Channel streaming still planned for Phase 4 |
| Log filtering / search | DONE | Search bar in LogViewer filters lines in place |
| Log tabs per service | DONE | shadcn Tabs on services page switches MySQL / Apache / PHP |
| Dedicated Logs page | DONE | pages/logs.tsx provides a top-level Logs route with the same tabs and search |
| Log auto-scroll toggle | DONE | Auto-scroll checkbox in LogViewer header, independent from the 2s poll toggle |
| Terminal-style log viewer | DONE | Styled <pre> (mono, zinc-950 terminal bg, per-line coloring for ERROR/WARN/INFO/DEBUG) |
| Sticky log search bar | DONE | Search row is sticky top-0 inside LogViewer with backdrop-blur so it stays visible while scrolling |
PHP Version Management
| Feature | Status | Notes |
|---|---|---|
| List PHP versions (installed) | DONE | get_php_versions scans php/ dir |
| PHP version selector UI | DONE | php-version-selector.tsx |
| Switch PHP version | DONE | Creates php/current junction (Windows) |
| Download PHP version | DONE | download_php_version streams the real zip from windows.php.net, extracts to php/{branch}/, writes a default php.ini, and emits php-download-progress events |
| PHP Extension management | DONE | list_php_extensions / toggle_php_extension Tauri commands rewrite php.ini (comment / uncomment / append extension=NAME); PhpExtensionsDialog opened from the PHP card overflow + context menu shows a searchable list of ext/*.dll with a Switch per row |
Database Management
| Feature | Status | Notes |
|---|---|---|
| phpMyAdmin integration | DONE | Served via Apache at /phpmyadmin |
| MySQL database backup (all) | DONE | backup_mysql_database using mysqldump |
| MySQL user management UI | DONE | list/create/drop/set_password Tauri commands; Databases > Users sub-route has Add/Set Password/Drop dialogs |
| Database list | DONE | list_mysql_databases lists user databases on the Databases page |
| Database list metadata | DONE | list_mysql_databases_detailed returns name + table count + size (data + index bytes) from information_schema.tables |
| Database search | DONE | Sticky search input on the Databases page filters rows by name |
| Database row context menu | DONE | Right-click row -> Backup, Open in phpMyAdmin (deep link to ?db=NAME), Copy DB name |
| Database-specific backup | DONE | backup_mysql_database_named per-database backup wired into Databases page |
| Database restore | DONE | restore_mysql_database accepts SQL piped from a .sql file picked in the UI |
Navigation & UI Shell
| Feature | Status | Notes |
|---|---|---|
| Sidebar navigation | DONE | sidebar.tsx |
| Command palette (Ctrl+P) | DONE | command-palette.tsx |
| Top bar with actions | DONE | In App.tsx header |
| Context menus | DONE | shadcn ContextMenu wired into Apache, MySQL, PHP service cards via service-card.tsx |
| Breadcrumb navigation | DONE | Topbar breadcrumb reflects current page |
| Window controls (custom) | DONE | WindowControls.tsx |
System Tray
| Feature | Status | Notes |
|---|---|---|
| Tray icon appears | DONE | Tauri tray-icon plugin |
| Minimize to tray | DONE | X close button hides to tray (CloseRequested intercepted in lib.rs); first-time OS notification shown via notify.ts |
| Tray context menu | DONE | Show / Hide / Toggle MySQL / Toggle Apache / Quit; wired to same start-stop pipeline as the UI |
| Tray click opens app | DONE | Left-click on tray icon shows the main window (lib.rs) |
| Tray service status display | DONE | set_tray_tooltip updated every 5s by ServiceManager with Apache/MySQL/PHP state |
| Tray service start/stop | DONE | Tray menu emits tray-toggle-service; ServiceManager routes to the same toggle pipeline as the UI |
| Notifications from tray | DONE | Service start/stop and crash notifications via src/lib/notify.ts |
Auto-Update
| Feature | Status | Notes |
|---|---|---|
| Tauri updater plugin configured | DONE | tauri-plugin-updater in Cargo.toml |
| Update check on startup | DONE | auto-updater.tsx checks on launch (2s delay) and every 6h; respects autoCheckUpdates pref; toast shown when up to date on manual check |
| Install update prompt | DONE | Dialog shows current vs new version, release notes, bytes-accurate progress bar, install-and-relaunch |
| Update from GitHub Releases | PARTIAL | Code + CI ready (release.yml uses tauri-action with signing). Needs TAURI_PRIVATE_KEY + TAURI_KEY_PASSWORD secrets added to GitHub repo settings |
| Auto-check updates toggle | DONE | Settings page switch persisted to localStorage.devstackbox.settings.autoCheckUpdates; auto-updater.tsx honours it (poll on launch + every 6h when on) |
Settings & Preferences
| Feature | Status | Notes |
|---|---|---|
| Settings page | DONE | src/pages/settings/ nested routes provide General and Backup & Restore views |
| Theme preference | DONE | Inline shadcn Select (light/dark/system) inside Settings (uses useTheme) |
| Language preference | DONE | Inline shadcn Select (English / Hindi) inside Settings (i18next.changeLanguage) |
| Launch on Windows startup | DONE | get_autostart / set_autostart Tauri commands write HKCU\...\Run\DevStackBox via reg.exe (no admin) |
| Auto-check updates (preference) | DONE | See Auto-Update table |
| Config shortcuts (Apache/MySQL) | DONE | Config accessed via three-dots (MoreVertical) overflow menu on each service card; removed from Settings page |
About
| Feature | Status | Notes |
|---|---|---|
| About page (basic) | DONE | App version + author + GitHub/Docs/BugReport buttons |
| About page (extracted) | DONE | src/pages/about.tsx (AboutPage) is mounted through the router |
| System Information block | DONE | get_system_info Tauri command surfaces OS/arch, Windows version, app + Tauri version, Apache/MySQL/PHP versions; About page renders them in a definition list with Skeleton while loading |
Developer Terminal
| Feature | Status | Notes |
|---|---|---|
| Open PHP terminal (Windows cmd) | DONE | open_php_terminal opens cmd.exe |
| Embedded xterm.js terminal | DONE | @xterm/xterm + addon-fit + addon-web-links; terminal-panel.tsx component; pages/terminal.tsx with tabbed sessions; sidebar entry |
| MySQL CLI in terminal | DONE | "MySQL CLI" button spawns terminal tab with mysql -u root as initial command |
| Composer CLI in terminal | PLANNED | Composer binary not bundled yet |
One-Click App Installers
| Feature | Status | Notes |
|---|---|---|
| WordPress installer | PLANNED | |
| Laravel installer | PLANNED | |
| Project template system | PLANNED |
Security & Analyzer
| Feature | Status | Notes |
|---|---|---|
| Bug reporting via GitHub Issues | DONE | bug-report-dialog.tsx opens a pre-filled GitHub issue with environment metadata |
| Security config analyzer | DONE | security.tsx page + analyze_security Rust command. Checks PHP ini, Apache conf, MySQL (anonymous users, remote root, empty root password, test DB). Findings grouped by severity (error/warning/info) with expandable details and recommendations. |
| HTTPS / SSL for local sites | DONE | Local Root CA architecture. get_ssl_status, generate_ssl_cert, enable_ssl, disable_ssl Tauri commands. generate_ssl_cert creates a 4096-bit DevStackBox Local CA (20-year, config/ssl/ca.crt) then signs a 2048-bit localhost cert (config/ssl/localhost.crt) with SAN for localhost, 127.0.0.1, ::1. User imports ca.crt into Windows trusted roots once - all future per-host certs are trusted automatically. enable_ssl writes ssl.conf with mod_ssl + mod_socache_shmcb and port-443 VirtualHost; Include appended to httpd.conf. disable_ssl removes the Include (cert files kept). Frontend shows CA status row and displays ca_path in trust instructions. |
Virtual Host Management
| Feature | Status | Notes |
|---|---|---|
| List / add / remove vhosts via UI | DONE | list_vhosts, add_vhost, remove_vhost, toggle_vhost Tauri commands; src/commands/vhosts.rs |
| vhosts.json store + vhosts.conf generation | DONE | Definitions persisted in %LOCALAPPDATA%\DevStackBox\config\vhosts.json; vhosts.conf auto-regenerated and included via IncludeOptional in httpd.conf (configVersion 7) |
| Enable / disable per-vhost toggle | DONE | Toggled vhosts are removed from vhosts.conf; re-enabled ones are added back |
| Windows hosts file management | DONE | get_hosts_entries reads DevStackBox marker block; update_hosts_entry writes/removes 127.0.0.1 domain via elevated PowerShell (UAC prompt) |
| Show active vhosts on dashboard | DONE | Dashboard card lists all configured vhosts with enabled/disabled badge and a Manage link to the vhosts page |
| localhost always works with user vhosts | DONE | configVersion 7 template places localhost VirtualHost first with phpMyAdmin Alias inside, preventing name-based vhost mode from breaking localhost/phpmyadmin |
| HTTPS per virtual host | PLANNED | Extend SSL feature to sign per-vhost certs |
Full Backup & Restore
| Feature | Status | Notes |
|---|---|---|
| Create full backup zip | DONE | create_full_backup - zips config/, www/, mysql/all-databases.sql (mysqldump); returns mysql_included flag |
| List saved backups | DONE | list_full_backups - scans backups/full/*.zip, returns filename/size/date |
| Restore from backup | DONE | restore_full_backup - extracts config + www, pipes SQL to mysql.exe; path-traversal protected |
| Delete backup | DONE | delete_full_backup - validated to backups/full/ only |
| Open backups folder | DONE | open_backups_folder - opens Explorer at backups/full/ |
| MySQL-skipped warning | DONE | Returns mysql_included: false when MySQL is not running; UI shows warning banner |
Planned Future Features (Not Scheduled)
- Mail testing (Mailhog)
- Portable mode
- Bundled tools (curl, git, node, npm)
Version History Summary
| Version | Key Changes |
|---|---|
| v0.1.7-dev | PHP 8.4 CGI compatibility (session.sid_*, error_reporting, html_errors); configVersion 7 vhost fix; .gitignore cleanup |
| v0.1.6 | MSI fixed, CSS restored, GitHub Actions fixed, both installers working |
| v0.1.5 | Build system improvements |
| v0.1.0 - v0.1.4 | Early alpha, architecture setup |
Last updated: July 17, 2026Edit this page