Features
- Server SSLs (phase 1) by @RichardAnderson in #1056
- Copilot PR Review Guidelines by @RichardAnderson in #1060
- Hosted Domains by @RichardAnderson in #1057
- WebSockets Improvements by @RichardAnderson in #1059
- Inertia Table by @RichardAnderson in #1067
- Making Claude Smart Again by @RichardAnderson in #1091
- Reuse Isolated User + Default Username by @RichardAnderson in #1087
- Allow Firewall Port Ranges by @RichardAnderson in #1088
- GitHub App Provider by @RichardAnderson in #1089
- Basic HTTP Auth for Sites by @RichardAnderson in #1090
- SSL/Domain Improvements by @RichardAnderson in #1095
- Gitea/GitLab Custom SSH Ports by @RichardAnderson in #1096
- Inertia Tables Refactor 2 by @RichardAnderson in #1098
- Inertia Context Shifting by @RichardAnderson in #1094
- Resume Site Creation by @RichardAnderson in #1092
- Server Provider Deletion by @RichardAnderson in #1110
- Github App Deployment by @RichardAnderson in #1112
- Bump to Laravel 13 & Inertia v3 by @RichardAnderson in #1114
- Optional install of Mise NPN/Bun with PHP/Laravel sites by @RichardAnderson in #1113
- Monitoring Improvements by @RichardAnderson in #1115
- Check for updates automatically by @RichardAnderson in #1116
- Default webserver splash by @RichardAnderson in #1117
- Service Logs Viewer by @RichardAnderson in #1108
- Hosted Domain Improvements by @RichardAnderson in #1121
- Site Tooling by @RichardAnderson in #1119
- Worker error tracking by @RichardAnderson in #1127
- [4.x] Composer as tooling by @RichardAnderson in #1135
- [4.x] Site Stats by @RichardAnderson in #1132
- Dialog Refactor by @RichardAnderson in #1140
- Server Networking (IP Management) by @RichardAnderson in #1141
- Server Security by @RichardAnderson in #1143
- More tooling + Blank (Reverse Proxy) site type by @RichardAnderson in #1167
- Per-site PHP runtime settings by @RichardAnderson in #1180
- Additional service configuration files by @RichardAnderson in #1181
- Enforce PR title prefixes and group release notes by @saeedvaziry in #1183
Fixes
- Site Domains Fixes by @RichardAnderson in #1062
- Claude Review Improvements by @RichardAnderson in #1093
- Default WS_URL by @RichardAnderson in #1100
- Console WS_URL fallback to APP_URL by @RichardAnderson in #1107
- Ensure .env for Laravel Sites by @RichardAnderson in #1109
- Resolved TS Type issues & Improves CI/CD by @RichardAnderson in #1111
- Resolve PHP8.5 deprecation warnings by @RichardAnderson in #1118
- Service Install Fixes by @RichardAnderson in #1120
- Cron job tooling by @RichardAnderson in #1123
- Command tooling by @RichardAnderson in #1124
- Required tooling by @RichardAnderson in #1125
- Available tooling using isolated user by @RichardAnderson in #1126
- Basic-auth command order by @RichardAnderson in #1128
- Caddy force-ssl verification by @RichardAnderson in #1130
- Nginx Force-SSL verification fix by @RichardAnderson in #1129
- Reload webservice on delete of site by @RichardAnderson in #1131
- Resolves "useMemo" issue by @RichardAnderson in #1133
- Remove react dupes by @RichardAnderson in #1136
- VitoTable Issues by @RichardAnderson in #1139
- GoAccess ignore historical compressed files by @RichardAnderson in #1142
- Realtime Event Filtering by @RichardAnderson in #1150
- Remove "Link" header by @RichardAnderson in #1152
- Resolves issue with GitHub App Auto Creation by @RichardAnderson in #1153
- utf8mb4 for MariaDB missing by @RichardAnderson in #1156
- Use latest versions of db services by @RichardAnderson in #1157
- Server provider availability by @RichardAnderson in #1158
- Available updates + kernel fixes alert by @RichardAnderson in #1159
- Websocket Content Error by @RichardAnderson in #1160
- Mysql Users + Postgres Host fix by @RichardAnderson in #1161
- Resolve postgresql collation issue by @RichardAnderson in #1162
- PGSQL Permissions Sync by @RichardAnderson in #1163
- Minor UI Tweaks by @RichardAnderson in #1165
- API Documentation for v4 changes by @RichardAnderson in #1166
- Increase SSH timeout for install jobs + dpkg config by @RichardAnderson in #1169
- Worker restart consolidation by @RichardAnderson in #1172
- Dropbox OAuth Provider by @RichardAnderson in #1174
- Test failing when mailpit enabled by @RichardAnderson in #1179
- Backup Improvements by @RichardAnderson in #1178
- Firewall rule mask prefill and guidance by @saeedvaziry in #1182
- workflow verbose log by @saeedvaziry in #1186
- Add SSL expiry refresh actions and upgrade troubleshooting docs by @RichardAnderson in #1184
- Fire Socket Event on Auto-Deploy by @RichardAnderson in #1188
Others
- Add fail-on-error to Scripts by @emredipi in #960
- Add NodeJS website using mise supporting node versions per site by @saeedvaziry in #974
- Add Valkey service by @saeedvaziry in #982
- Fix: pre commit test database by @tomasdav9 in #995
- Feat/cron job names by @tomasdav9 in #994
- fix: service versions in desc order (4.x) by @victorelec14 in #1001
- ENV varialbes as form instead of Editor for more security by @saeedvaziry in #986
- Prevent cross-site SSL inheritance by @saeedvaziry in #1017
- Auto set site user when entering domain by @saeedvaziry in #1020
- Show installation logs in services by @saeedvaziry in #1023
- Add SFTP storage driver by @saeedvaziry in #1024
- Add Bun site type by @saeedvaziry in #1025
- Fix php version fetch after update by @saeedvaziry in #1030
- Migrate Vito to Octane with FrankenPHP by @saeedvaziry in #1033
- Live terminal by @saeedvaziry in #1035
- Extract inline closures into dedicated Job classes by @saeedvaziry in #1037
- Use Pdo\Mysql SSL CA constant on PHP 8.5+ by @mr-chetan in #1038
- Add realtime WebSocket updates across all async operations by @saeedvaziry in #1040
- Add project scoping for API keys by @saeedvaziry in #1041
- Allow ws_url for local development by @RichardAnderson in #1052
- ui fixes by @saeedvaziry in #1064
- Update dependencies by @saeedvaziry in #1078
- [AI] forjedio/inertia-table skill by @RichardAnderson in #1097
- [FIX] 4.x: Identify Vito's own server by install marker, not by 'vito' user alone by @erhanurgun in #1104
- [Merge] 3.x into 4.x (May 26th 2026) by @RichardAnderson in #1134
- Add db:vacuum command to reclaim SQLite space by @saeedvaziry in #1138
- [4.x] QoL & Polish by @RichardAnderson in #1145
- [AI] CodeRabbitAI Configuration by @RichardAnderson in #1151
- Install v4 and upgrade by @saeedvaziry in #1149
- [4.x] Worker QoL by @RichardAnderson in #1147
- Security audit by @saeedvaziry in #1164
- [CI/CD] Parallel Testing by @RichardAnderson in #1170
- [Improvement] Email updates + more notifications by @RichardAnderson in #1168
- Move docs to the main repo by @saeedvaziry in #1171
- Make sponsor button less annoying by @saeedvaziry in #1173
- Docs 4.x by @saeedvaziry in #1175
- Fix env secrets being lost after pulling from server and saving by @saeedvaziry in #1177
New Contributors
- @emredipi made their first contribution in #960
- @tomasdav9 made their first contribution in #995
- @victorelec14 made their first contribution in #1001
- @mr-chetan made their first contribution in #1038
Full Changelog: 3.20.1...4.0.0