Skip to content
This repository was archived by the owner on Jan 14, 2026. It is now read-only.

Minor feature release 3.3.0

Choose a tag to compare

@GwendolenLynch GwendolenLynch released this 27 Jul 09:03
· 284 commits to 3.3 since this release

Packaged binaries of this release can be found below.

To do a 15-second install, use the following:

curl -O https://bolt.cm/distribution/archive/3.3/bolt-v3.3.0.tar.gz
tar -xzf bolt-v3.3.0.tar.gz --strip-components=1
php app/nut init

To upgrade, simply run composer update, or read detailed instructions here: https://docs.bolt.cm/3.3/upgrading/updating

Released 2017-07-27. Notable changes:

  • Added: Add a helpful note on the Changelog page, if it is not enabled. #6653
  • Added: Add extra PHP module requirements to composer.json #6490
  • Added: Add option to only dump the SQL migration statements with the database:update command. #6496
  • Added: Add scoping for new storage getContent queries. #6188
  • Added: Add support for extension definition in bolt.yml file #6324
  • Added: Added app/nut Commands to query views into system operations. #6531
  • Added: Adding security service provider. #6231
  • Added: Adding the Pimple dumper as a require-dev & Nut command #6402
  • Added: Allow an initial number to be passed in the repeater field config #6459
  • Added: Allow Canonical Url to be overridden #6500
  • Added: Allow for project-specific Localised translation files. #6802
  • Added: Allow lookup of non-ContentType repositories by alias #6647
  • Added: Allow services in .bolt bootstrap config. #6155
  • Added: API compatibility with legacy content objects: Added .renderedvalue() to consistently get values. #6473
  • Added: Collection Library: Bolt\Collection\Bag and Bolt\Collection\ImmutableBag #6572
  • Added: Create / Update .codeclimate.yml #6351 #6345
  • Added: Debug - Keep order number consistent to class when using --sort-listener #6578
  • Added: Debug - Option to get short listing of event names #6581
  • Added: Debug - Show source class for closures #6576
  • Added: Enable breaking events up into single events #6573
  • Added: Feature list "local extensions" on Extensions screen #6419
  • Added: Implement missing hasParameter method. #6764
  • Added: Local Extension Replacement. #6170
  • Added: More descriptive exception when the bundled-extension class does not exist #6839
  • Added: New "Configuration Notices" extensions helps catching a lot common oversights or misconfigurations. webpage
  • Added: New Nut debug functionality, dumping routes, events, twig commands and Twig linter. #6570, #6568, #6543
  • Added: New Skeleton theme, as a bare-bones starter theme. #6816
  • Added: Overwritable Output for console commands #6680
  • Added: Path Resolver. #6166
  • Added: Profiler deprecation notices #6254
  • Added: PSR-16 (Simple Cache) cache adapter to Filesystem #55
  • Added: Replacing RandomLib. #6021
  • Added: ScriptHandler updates #6681
  • Added: Set bolt/collection Object Orientated implementations of arrays to a stable constraint #6710
  • Change: Add limit to trace, show less data when not logged in. #6130
  • Change: Add sub and super to default allowed tags #6362
  • Change: Allow 'extensions_config' as a prefix for FilePermissions checks #6762
  • Change: Allow .bolt.php to return extension objects #6767
  • Change: Always reset null templatefields to an empty array instead [#6803](https://github.com/bolt/bolt/pull/6803]
  • Change: Boot extension registered service providers - Fixes "Paths to extensions added pages don't work" #6157
  • Change: Bumped PostgreSQL minimum version to 9.1. (for MySQL we require version 5.5 or up, and almost any SQLite 3 will do).
  • Change: Bunch of maintenance work on base-2016: Updating Foundation to 6.3, etc. #6185
  • Change: Change app path to always be user directory #6409
  • Change: Change name from Starter to ConfigurationNotices. #6207
  • Change: Change passwordlib to use random_bytes instead of any of its sources. Fixes the /dev/urandom issue on sites with open_basedir restrictions. #6756
  • Change: Change Symfony Security to use lazy url generator. #6428
  • Change: changing 'Extends' menu to 'Extensions'. #6156
  • Change: Clarify error message for missing assets in extensions. #6505
  • Change: Clean up .gitignore #6737
  • Change: Composer installed default themes #6816
  • Change: Config update: suggest Sparkpost instead of Sendgrid. [#6787](https://github.com/bolt/bolt/pull/6787]
  • Change: Core deprecation notice logging #6389
  • Change: Deprecate Render #6310
  • Change: Deprecation and associated clean ups. #6159
  • Change: DI Error & Exception Handlers #6341
  • Change: Drop translation of ContentType-specific translation files. #6802
  • Change: Extension Nut command registration. #6176
  • Change: Force mbstring functions call on root namespace #6385
  • Change: Helpful exception when default thumbnail images are not found. #6522
  • Change: Improve relation and taxonomy normalisation. #6535
  • Change: Minor visual changes to repeater blocks: Make them stand out a bit less, better alignment on page. #6720
  • Change: More Symfony deprecations: Replace BoltResponse. #6058
  • Change: More Twig deprecations #6812
  • Change: Only set environment for Nut Twig commands on CLI #6626
  • Change: Performance improvement for content with large lists of incoming relations #6799
  • Change: Performance improvement in loading of large tag sets in content editor. #6817
  • Change: Random randomness #6350
  • Change: Rebuild translation files. #6217
  • Change: Remove advanced performance settings from default config. #6028
  • Change: Remove bolt.render stopwatch event #6304
  • Change: Remove default value for cookies_domain #6440
  • Change: Remove hard requirement on PHP mbstring extension #6748
  • Change: Remove requirement on (optional) gmp PHP extension #6553
  • Change: Removed safe mode and magic quotes checks #6529
  • Change: Renamed "Local Extensions" to "Bundled Extensions" #6502
  • Change: Replace deprecated |twig filters with template_from_string. #6153
  • Change: Replace ResourceManager with PathResolver in the configuration validators #6429
  • Change: Rework links, badges & grammar in README #6390
  • Change: Script handler refactor #6733 #6729
  • Change: TemplateView - Improving Controller Reusability #6382 #6443
  • Change: Tweak bootstrap for invalid extension classes. #6769
  • Change: Tweaked Exceptions - Error/Exception Handler Configuration #6577
  • Change: Twig runtime loader. #6127
  • Change: Twig Sandbox: This replaces safe_twig with Twig's Sandbox extension. #6131
  • Change: Update config.yml timezone info #6464
  • Change: Use blocks instead of macro for {{ fields() }} rendering. #6784 #6778 #6811
  • CodeClimate: Enable grep engine #6619
  • Deprecation: LogChangeRepository::countChangeLog(). #6656
  • Deprecation: Add deprecation notices for $app['controller.classmap']. #6526
  • Deprecation: Deprecate and replace use of {{ link() }} #6614
  • Deprecation: Deprecated \Bolt\Exception\FilesystemException #6674
  • Deprecation: Deprecated Swift_MailTransport #6666
  • Deprecation: Deprecated ResourceManager Completely #6439, #6441
  • Deprecation: Import Twig macro template where used #6652
  • Deprecation: Remove remaining Twig global use #6685 #6686
  • Deprecation: replaced use of deprecated request object #6541
  • Deprecation: Switch YamlUpdater to use Bolt filesystem for YAML handling #6557
  • Deprecation: Use Request::isMethodSafe() according to standard #6701
  • Deprecation: Use Form::isSubmitted() before Form::isValid() #6556
  • Deprecation: Various deprecation updates #6432, #6427, #6424, #6422, #6414, #6410
  • Deprecations #6715
  • Fixed: "Complex search" crash bug #6757
  • Fixed: "Info (?)" sign after each field title in the content editor #6850
  • Fixed: "Search with setcontent" when using strict settings. #6753
  • Fixed: [3.3] Use correct class for deprecation notice #6444
  • Fixed: Add an interface check around the set method #6471
  • Fixed: Add Backwards compatibility binding to extend overview page #6335
  • Fixed: Additional fix for TemplateField select options #6845
  • Fixed: Base Directory Fixes for Local Extensions #6327
  • Fixed: BC fix to ensure sandbox is disabled after exception is thrown. #6134
  • Fixed: Better handling of invalid images in thumbs #45
  • Fixed: Broken links in "Extra" menu - Fix menu urls and integrate url generator. #6139 #6142
  • Fixed: Button to toggle between config and config_local in 3.3 was missing. Related has items when its count is greater than zero. #6516 #6513
  • Fixed: Check file_uploads ini directive for allowed uploads. #5973
  • Fixed: Clear 'exception' and 'translation' too, when clearing cache. #6546
  • Fixed: Counting double in list overview. Only adding record to the list, if it wasn't already selected before. #6717
  • Fixed: Decouple exceptions from exception handling #6361
  • Fixed: Disable the class loader if not specifically enabled during boot. #6534
  • Fixed: Don't boot disabled extensions #6599
  • Fixed: Don't handle onclick in HTML, but rather in JS, when we're sure dependencies have loaded. #6184
  • Fixed: Don't hydrate extension fields that haven't implemented it. #6274
  • Fixed: Don't set homepage template to null, if theme.yml is not present. #6253
  • Fixed: Don't throw exception for broken images, but return "empty" image info #52 & #54
  • Fixed: Don't throw exception if stack is empty (or updating from an older version). #6284
  • Fixed: Ensure default for image.file in preview. #6512
  • Fixed: Ensure fields are using new interface before calling methods #6458 (fixes #6420, #6273)
  • Fixed: First check user: Changing Database settings not resetting session #6481 #6483
  • Fixed: Fix LowlevelChecks::disableApacheChecks() not passing value to ResourceManager. #6528
  • Fixed: Fix ymlink twig filter for multiple matches. #6290
  • Fixed: Fix AND lookups on relationship/join searches #6401
  • Fixed: Fix BC for old thumbnail config paths in notfound_image and error_image. #6728
  • Fixed: Fix booting extension's service providers #6340
  • Fixed: Fix bug causing missing incoming relations #6312
  • Fixed: Fix bugs with PathResolver/ResourceManager #6303
  • Fixed: Fix content changelog field handling #6565
  • Fixed: Fix determining base path for dev extensions in src folder #6365
  • Fixed: Fix edge-case cache:clear fails. ("cache/production/data" is not writable) #6747
  • Fixed: Fix extend page pre-release version display. #6279
  • Fixed: Fix for maintaining key association in {{ unique() }} #6354
  • Fixed: Fix for queries where fields have the same name as contenttype. #6779
  • Fixed: Fix for setups using different database prefix #6300
  • Fixed: Fix for sortable selects. #6638
  • Fixed: Fix frontend taxonomy lookups where key is different to slug #6495
  • Fixed: Fix incorrect join aliased content_id to id. #6286
  • Fixed: Fix News widget on dashboard #6575
  • Fixed: Fix not being able to delete records from dashboard. #6289
  • Fixed: Fix PathResolver infinite recursion #6679
  • Fixed: Fix recent Nut I/O backwards compatibility regression, and clean up $app use. #6580
  • Fixed: Fix sandbox not being disabled when exception is thrown. #6132
  • Fixed: Fix snippets on redirection. #6288
  • Fixed: Fix TemplateView handling #6624
  • Fixed: Fix to allow extension interface backwards compatibility #6418
  • Fixed: Fix to incorrect Extension Field Initialisation. #6271
  • Fixed: Fix twig ismobileclient() to actually not use super global. #6124
  • Fixed: Fix/clean up _sub_fields.twig for {{ fields() }} #6474
  • Fixed: Fixes for .bolt.yml / .bolt.php custom path handling [#6805](https://github.com/bolt/bolt/pull/6805]
  • Fixed: Fixing the link to docs.bolt.cm/templating/fields-tag #6611
  • Fixed: Force saving of repeaters, even when empty. #6518
  • Fixed: Get fields from repeater, even if repeater isn't last. Obsoletes hackish include of HTML field. #6719
  • Fixed: Handle empty repeaters in Templatefields #6328
  • Fixed: Import macros where they are actually used, silencing Deprecation notices. #6532
  • Fixed: Incoming relation was not displayed when relation is empty. #6117
  • Fixed: Keeping keys: intact for select fields. #6859
  • Fixed: links in 'node_modules' no longer break "list templates" in backend. #6460
  • Fixed: Maintain order for multiple-select fields. #6355
  • Fixed: Make content search case insensitive on every platform. #6110 #6109
  • Fixed: Make repeater fields live editable. #6173
  • Fixed: Make sure the Bolt nub has no background or border in the debug toolbar. #6268
  • Fixed: Make thrown SecurityPolicy in Twig-in-content show Exception, instead of outputting HTML on page. #6504
  • Fixed: Minor updates to base-2016 #6210
  • Fixed: Missing "Delete" button appears when it should. #6468
  • Fixed: Move the getRepeaters call into the nohydrate block. #6283
  • Fixed: Only add the label in the content editor, when the label isn't empty #6837
  • Fixed: Optimise Queries for Repeater Fields. #6280
  • Fixed: Performance issue fixing in ContentRelationTrait #6108
  • Fixed: prepending theme path instead of appending, fixing template priority order. #6480
  • Fixed: Prevent filelist exceptions when file not found #6760
  • Fixed: Register Silex provider first, and don't authenticate base route #6449
  • Fixed: Remove array_column; doesn't work for PHP 5.5/5.6. #6278 #6287
  • Fixed: Remove outdated requirement on ext-posix #6604
  • Fixed: Reset styles for last field in repeater since its in its own panel #6338
  • Fixed: Resolve template for template fields. #6237
  • Fixed: Select fields … The sage continues: Make sure type: select fields properly maintain order, persist properly and show all items. #6841
  • Fixed: Session Handlers Phase II #6484
  • Fixed: Set database character set & collation as configured. For MySQL. #6533
  • Fixed: Show a message for when using Preview if using fields() and Repeaters. #6633
  • Fixed: Skip symlinks instead of throwing exceptions on local filesystems #6744
  • Fixed: Slugify slugs on edit save #6411, #6408
  • Fixed: Stricter parameter handling in {{ order }} #6838
  • Fixed: Sync PathResolver paths to ResourceManager without bootstrap #6364
  • Fixed: Themes - Some extra safeguards against exceptions in "strict" mode in _sub_fields.twigs. #3
  • Fixed: This ensures no DI services/parameters are retrieved until boot time.
  • Fixed: Timed publish tweak. #5680
  • Fixed: Tiny update for backend's frontend assets, removing some unneeded Select2 files. #6560
  • Fixed: Update DatabaseExceptionTrait.php #6470
  • Fixed: Update legacy default_status use in contenttypes.yml #6738
  • Fixed: Updating and tweaking the build process. #6233
  • Fixed: Use "is defined" to check if a block exists #6555
  • Fixed: Use ternary logic on block to prevent printing blocks #6662
  • Remove createQueryBuilder() override where not needed #6650
  • Style: Pre-release code style pass #6702
  • Tests: [Scrutinizer] Remove unused metrics #6446
  • Tests: Back-port of deprecations work #6356
  • Tests: Bootstrap tests & a couple of minor bug fixes #6844
  • Tests: Codeception Layout & clean ups #6722
  • Tests: Codeception Tweaks #6665
  • Tests: Cover installed Composer extensions in PackageManagerTest #6690
  • Tests: Deprecation - getMock to getMockBuilder. #6201
  • Tests: Extension coverage. #6521
  • Tests: More coverage #6678 #6675
  • Tests: More Silex 2 deprecation tweaks #6567 #6564
  • Tests: Need for speed #6745
  • Tests: Nut coverage #6588
  • Tests: PHP 7.1 fix. #6085
  • Tests: Re-enable skipped and incomplete tests #6393
  • Tests: Remove phpmd/phpmd & squizlabs/php_codesniffer from require-dev #6692
  • Tests: Restore last incomplete unit test #6397
  • Tests: Travis cron code coverage #6358
  • Tests: Update expected element for submit button. #6202
  • Tests: Update mock builder to be forward-compatible #6721
  • Travis: Remove remaining legacy sudo use #6595
  • Updated: Dutch translation file for 3.3 #6843
  • Updated: Updates to base-2016 #6281