Overview
Structr 6.0.0 is a major release featuring a complete architectural overhaul with the new Traits System, migration to GraalVM 25 / JDK 24, Jetty 12, significant performance improvements, and a modernized user interface. This release includes breaking changes that require migration steps for existing applications.
Breaking Changes
Architecture
- Traits System: Complete rewrite of the type system using traits instead of Java class inheritance. Dynamic schema classes are now static Java code with trait-based composition.
- Static Schema Migration: Most dynamic schema classes moved back to static Java code
- Removed Dynamic Java Code Generation:
NodeExtender and related classes removed
Removed Features
- GraphQL Support: Completely removed (was based on outdated graphql-java v12)
- Content Area: Removed entirely (
ContentItem, ContentContainer)
- Crawler Module: Removed
- Working Sets: Removed
- Edit Mode Binding: Legacy edit-mode-binding removed in favor of Event Action Mapping
- Windows Support: Removed Windows-related scripts and
start.cmd
- R Integration: Removed R references (not available in Graal)
Removed Functions & Properties
batch() function removed (use doInNewTransaction() instead)
keys() and values() functions removed (use Object.keys() and Object.values())
slice() expression removed from StructrScript
validate_email() function removed (use is_valid_email())
restQuery property removed from DOMNode (use functionQuery)
debug() function removed
includeAsJavaScript attribute for files removed
includeJs function removed (use actual JavaScript imports)
xpathQuery, hideOnIndex, hideOnDetail, renderDetails properties removed
API Changes
- All built-in functions renamed to camelCase (backwards compatibility conversion provided)
- Resource access “grants” renamed to “permissions”
- Method parameter handling changed for REST calls
set() function: third call-style removed
Configuration
memory.config renamed to memory.conf (graceful fallback with deprecation warning)
- Default upload folder changed to
/._structr_uploads
- Removed settings for deployment servlet anonymous deployments
- Removed
force-arrays setting
Major New Features
Traits System
- Complete type system rewrite using trait-based composition
- Multiple inheritance support through traits
- Improved schema flexibility and extensibility
- Service Classes: New concept for stateless service types that cannot be instantiated
Integrated Documentation
- Built-in documentation system with searchable content
- Inline documentation for all built-in functions
- Documentation for system types, lifecycle methods, and services
- Autocomplete hints from system types documentation
- Keyboard shortcut
Ctrl+K for documentation search
Event Action Mapping Enhancements
- Flow (FlowContainer) selector in EAM dialog
- Confirmation dialog feature for Event Mapping
- Two-factor authentication support
- Custom event names support
- CSS class
structr-action-running automatically added during action execution
- Events
structr-action-started and structr-action-finished dispatched on trigger elements
Page Paths & URL Routing
- Dynamic paths for pages (
PagePath objects)
- URL routing dialog in UI
- Methods callable via configurable HTTP verbs (GET, POST, etc.)
- Private methods support
Fulltext Search
- New fulltext indexing using Neo4j fulltext indexes
searchFulltext() and searchRelationshipsFulltext() functions
- Fulltext search UI in files area with context display
User-Defined Functions
- Global schema methods renamed to “user-defined functions”
- Static methods callable via cron
- Function signatures with method overloading support
functionInfo() built-in function for method introspection
New Built-in Functions
login() – Programmatically sign in a user
is_valid_uuid() – Validate UUID format
is_valid_email() – Email validation
createFolderPath() – Create folder hierarchies
searchFulltext() / searchRelationshipsFulltext() – Fulltext search
rollbackTransaction() – Manual transaction rollback
addLabels() / removeLabels() – Neo4j label management
set_log_level() – Runtime log level configuration
functionInfo() – Get method information
Performance Improvements
- Transaction-based caching with prefetching replaces global node cache
- Optimized HTML/DOM rendering performance
- Improved prefetching for user authentication and permission propagation
- Better handling of large data deployment exports
- Optimized websocket commands
- Reduced database queries through caching of user-defined functions
Security Enhancements
Upload Servlet Security
- Default upload folder enforced to be non-empty
- Write permissions required for
parent/parentId targeting
uploadFolderPath restricted to authenticated users under default folder
- Non-whitelisted properties blocked during file upload
Other Security
- Server-side request forgery (SSRF) protection via whitelisting in HttpHelper
- ZIP slip vulnerability fix in SyncCommand
- Updated
encrypt()/decrypt() functions to use more secure mode
- Read-protection for configuration keys containing secrets
- Bouncycastle updated to 1.81
User Interface Improvements
Schema Editor
- Pan and zoom functionality (mouse wheel, middle-mouse drag)
- Trait inheritance arrows displayed
- Built-in types and relationships visible
- Improved node selection and movement
- Layout save/restore functionality
- “Hide selected types” functionality
Code Area
- Code navigation / “Go to definition”
- Bulk edit mode improvements
- Method parameters in run dialog
- Usage examples with copy buttons
- Monaco editor settings (auto-closing brackets/quotes, auto-surround)
- Customizable monospace font/size
Dashboard
- HTTP request statistics display
- Available processors and memory info
- Deployment wizard
- Improved vis.js integration with drag/zoom
- Update messages for script jobs
Data Section
- Improved array type handling in create/edit dialogs
- Date/DateTime picker improvements
- ZonedDateTime support
- Better handling of large array attributes
- Column sort order persistence
General UI
- Notification system with bell icon and message count
- User settings for auto-removing time-limited notifications
- SSO login buttons in login dialog
- Configurable UI settings reset
- Improved popup dialogs (grid-based layout)
- Custom confirmation dialogs
Dependency Updates
Runtime
- GraalVM: Upgraded to version 25.0.0 / JDK 24
- Jetty: Migrated to Jetty 12
- Neo4j: Support for Neo4j 2025
Libraries
- Apache Commons Lang3: 3.18.0
- Apache Commons Compress: Security update
- Logback: 1.5.20
- Bouncycastle: 1.81
- Geotools: 32.4
- vis.js: Latest version
- Monaco Editor: 0.51
- Various other dependency updates for security and compatibility
Configuration Changes
New Settings
structr.conf settings for heap and timezone configuration
- Email validation regex configurable
- FTP passive mode port range configuration
exec()/exec_binary() command logging configuration
- Auto-closing brackets/quotes for Monaco editor
- Default log level configuration
- UUID format settings (compact/dashed/both)
Removed Settings
- GraphQL servlet configuration
- Legacy OAuth classes
- Deployment servlet anonymous access
- Various deprecated settings
Notable Bug Fixes
- Fixed memory leak in scripting contexts
- Fixed session timeout issues
- Fixed thumbnail generation for images with alpha channel
- Fixed permission propagation query performance
- Fixed websocket initialization timing
- Fixed circular group hierarchy resolution
- Fixed cascading delete implementation
- Fixed LDAP group configuration
- Fixed deployment export/import for various edge cases
- Fixed ransomware-style file recovery issues
- Fixed email configuration problems
Migration Guide
Before Upgrading
- Backup your database and deployment exports
- Review breaking changes above
- Test in a staging environment first
Function Name Changes
All built-in functions now use camelCase. A backwards compatibility layer is provided, but you should update your code:
get_or_create(...)
to_json(...)
getOrCreate(...)
toJson(...)
restQuery Migration
The restQuery property has been removed. Migrate to functionQuery:
$.restQuery('/api/users')
$.functionQuery('find', 'User')
Traits System
Custom types now use traits. The migration is handled automatically, but review your schema after upgrade for any issues with:
- Multiple inheritance
- Abstract properties
- Method overriding
Configuration File
Rename memory.config to memory.conf to avoid deprecation warnings.
Documentation
The integrated documentation system provides comprehensive coverage of:
- All built-in functions with examples
- System types and their properties
- Lifecycle methods
- Services and configuration
- Migration notes for 6.x
Access via Ctrl+K in the Structr UI or the documentation icon.
Contributors
Thanks to all contributors who made this release possible through code contributions, bug reports, and documentation improvements.
Full Changelog
For the complete list of almost 1,600 commits between 5.2.1 and 6.0.0, see the git log or GitHub compare view.