This repository was archived by the owner on Jan 14, 2026. It is now read-only.
Minor feature release 3.3.0
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:updatecommand. #6496 - Added: Add scoping for new storage
getContentqueries. #6188 - Added: Add support for extension definition in bolt.yml file #6324
- Added: Added
app/nutCommands 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
.boltbootstrap config. #6155 - Added: API compatibility with legacy content objects: Added
.renderedvalue()to consistently get values. #6473 - Added: Collection Library:
Bolt\Collection\BagandBolt\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
hasParametermethod. #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/collectionObject 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.phpto 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_bytesinstead of any of its sources. Fixes the/dev/urandomissue on sites withopen_basedirrestrictions. #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
mbstringextension #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
|twigfilters withtemplate_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.ymltimezone info #6464 - Change: Use
blocksinstead ofmacrofor{{ 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
configandconfig_localin 3.3 was missing. Related has items when its count is greater than zero. #6516 #6513 - Fixed: Check
file_uploadsini 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.filein 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
ymlinktwig filter for multiple matches. #6290 - Fixed: Fix AND lookups on relationship/join searches #6401
- Fixed: Fix BC for old thumbnail config paths in
notfound_imageanderror_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:clearfails. ("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_idtoid. #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
$appuse. #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.twigfor{{ fields() }}#6474 - Fixed: Fixes for
.bolt.yml/.bolt.phpcustom 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
getRepeaterscall 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: selectfields 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_statususe incontenttypes.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 -
getMocktogetMockBuilder. #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_codesnifferfromrequire-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