See what has changed Release Notes

  • Latest Release: 4.0.0

4.0.0      29 November 2021

Changes between 4.0.0 and 3.6.5 New features: - New admin UI - Switch to Oracle GraalVM JDK 11 - Support for polyglot scripting based von GraalVM JVM - New static type methods - New application- and request-level context variable store - Support for Neo4j 4.x including version autodetection - New database driver with support for reactive Neo4j Bolt database driver - New graphql() system function - New (experimental) mongodb() and bson() system functions - New (experiemental) loadPartial() system function - Jetty 10 with support for HTTP/2 - New group-based Resource Access Grants - Support for JWT authentication with JWKS - New servlet endpoints for metrics, health check and histogram data - New map() script expression - Support for deployment by up-/download of ZIP files and URLs Security enhancements: - Fixed ProxyServlet access modes - 2FA whitelisting for IPv6 addresses with CIDR format support - New "onOAuthLogin" lifecycle method - SNI host check enforcement in HTTP service Performance enhancements: - Faster lookup for pages and files - Improved cache() method - Improved bulk operations Enhancements: - Improved scripting logging - Multi-level autocompletion in script contexts - Improved indexing - Additional modes for ACME/let's encrypt certification procedures - Fixed serialization of nested JSON arrays - Automatic reconnect for MQTT connections - Many bug fixes, code clean-up and minor enhancements

3.6.5      25 May 2021

Changes between 3.6.5 and 3.6.4 - Minor enhancements and fixes

3.6.4      23 April 2021

Changes between 3.6.4 and 3.6.3 - Security: Configure jetty not to send Server response header - Enhancement: Improve Admin Console output - Enhancement: Reduce log level for LdapNetworkConnection - Enhancement: Remove LDAP users that are not associated with a group - Bugfix: Restore cursor position in schema method editor after save/revert - Bugfix: Prevent serialization of objects deleted in concurrent transaction - Bugfix: Close connection and result set in jdbc() function

3.6.3      08 January 2021

Changes between 3.6.3 and 3.6.2 - New configuration setting to delay oauth success redirect after login

3.6.2      11 December 2020

Changes between 3.6.2 and 3.6.1 - Reduced logging output - Bugfix: Fix NotInTransaction exceptions for RuntimeEventLog writes in JsonRestServlet - Bugfix: Avoid NPE

3.6.1      23 November 2020

Changes between 3.6.1 and 3.6.0 - Bugfix: remove transactions around REST calls to avoid deadlocks in structr-ui tests

3.6.0      09 November 2020

Changes between 3.6.0 and 3.5.1 - New: OpenAPI support based on schema information - New: Health Check endpoint - New: JWT support - New: Maintenance mode - New: Group/type based schema permission resolution - New: CSS parser integration in preparation of dynamic CSS endpoint - New experimental library for server-side support of frontend apps (frontend.js) - New function 'one()' for better handling of singular and plural strings - New 'doAs()' function - New function 'hmac()' that creates keyed-hash message authentication codes for the given String value and secret - New 'sleep()' and 'random_uuid()' built-in functions - New 'system_info()' built-in function - New 'create_zip()' method to create ZIP files. Supports password protection and AES encryption. - New 'ip' keyword - New function 'import_css()' to import CSS rules into a graph structure - New feature: Allow renaming files in mounted filesystem - New feature: "Slow query" log with configurable threshold - New type selector in admin UI Data section - New mail_set_manual_config() and mail_reset_manual_config() functions - New 'Export and Download' for direct download of deployment export ZIP archive - Improved thumbnail generation (complete reimplementation) - Improved deployment export format - Improvements in config UI - Improved search for $.equals and $.contains - Improved code editor search - Improved MQTTClient - Improved deployment download - Improved Letsencrypt integration for HTTPS certificates - Improved Flow editor - Improved logging configuration via logback-include.xml - Improved support for afterCreate lifecycle method - Improved advanced mail module - Improved relationship dialog in Schema editor - Backend/driver improvements for faster REST queries - Neo4j driver version 1.7.5 - Bolt Driver improvement: use new Cypher query parameter syntax `$param` instead of `{param}` - Bolt Driver improvement: variable fetch size based on available memory - Bolt Driver improvement: incremental lazy loading of large result sets - Experimental driver for memgraph db 1.1.0 - Update JVM in docker image to JDK 11 - Bulk edit for type-based schema grants - Many bugfixes and enhancements

3.5.1      02 June 2020

Changes between 3.5.1 and 3.5.0 - Bugfix: implements workaround for bug in URI class with Windows file paths in getFileOnDisk().

3.5.0      19 May 2020

Changes between 3.5.0 and 3.4.3 - Improved support for other database driver implementations - In-memory database driver - New PATCH support for RESTful API - Improved Data area (exact type listing, delete all function) - Improvements to Flow editor and engine - New geospatial processing functions - Support for collections for starts_with() function - Upgrade to Rhino version to 1.7.11 - New version of persistence library for Structr frontend apps - New LoginServlet and LogoutServlet to allow plain HTTP login / logout using forms - Improved auto-completion in content elements and StructrScript - LetsEncrypt integration - New built-in functions get_cookie(), set_cookie(), date_add(), escape_xml(), remoteCypher() - Enhanced data deployment (reduced memory footprint) - Improved handling of incremental result fetching under low-memory conditions - Lots of improvements to schema editor (multi-save for properties and methods) - New setup wizard - Upgrade to JDK 11 (LTS) - Updated many dependencies - Enhanced server-side scriptig support for Python, R, Ruby, PHP - Support for cron jobs in their own thread with support for exclusive or parallel execution (configurable) - Sortable custom main menu - Support for binary data in GET() and byte arrays in append_content() - Improved Code area: type groups, working sets, recently used types, better icons - Improved UI: Support for three-column layouts with two resizers; improved resizing UX - Improved deployment 1: Better UX; new default "tree" export format; prevent parallel import/export - Improved deployement 2: More compact notation for visibility; version compatibility check - POM file URLs changed from http to https - Improved security for XML parser - New short notation $. for server-side JavaScript functions - New server-side JavaScript shortcuts for all internal keywords - Removed deprecated 'element' keyword (replaced by 'this' years ago) - Removed Structr-specific slice() function from server-side JavaScript function mapping - Improved logging - Support for removing header parameters that were added via add_header() - Improved security by preventing read-out of superuser password via config() function (was admin only)

3.4.3      24 Feb 2020

Changes between 3.4.3 and 3.4.2 - Adds warning for soft-limited result and page counts in CRUD pagers. - Set test execution fork count to 1 for all modules. - Updates bolt driver to 1.7.5, Neo4j embedded to 3.4.17. - Many bug and test fixes - Bugfix: Fixes regex for VersionHelper - turns capturing group to non-capturing group - Implements automatic txData cache cleaning based on WeakHashMap and weak keys. - Many changes for better async and result streaming support, implements soft limit on unlimited results. - Bugfix: Fetch release/snapshot version update info from frontend as to not block the loading of the UI - Enhancement: adapt cache sizes when running low on memory - Fixes debian stop script, that sometimes ran into an endless loop in case the Structr process was already stopped. - Enhancement: fetch Cypher results asynchronously and discard remaining records.

3.4.2      28 Jan 2020

Changes between 3.4.2 and 3.4.1 - Bugfix: fixes memory leak in transaction handling

3.4.1      04 Dec 2019

Changes between 3.4.1 and 3.3.3 - Several bug fixes and enhancements in the LDAP module - Slide-outs on right-hand side in Pages Area (Shared Components etc.) are now resizable as well - Drastically reduced number of Neo4j indexes - Index-aware Cypher query generation - Asynchronous rendering of template content - New system to save Flow layouts - Suggested children/widgets - New assert() built-in function - Some bug fixes for Flow rendering - Bugfix: Fixes display issue for self-relationships in Code area and prepares for relationship edit dialog - Option for subtype filtering in data area - Enhanced support for HTTP PATCH verb and PATCH() function - Updated escape_html() and unescape_html() to use StringEscapeUtils - Tests: Adds test to make sure that the order of UUIDs returned by a REST POST matches the order of posted objects. - Enhancements and bug fixes for advanced find() and find_privileged() functions - New job_list() built-in function to list all queued and running schedule jobs - New job_info() function - New onFinish callback method to file imports and scheduled functions - New stop_words() built-in function to access stop words dictionary - empty() function now interprets {} as empty=true - Scripting expressions containing '\\' are interpreted correctly now - Console JavaScript version upgraded to ES6 to match other scripting contexts - Enhancements in Kafka client - Performance improvements - Enhancements in the schema UI - Lots of new tests added - Improved rendering of partials - Usage of concatenated strings in to_excel() function allowed now - Align Apache POI version to new Apache Tika version to prevent NoClassDefFoundError - GitHub security advisory: Apache Tika upgraded to version >= 1.22 - Fulltext indexing during deployment import is now configurable via setting - Improved CSV/XML import - UI enhancement: Localizations, mail-templates and virtual types are resizable now - New mail_select_config() function to enable users to configure multiple mail accounts/servers - Blacklists for WebSocket messages so that less traffic is created for regular actions . Enhancements and bug fixes in admin UI - Enhancements in logging functionality - Enhancements and bug fixes for deployment import and export - Many other bug fixes and enhancements

3.3.3      15 Jul 2019

Changes between 3.3.3 and 3.3.2 - Bugfix: Removes property from view sortOrders when the property is deleted - Enhancement: Adds object id and type to title attribute of search results for related nodes search results in CRUD - Feature: Deactivates code that prevents deletion of self-relationships. - Bugfix: Better support for dynamic files in backend UI - Feature: Allows builtin create_relationship() function to directly set attributes on the newly created relationship - Bugfix: Allows searching in bigger files in CodeMirror - Enhancement: Strip whitespace from method code - Bugfix: Fixes directly addressed partials - Feature: Adds two new function to de- and encode RFC 822 "text" token into/from mail-safe form as per RFC 2047 - Enhancement: File import ignores and logs thumbnail images - Bugfix: Fixes preview rendering for templates with a repeater - Enhancement: Improved logging, adds setting to control stacktrace logging in scripting - Bugfix: Include related type in generated source code of NotionProperty - Bugfix: Various flow issues - Bugfix: Changes FlowTypeQuery to use proper input converters - Bugfix: Changes FunctionProperty to be able to use appropriate database converters. - Enhancement: Schema methods can now be called via scripting and REST - Enhancement: Removes classes in favor of POM dependency - Minor: Adds error code to schema reloading code - Bugfix: Fix notion collection properties in data deployment - Bugfix: CSS syntax highlighting in CodeMirror - Enhancement: Updates CodeMirror to 5.48.0 - Bugfix: TypeQuery sort operations - Bugfix: Fixes login dialog tabbing problem

3.3.2      25 Jun 2019

Changes between 3.3.2 and 3.3.1 - Fixes unstable GraphQL test. - Minor: Removes outdated configuration for StructrClassLoader class - Feature: Adds new configuration setting which enables logging additional request information for javascript exceptions

3.3.1      24 Jun 2019

Changes between 3.3.1 and 3.3.0 - Bugfix: Prevents notion properties from breaking the data deployment as they "look" like relationships from a property-info POV - UI: Don't refresh server log if the textarea has focus - Feature: Allow customization of server log output - Feature: Display warning message(s) for missing source files in tree-based schema export - Bugfix: Correctly set contentType for newly created elements - Bugfix: Do not force trimming of localized values as it prevents intentional blank characters - Adds new flows module, removes flows from api-builder module. - Fix: Removes call to 'deep-open' the root dir in Contents area (lead to improper display of working dir in case of root dir). - Changes path to the lib folder in the windows start.cmd script, so structr can be started from the root folder with bin/start. - Implements save & load for mixed CSV import configuration. - UI: Visually indicate finished jobs in auto-updating messageBuilders (change from blue to green) - Bugfix: Updates pattern to extract module information from classpath (windows delimiter is ; instead of :) - Merge branch 'master' of - Fixes advanced CSV import for types w/o unique properties. - Enhancement: Update Apache Commons Mail dependency from 1.4 to 1.5 - Enhancement: Adds support for RFC 4180 mode for CSV import. - Minor: Changes detection whether structr is already running - Adds Structr-Return-Details-For-Created-Objects HTTP header to return more details on created nodes in REST POST requests. - Feature: Adds "delete all" button to crud - Enhancement: Adds 'driver' parameter to jdbc() function. - Minor: Make "Strict Quotes" option disabled by default in CSV importer - Bugfix: Clear schema type cache for import dialog so it does not show duplicates - Feature: Adds "Only show custom types" checkbox to CSV import dialog

3.3.0      06 Jun 2019

Changes between 3.3.0 and 3.2.2 - New find() functionality: Boolean filters, range queries, paging and sorting - Content-Length header for dynamic files and file downloads in HttpServlet - Improvements in flow engine and editor - Lots of UI improvements: Storing UI parameters more reliable, improved pager and Dashboard area - Upgrade to latest jQuery version (3.3.1) - Many UI bug fixes - Enhancements in data deployment - Deployment export supports null, false and empty values now - '$' shortcut for `Structr` in scripting and console - copy_permissions() function now allow overwriting of existing target node Security relationships - Performance: Allow grouping grant/revoke commands for a node to reduce the number of database calls - Upgrade Jetty to 9.4.18 - Support cloning of elements in the same page to a different parent even if the selected node has a nextSibling - New security features: Configurable max. # of sessions, invalidation and clearing - Support for 'HttpOnly' cookie (configurable) - Support for custom LDAP property to uniquely identify an object instead of dn - New has_error() builtin function - Enhanced transaction consistency in EntityWrapper - Use platform defaults for Java heap parameters -Xms and -Xmx - Better handling of non-Structr nodes - Debian package can now run with openjdk-8-jdk-headless - Improved cache invalidation for orphaned node instances - Improvements for e-mail functionality: Properly decode filename of e-mail attachments, PDF type detection for attachments, password storage as encrypted string - Performance improvements - New support for volume and per-user licenses - New support for encrypted string functionality - Experimental feature "Analyze schema" removed - First implementation of app store with categories and tiles (still hidden in this release) - Editions removed in favor of modules - Lots of comments in settings for auto-generating the support article for structr.conf - Docker "latest" tag is now attached to latest release only.

3.2.2      22 May 2019

Changes between 3.2.2 and 3.2.1 - Fixes GraphQL registration issue for inherited properties on nested collections - Upgrade of graphql-java from version 7.0 to 12.0

3.2.1      08 Apr 2019

Changes between 3.2.1 and 3.2.0 Changes between 3.2.0 and 3.2.1 - Minor enhancements and bug fixes - Feature: Make preview for dynamic files optional - No more stacktrace logging in HTML output - Custom headers from config file in all servlet responses (with tests) - New settings that allows to log the jetty ssl configuration on startup and to enable/disable SSL protocols and cipher suites - Bugfix: Clear localization cache when all caches are flushed

3.2.0      27 Mar 2019

Changes between 3.2.0 and 3.1.2 - Many bugfixes and improvements - New server-side IMAP client and support for e-mail attachments and multipart e-mails - Improved and extendend LDAP / Active Directory synchronization - Support for multiple widget servers - Update to Font Awesome 4.7 - Performance improvements in Structr backend UI - Use TestNG instead of JUnit to allow re-use of test classes and setups - Optional export of schema methods and functions in individual files for better revision control support - Optional inclusion of UUIDs in deployment export - Improved message queue client implementations (Apache Kafka) - Support for array properties - Support for X-FORWARDED-FOR HTTP header - Search function in configuration editor - New built-in functions: has_cache_value(), get_cache_value(), delete_cache_value(), get_relationship_types, set_response_code() - Improved support for arbitrary objects (JSON etc.) in repeater elements - Fixes deployment issues with Pages and DOMNodes and the hidden flag - Store Structr Ui configuration data in the database instead of the file system - Cypher query result is now identical to the actual Cypher result structure - Move some vendor-dependent database queries to the driver level. - Updated several dependencies to use the most recent versions


Changes between 3.1.2 and 3.1.1 - Fixes a bug with user self-registration


Changes between 3.1.1 and 3.1.0 - Minor bug fixing


Changes between 3.1.0 and 3.0.3 - Massive performance enhancement: True lazy result streaming from database - Support lazy evaluation for custom Cypher calls - Create and sync LDAP groups and users - Support for HTTP PATCH - OR conjunction in toplevel GraphQL queries - Improved Code area - Improved Contents area - Improved Flow editor - Better handling of array data types UI - Enhanced config servlet, allows (most) services to start/stop/restart at runtime - Flush caches after cypher write queries - Improved security of remote Neo4j connections - Changelog output to filesystem - Improved Windows support - Updated Jetty to latest version (9.4.13.v20181111) - Support for DeepL as a translation provider - Added debug() function for debug logging


Changes between 3.0.2 and 3.0.3 - Fixes bug related to HTTP PATCH - Adds support for PATCH to resource access tab


Changes between 3.0.1 and 3.0.2 - Performance enhancement: Optional parallel JSON serialization - New feature: Parallel flow processing and new elements: FlowFilter, FlowNotEmpty, FlowLog, FlowFirst - New: Flows as data source for DOM element repeaters - Upgrade to Neo4j Bolt 3.4.9 and Neo4j Java Driver 1.6.3 - Audit changelog is now written to configurable filesystem path - New: `dontCache` flag also for files, evaluate `cacheForSeconds` for files - Prevent non-indexable property values from being indexed - New OAuth2 provider `Auth0` and improved StructrOAuthClient base implementation - New HTTP verb: PATCH (with batched transactions of size 1000) - Many UI improvements including new `custom` view - Fixed bug related to indexing of function property values - Other bug fixes


Changes between 3.0.0 and 3.0.1 - New: Windows MSI installer - Minor enhancements and bug fixes


Changes between 3.0-rc1 and 3.0.0 - Minor enhancements and bug fixes


Changes between 2.3.8 and 3.0-rc1 - New: Fully dynamic schema - New: GraphQL API - New: Flow Engine and Editor - New: Support for multi-tenancy - New: PDF module for server-side transformation of any HTML page into PDF - New: Excel export module - New: 2-Factor-Authentication with QR code generation - New: Password rules and failed login counter - New: Code area for simple code editing - Upgrade to Neo4j 3.4.7 and Bolt Driver 1.5 - UI refresh - Improved CSV import - Improved Windows support - Integrated ECMAScript engine updated to ES6 level - Simple automatic schema layouting - Messaging module support for Apache Kafka - Support for custom HTML tags and attributes - Type-based batching for XML import

Structr in Action!

On our YouTube channel you can find more videos about Structr.

Structr on YouTube