CMSB v3.79 Released (Developer Tools)
4 posts by 2 authors in: Forums > CMS Builder
Last Post: Monday at 4:14pm (RSS)
Hi everyone,
We've just released v3.79! We're already running this version on our site, and it has some great new developer tools.
What's New
- Developer Console: This has been completely rewritten with last command memory, command history, and tons of usability features for MySQL, Shell, and PHP commands.
- Admin Debug Footer: We've updated this with a MySQL Query log at the bottom of each page (admins only - in the HTML footer comment) that lists EVERY MySQL query executed on the page, how long it took to run and the file and line that called it. This makes it super easy to track down slow queries.
- A number of bug fixes and other UI improvements.
- Note: We still have a queue of pending user feature requests. We're releasing what we have now so you can start using it. Feel free to remind us what you'd like to see next (in a new thread).
Here's an example of the debug footer from our own website's CMS Builder home page:
<!-- DEBUG FOOTER (visible to admins only)
PAGE PERFORMANCE SERVER LIMITS OPTIMIZATIONS SERVER INFO
---------------- ------------- ------------- -----------
Total Time: 0.002s PHP Max Time: 120s PHP Xdebug: Off (faster) CMS Version: 3.79 (build 2925)
- CMS Core: 0.001s (66%) PHP Max Memory: 512M PHP OpCache (2s): On (faster) PHP Version: 8.4.11
- MySQL: 0.001s (25%) PHP Output Buffer: On (faster) MySQL Server: MariaDB 10.3.39
- Plugins: 0.000s (8%) MySQL Persist Conn: On (faster) MySQL Client: mysqlnd 8.4.11
Peak Memory: 615.02 KB MySQL General Log: Off (faster) Remote IP: 184.3.210.221
You'll note that CMS Builder and our server are so optimized that the page returns in two thousandths of a second. Meaning we could serve this page 500 times in one second. We have a dedicated server, but these optimizations stack up, especially when end-clients are on shared hosting that might otherwise make their website load slower than usual.
Here's an example of the MySQL query log from the bottom. This works on both CMS backend pages, and frontend viewer pages as well.
MySQL Queries Calls Avg Time Total (ms) Total (s) Query
---------------------------------------------------- ----- ---------- ---------- --------- ------------------------------------------------------------------------------------------------------------------------
/cmsb/lib/User.php:335 2 0.065ms 0.129ms 0.000s SELECT tableName, accessLevel, maxRecords FROM `website__accesslist` WHERE userNum=1
/cmsb/lib/SessionHandler.php:275 1 0.127ms 0.127ms 0.000s SELECT data FROM `website__sessions` WHERE id = /*HIDDEN*/ AND `expires` > NOW() LIMIT 1
/cmsb/lib/User.php:253 1 0.092ms 0.092ms 0.000s SELECT * FROM `website_accounts` WHERE `num` = "1" LIMIT 1
/cmsb/lib/database_functions.php:90 1 0.089ms 0.089ms 0.000s * MySQL Connection (p:Localhost via UNIX socket)
/cmsb/plugins/reportBuilder/reportBuilder.php:62 1 0.059ms 0.059ms 0.000s SELECT * FROM website__reports_list ORDER BY dragSortOrder
/cmsb/lib/database_functions.php:90 1 0.040ms 0.040ms 0.000s SET time_zone = '-07:00', sql_mode = 'STRICT_ALL_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
---------------------------------------------------- ----- ---------- ---------- --------- ------------------------------------------------------------------------------------------------------------------------
TOTAL 7 0.077ms 0.536ms 0.001s
You can see that queries are sorted from slowest to fastest under the Total column, and all queries together run in less than a millisecond. Where this is useful is on servers where you're seeing load times of 1 to 2 seconds or more. This helps you identify exactly which queries are slow, allowing you to focus on optimizing them.
The full changelog for this release is as follows:
*** August 26, 2025 - Version 3.79 (Developer Tools)
SERVER REQUIREMENTS (Since Jun 2025): PHP 8.1+ and MySQL 5.7+ (or MariaDB 10.2+)
DEVELOPER CONSOLE ENHANCEMENTS
- All Consoles Now Include:
- Command Memory: Opening a console automatically displays the last command/query run in that console
- Command History: History button shows dropdown of previous commands for easy re-execution
- Keyboard Shortcuts: Ctrl+Enter (Cmd+Enter on Mac) to execute commands without clicking Run
- Execution Time Display: Shows how long operations take for performance monitoring
- ACE Editor: Syntax highlighting and code editing (expanded from MySQL-only)
- MySQL Console:
- Multi-Query Execution: Run multiple SQL statements in a single operation
- Hide Columns: Click [×] or double-click headers to focus on relevant data
- Expand Cells: Click expand icon or double-click cells to view full contents
- Quick Editing: Primary keys link directly to CMS edit page for that record
- Export to JSON: One-click export of query results for external processing
- PHP Console:
- Isolated Output: Results render in iframe - display images, HTML, or any content type
- Output Format: Select Content-Type header (text/plain, HTML, JSON) via dropdown
- Timeout Control: Choose execution limits (5s-5min) to prevent runaway scripts or allow long operations
- Shell Console:
- Directory Browser: Visual folder navigation to set working directory
- Real-Time Output: Live updates as commands execute (on supported servers)
- Error Detection: Errors display in red above output, no 2>&1 needed (on supported servers)
ADMIN DEBUG FOOTER ENHANCEMENTS
- Enable in Admin > General Settings to add performance metrics as HTML comments in page footer
- MySQL Query Tracking (NEW):
- Every MySQL query displayed with execution time and source location (file:line)
- Queries sorted slowest-first for quick bottleneck identification
- Total MySQL query time displayed in debug header
- Server Optimizations (NEW):
- Displays status of high-overhead features: Xdebug, OpCache, Output Buffer, MySQL persistence, MySQL General Log
- Each setting labeled "(faster)" or "(slower)" to guide configuration decisions
MINOR CHANGES
- Admin > Server Info: Added OPcache reset functionality with continuous refresh option for clearing cached PHP files
- Database Backups: Now use consistent snapshot transactions instead of table locking for better performance and reliability
- Upload processing: Skip image-specific operations for non-image files to improve performance
- Settings file: Removed 'set_innodb_strict_mode' setting (left commented line devs can uncomment in DB::Connect() if needed)
- ACE Editor: Changed default theme from 'chrome' to 'github_light_default' for improved readability
- ACE Editor: Theme can now be customized globally via settings('advanced.aceEditorTheme') or per-textarea with data-ace-theme attribute
FOR PROGRAMMERS
- Cache class: New file-based key-value store with TTL support for caching temporary data (see /lib/Cache.php)
- CMS Internal: Added data-disable-with="Loading..." attribute to disable buttons and change their text during form submission to prevent double-clicks.
BUG FIXES
- DateTime fields: Improved error messages for invalid dates (like February 31st) to provide clearer feedback to users
- Drag sorting: Fixed issue where table headers could become sortable when tables had only one row
- Image processing: Fixed potential error with GIF transparency when color index is out of range
- Image processing: Fixed divide-by-zero error by gracefully handling missing or invalid images
- Fixed MySQL 8.0 error when error log cleanup triggered during upload removal (Error 1093: target table for update in FROM clause)
- Fixed issue that prevented CMS from running directly web root folder (without a subfolder)
- Fixed issue where web root detection didn't always work when using /~user/ alias urls
- Fixed form controls (checkboxes, radio buttons) showing OS accent colors in Chrome/Edge 137+
- Fixed browser caching issue where deleted and re-uploaded images with identical filenames would show old cached versions in admin interface
- Misc code and other minor improvements
You can download the latest version here: https://www.interactivetools.com/download/
Please feel free to ask any questions or post any feedback, comments or questions.
Thank you!
interactivetools.com
I hadn't looked at the beta versions, so I missed this. In the new dev console, we have lost 'Records as Columns' and the horizontal scrollbars so you can no longer see all the columns.
yaadev.com
By Dave - Monday at 12:41pm
Hi Jeff,
Yea, you can scroll horizontally, but we didn't re-create that feature yet.
However, I noticed myself missing it recently when viewing a second record with many columns.
How/when would you typically use it? In what situations?
interactivetools.com
By kitsguru - Monday at 4:14pm - edited: Monday at 4:14pm
I tend to use records as columns when looking at 2 or 3 records as it is easier to read. Scrollbars when lots of columns. Would be nice to have scrollbars top and bottomof the table, in the editor list view as well. Basically everyday.
yaadev.com