- Testing with php8.1 (https://github.com/flarum/framework/pull/3102).
- Migrate fully to Yarn (https://github.com/flarum/framework/pull/3155).
- Handle post rendering errors to avoid crashes (https://github.com/flarum/framework/pull/3061).
- Added basic filtering, sorting, and pagination to groups endpoint (https://github.com/flarum/framework/pull/3084).
- Pass IP address to API Client pipeline (https://github.com/flarum/framework/pull/3124).
- Rename Extension Page "Uninstall" to "Purge" (https://github.com/flarum/framework/pull/3123).
- [A11Y] Improve accessibility for discussion reply count on post stream (https://github.com/flarum/framework/pull/3090).
- Improved post loading support (https://github.com/flarum/framework/pull/3100).
- Rewrite SubtreeRetainer into Typescript (https://github.com/flarum/framework/pull/3137).
- Rewrite ModalManager and state to Typescript (https://github.com/flarum/framework/pull/3007).
- Rewrite frontend application files to Typescript (https://github.com/flarum/framework/pull/3006).
- Allow extensions to modify the minimum search length in the Search component (https://github.com/flarum/framework/pull/3130).
- Allow use of any tag in `listItems` helper (https://github.com/flarum/framework/pull/3147).
- Replace `for ... in` with `Array.reduce` (https://github.com/flarum/framework/pull/3149).
- Page title format is now implemented through translations (https://github.com/flarum/framework/pull/3077, https://github.com/flarum/framework/pull/3228)
- Add `aria-label` attribute to the navigation drawer button (https://github.com/flarum/framework/pull/3157).
- Convert extend util to TypeScript (https://github.com/flarum/framework/pull/2928).
- Better typings for DiscussionListState (https://github.com/flarum/framework/pull/3132).
- Removed [forum] prefix from Request Password and Email Confirmation emails ([a4a81c0](https://github.com/flarum/framework/commit/a4a81c0ec237476cd6e7ca00c1ed9465493af476))
- Adopt huntr.dev for handling our security vulnerability reports (https://github.com/flarum/framework/pull/2918)
- Maintenance handler can now be replaced through the service container (ioc) ([4acff91](https://github.com/flarum/framework/commit/4acff91f8063fcced9bf8c9a76fbb510d06823c0))
- The colors on the auto generated avatars are now based on the Display Name of the user (https://github.com/flarum/framework/pull/2873)
-`load()` method on `ApiController` extender to allow eager loading of relations (https://github.com/flarum/framework/pull/2724)
- Installation supports enabling a set of extensions (https://github.com/flarum/framework/pull/2757)
- RequestUtil helper class added to abstract the logic of the actor, session, locale and route name from the request (https://github.com/flarum/framework/pull/2449)
- Code scanning action with GitHub CodeQL (https://github.com/flarum/framework/pull/2744)
- The Formatter extender now has an `unparse` method to allow extensions to hook into the unparsing of content (https://github.com/flarum/framework/pull/2780)
- A Filesystem extender allows direct modification and addition of filesystem disks (https://github.com/flarum/framework/pull/2732)
- A slug driver based on the User ID was introduced (https://github.com/flarum/framework/pull/2787)
- An extensible users list was added to the admin area (https://github.com/flarum/framework/pull/2626)
- Headers hardened by adding Referer Policy, Xss Protection and Content type (https://github.com/flarum/framework/pull/2721)
- Now tracking bundle sizes to keep an eye on web performance (https://github.com/flarum/framework/pull/2695)
- Eager load relations on ListPostsController to improve performance (https://github.com/flarum/framework/pull/2717)
- Replace classList with clsx library (https://github.com/flarum/framework/pull/2760)
- Replaced the javascript based loading spinner with a pure CSS version (https://github.com/flarum/framework/pull/2764)
- Route names now have to be unique (https://github.com/flarum/framework/pull/2771)
- ActorReference is now available from the error handler middleware (https://github.com/flarum/framework/pull/2410)
- The `migrations` table now has an Auto Increment ID (https://github.com/flarum/framework/pull/2794)
- Assets and avatars are now managed using Laravel filesystem disks (https://github.com/flarum/framework/pull/2729)
- Extracted asset publishing (`php flarum assets:publish`) from migrating (https://github.com/flarum/framework/pull/2731)
- Assets were compiled in the format `<asset>-<revision>.<js|css>`, this is now `<asset>.<js|css>?v=<revision>` (https://github.com/flarum/framework/pull/2805)
- The powered by header can now be configured in the config under `headers` (https://github.com/flarum/framework/pull/2777)
- Switched to the ICU format for translation files (https://github.com/flarum/framework/pull/2759)
- Run integration tests in transaction (https://github.com/flarum/framework/pull/2304)
- Allow policies to return a boolean for simplified allow/deny (https://github.com/flarum/framework/pull/2534)
- Converted highlight helper to typescript (https://github.com/flarum/framework/pull/2532)
- Add accessibility attributes to Mark as Read button (https://github.com/flarum/framework/pull/2564)
- Dismiss errors on change email modal upon a new request ([00913d5](https://github.com/flarum/framework/commit/00913d5b0be2172cfce1f16aaf64a24f3d2e6d4b))
- Disabled extensions now are marked with a red circle instead of a red dot (https://github.com/flarum/framework/pull/2562)
- Extension dependency errors now show the extension title instead of the ID (https://github.com/flarum/framework/pull/2563)
- Change `mutate` method on ApiSerializer extender to `attributes` (https://github.com/flarum/framework/pull/2578)
- Moved locale files to the core from the language pack (https://github.com/flarum/framework/pull/2408)
- AdminPage extensibility and generic improvements (https://github.com/flarum/framework/pull/2593)
- Remove entry of authors, link to https://flarum.org/team (https://github.com/flarum/framework/pull/2625)
- Search and filtering are split (https://github.com/flarum/framework/pull/2454)
- Move IP identification into a middleware (https://github.com/flarum/framework/pull/2624)
- Split user edit permissions into permissions for editing of user credentials, username, groups and suspending (https://github.com/flarum/framework/pull/2620)
- Reduced number of admin extension categories (https://github.com/flarum/framework/pull/2604)
- Move search related classes to a dedicated Query namespace (https://github.com/flarum/framework/pull/2645)
- Rewrite common helpers into typescript (https://github.com/flarum/framework/pull/2541)
-`TextEditor` is moved to the common namespace for use in the admin frontend (https://github.com/flarum/framework/pull/2649)
- Update Laravel/Illuminate components to 8 (https://github.com/flarum/framework/pull/2576)
- Eager load relations in discussion listing to improve performance (https://github.com/flarum/framework/pull/2639)
- Replace `user` gambit with `author` gambit ([612a57c](https://github.com/flarum/framework/commit/612a57c4664415a3ea120103483645c32acc6f12))
- Posts page of on user profile loads posts using username instead of id ([30017ee](https://github.com/flarum/framework/commit/30017eef09ae9e78640c4e2cacd4909fffa8d775))
- Composer header is hidden on mobile devices (https://github.com/flarum/framework/pull/2279)
- Cannot delete a post or discussion of a deleted user (https://github.com/flarum/framework/pull/2521)
- DiscussionListPane jumps around not keeping the scroll position (https://github.com/flarum/framework/pull/2402)
- Infinite scroll on notifications dropdown broken (https://github.com/flarum/framework/pull/2524)
- The show language selector switch remains toggled on ([9347b12](https://github.com/flarum/framework/commit/9347b12b47bf4ab97ffb7ca92673604b237c1012))
- Model Visibility extender throws exception on extensions that aren't installed or enabled (https://github.com/flarum/framework/pull/2580)
- Extensions are marked as enabled when enabling fails to unmet extension dependencies (https://github.com/flarum/framework/pull/2558)
- Routes to admin extension pages without a valid ID break the admin page (https://github.com/flarum/framework/pull/2584)
- Disabled fieldset use an incorrect CSS property `disallowed` (https://github.com/flarum/framework/pull/2585)
- Scrolling to a post that is already loaded the Load More button shows and does not trigger (https://github.com/flarum/framework/pull/2388)
- Opening discussions on some mobile devices require a double tap (https://github.com/flarum/framework/pull/2607)
- iOS devices show erratic behavior in the post stream while updating (https://github.com/flarum/framework/pull/2548)
- Small mobile screens partially hides the composer when the keyboard is open (https://github.com/flarum/framework/pull/2631)
- Clearing cache does not clear the template cache in storage/views (https://github.com/flarum/framework/pull/2648)
- Boot errors show critical information (https://github.com/flarum/framework/pull/2633)
- List user endpoint discloses last online even if user choose against it (https://github.com/flarum/framework/pull/2634)
- Group gambit disclosed hidden groups (https://github.com/flarum/framework/pull/2657)
- Search results on small windows not fully visible (https://github.com/flarum/framework/pull/2650)
- Composer goes off screen on Safari when starting to type (https://github.com/flarum/framework/pull/2660)
- A search that has no results shows the search results dropdown ([b88a7cb](https://github.com/flarum/framework/commit/b88a7cb33b56e318f11670e9e2d563aef94db039))
- The composer modal moves around when typing on Safari ([a64c398](https://github.com/flarum/framework/commit/a64c39835aba43e831209609f4a9638ae589aa41))
-`Rememberer::remember` argument `$token` should receive an instance of `RememberAccessToken` with `AccessToken` being deprecated (https://github.com/flarum/framework/pull/2651)
- Web updater does not take into account subfolder installations (https://github.com/flarum/framework/pull/2426).
- Callables handling in extenders failed (https://github.com/flarum/framework/pull/2423).
- Scrolling on mobile from PostSteam changes didn't work correctly (https://github.com/flarum/framework/pull/2385).
- Side pane covers part of the discussion page due to `app.discussions` being empty (https://github.com/flarum/framework/commit/102e76b084bf47fdfb4c73f95e1fbb322537f7aa).
- Change email modal keeps showing the previous error message even on success (https://github.com/flarum/framework/pull/2467).
- Comment count not updated when discussions are deleted (https://github.com/flarum/framework/pull/2472).
-`goToIndex` in PostStream does not trigger an xhr to retrieve new data (https://github.com/flarum/framework/commit/09e2736cbcc267594b660beabbd001d9030f9880).
- On refresh the post number is reduced by one (https://github.com/flarum/framework/pull/2476).
- Queue worker would instantiate a new Queue factory, not the bound one (https://github.com/flarum/framework/pull/2481).
- Header accidentally has a border bottom (https://github.com/flarum/framework/pull/2489).
- Namespace mentioned in docblock is incorrect (https://github.com/flarum/framework/pull/2494).
- New `hasPermission()` helper method for `Group` objects ([9684fbc](https://github.com/flarum/framework/commit/9684fbc4da07d32aa322d9228302a23418412cb9))
- Expose supported mail drivers in IoC container ([208bad3](https://github.com/flarum/framework/commit/208bad393f37bfdb76007afcddfa4b7451563e9d))
- More test for some API endpoints ([1670590](https://github.com/flarum/framework/commit/167059027e5a066d618599c90164ef1b5a509148))
- The `Formatter\Rendering` event now receives the HTTP request instance as well ([0ab9fac](https://github.com/flarum/framework/commit/0ab9facc4bd59a260575e6fc650793c663e5866a))
- Check and enforce minimum MariaDB ([7ff9a90](https://github.com/flarum/framework/commit/7ff9a90204923293adc520d3c02dc984845d4f9f))
- Revert publication of assets when installation fails ([ed9591c](https://github.com/flarum/framework/commit/ed9591c16fb2ea7a4be3387b805d855a53e0a7d5))
- Benefit from Laravel's database reconnection logic in long-running tasks ([e0becd0](https://github.com/flarum/framework/commit/e0becd0c7bda939048923c1f86648793feee78d5))
- The "vendor path" (where Composer dependencies can be found) can now be configured ([5e1680c](https://github.com/flarum/framework/commit/5e1680c458cd3ba274faeb92de3ac2053789131e))
- Refactored installer, extracted Installation class and pipeline for reuse in CLI and web installers ([790d5be](https://github.com/flarum/framework/commit/790d5beee5e283178716bc8f9901c758d9e5b6a0))
- Use whitelist for enabling pre-installed extensions during installation ([4585f03](https://github.com/flarum/framework/commit/4585f03ee356c92942fbc2ae8c683c651b473954))
- Update minimum MySQL version ([7ff9a90](https://github.com/flarum/framework/commit/7ff9a90204923293adc520d3c02dc984845d4f9f))
- Signing up via OAuth providers was broken ([67f9375](https://github.com/flarum/framework/commit/67f9375d4745add194ae3249d526197c32fd5461))
- Group badges were overlapping ([16eb1fa](https://github.com/flarum/framework/commit/16eb1fa63b6d7b80ec30c24c0e406a2b7ab09934))
- API: Endpoint for uninstalling extensions returned an error ([c761802](https://github.com/flarum/framework/commit/c76180290056ddbab67baf5ede814fcedf1dcf14))
- Documentation links in installer were outdated ([b58380e](https://github.com/flarum/framework/commit/b58380e224ee54abdade3d0a4cc107ef5c91c9a9))
- Event posts where counted when aggregating user posts ([671fdec](https://github.com/flarum/framework/commit/671fdec8d0a092ccceb5d4d5f657d0f4287fc4c7))
- Admins could not reset user passwords ([c67fb2d](https://github.com/flarum/framework/commit/c67fb2d4b6a128c71d65dc6703310c0b62f91be2))
- Validation errors on reset password page resulted in HTTP 404 ([4611abe](https://github.com/flarum/framework/commit/4611abe5db8b94ca3dc7bf9c447fca7c67358ee3))
-`is:unread` gambit generated an invalid query ([e17bb0b](https://github.com/flarum/framework/commit/e17bb0b4331f2c92459292195c6b7db8cde1f9f3))
- Entire forum was breaking when the `custom_less` setting was missing from the database ([bf2c5a5](https://github.com/flarum/framework/commit/bf2c5a5564dff3f5ef13efe7a8d69f2617570ce6))
- Dropdown icon was not showing in user card when on user page ([12fdfc9](https://github.com/flarum/framework/commit/12fdfc9b544a27f6fe59c82ad6bddd3420cc0181))
- Requests were missing the `original*` attributes, which broke installations in subfolders ([56fde28](https://github.com/flarum/framework/commit/56fde28e436f52fee0c03c538f0a6049bc584b53))
- Special characters such as `%` and `_` could return incorrect results ([ee3640e](https://github.com/flarum/framework/commit/ee3640e1605ff67fef4b3d5cd0596f14a6ae73c9))
- FontAwesome component package changed paths in version 5.9.0 ([5eb69e1](https://github.com/flarum/framework/commit/5eb69e1f59fa73fdfd5badbf41a05a6a040e7426))
- Some server environments had problems accessing the system-wide tmp path for storing JS file maps ([54660eb](https://github.com/flarum/framework/commit/54660ebd6311f9ea142f1b573263d0d907400786))
- Content length of posts.content was not migrated to mediumText in 2017 ([590b311](https://github.com/flarum/framework/commit/590b3115708bf94a9c7f169d98c6126380c7056e))
- An error occurred when going to the previous route if there was no previous route found ([985b87da](https://github.com/flarum/framework/commit/985b87da6c9942c568a1a192e2fdcfde72e030ee))
-`php flarum install --defaults` - this was meant to be used in our old development VM ([44c9109](https://github.com/flarum/framework/commit/44c91099cd77138bb5fc29f14fb1e81a9781272d))
- Obsolete `id` attributes in JSON-API responses ([ecc3b5e](https://github.com/flarum/framework/commit/ecc3b5e2271f8d9b38d52cd54476d86995dbe32e) and [7a44086](https://github.com/flarum/framework/commit/7a44086bf3a0e3ba907dceb13d07ac695eca05ea))
- Fix live output in `migrate:reset` command ([f591585](https://github.com/flarum/framework/commit/f591585d02f8c4ff0211c5bf4413dd6baa724c05))
- Fix search with database prefix ([7705a2b](https://github.com/flarum/framework/commit/7705a2b7d751943ef9d0c7379ec34f8530b99310))
- Fix invalid join time of admin user created by installer ([57f73c9](https://github.com/flarum/framework/commit/57f73c9638eeb825f9e336ed3c443afccfd8995e))
- Ensure InnoDB engine is used for all tables ([fb6b51b](https://github.com/flarum/framework/commit/fb6b51b1cfef0af399607fe038603c8240800b2b), [6370f7e](https://github.com/flarum/framework/commit/6370f7ecffa9ea7d5fb64d9551400edbc63318db))
- Fix dropping foreign keys in `down` migrations ([57d5846](https://github.com/flarum/framework/commit/57d5846b647881009d9e60f9ffca20b1bb77776e))
- Fix discussion list scroll position not being maintained when hero is not visible ([40dc6ac](https://github.com/flarum/framework/commit/40dc6ac604c2a0973356b38217aa8d09352daae5))
- Fix empty meta description tag ([88e43cc](https://github.com/flarum/framework/commit/88e43cc6940ee30d6529e9ce659471ec4fb1c474))
- Remove empty attributes on `<html>` tag ([796b577](https://github.com/flarum/framework/commit/796b57753d34d4ea741dbebcbc550b17808f6c94))