This is our v1.9.0 stable release of Mbin. This release includes security patches of upstream dependencies, documentation improvements, various performance improvements, new features, bug fixes, design improvements, Docker improvements and so much more...
Comparison to previous stable version v1.8.4 (ignoring the previous RC releases):
| DB migrations | New ENV vars | Renamed ENV vars | Admin guide changes | Suggest cache clearing | New dependencies |
|---|---|---|---|---|---|
| ☑️ | ☑️ | ☑️ | ☑️ | ☑️ | ☑️ |
We have 3 different summaries below. One for end-users, one for server admins, and finally a summary for Mbin developers.
Below the summaries you will find the upgrade instructions. Please read the instructions very carefully, since we did introduce backwards incomparable changes.
Summary for Users
This release contains numerous improvements and changes that we can't list everything here, so we'll stick to the highlights (in random order).
We enhanced security so that after a user changes their password or 2FA, all the current sessions of that user will be invalid and the user will need to log in again.
A new combined front page. You could make the combined front page the default in your profile settings. Which means you see both threads and microblogs combined on the homepage.
We also introduced a new feature under general settings, where you can select "Who can send you a direct message" (defaults to everybody).
We added support for magazine banners in Mbin (which is also compatible with Lemmy Communities).
Mbin combines the thread form into just one form (instead of having article, link, and photo having a separate form). Mbin now also federates bans correctly (both incoming and outgoing bans).
Global mods can now manage (view, approve and/or deny) account signups. Global mods can now also receive signup notifications, which will also come with a new menu item in the drop-down menu.
Plus various other bug fixes and CSS layout improvements, ban notification fixes, and too many other fixes to mention here.
Summary for Server Admins
Multiple Docker setup enhancements, we upgraded to Debian Trixie images. We also upgraded to use Node v24 (current LTS release) within our Mbin Docker images. Plus we added a new amqproxy service to the docker compose file. See upgrade instructions for Docker below for more info.
We now added two different server settings:
- Restrict "Random Threads/Posts" sidebar sections to local only
- Restrict "Active people" sidebar section to local only
The first option has been known to cause SQL performance issues (we recommended NOT enabling this first option), hence we gave you the two options. The second option shows local only active users, which does NOT impact performance (so feel free to enable that option if you wish).
Mbin now comes with new moderation log filter capabilities.
We also documented Anubis setup for Mbin, setup is optional. However, Anubis could protect your server from DDoS attacks or other unwanted traffic towards your server.
Mbin now also has a command to rotate the private keys for one user or all the local users.
We renamed an existing environment variable: MAX_IMAGE_BYTES to: MBIN_MAX_IMAGE_BYTES, please rename the variable if you have set it. On top of that we also added a new environment variable: MBIN_USE_FEDERATION_ALLOW_LIST (default value: false) for in the .env file. We also added MBIN_NEW_USERS_NEED_APPROVAL (also default value: false) several months ago, in case you didn't added that variable yet. Although both variables are optional to add. See the latest .env.example file.
Finally, we upgraded several Composer dependency packages plus Symfony recipe updates as well as NPM package updates. So like always be sure to run: ./bin/post-upgrade to install all the updated Composer packages (on bare metal). Which should fix security vulnerabilities in our composer & npm depedency packages. And clear all caches.
Summary for developers
We extended and improved the getting started guide, documenting how to leverage dev containers to get started. Please follow the full "Docker as a dev server" guide if you wish to help with development.
We also created a new Fediverse developer page that lists all our ActivityPub messages.
Upgrade Instructions
For Docker
Changes to Docker compose.yaml file (ATTENTION!)
Take a look at the latest compose.yaml file and compare it with your local version:
- We added a new
amqproxyservice, do not forget to adddepends_onamqproxy. AMQProxy will improve performance and reduce TCP overhead of the AMQ protocol, used by RabbitMQ. - After that, you will need to update your
.envfile to use the hostamqproxy:5673(instead ofrabbitmq:5672) in yourMESSENGER_TRANSPORT_DSNvariable. - We upgraded the Debian version used in the Docker images from
bookwormtotrixie. - We renamed
MAX_IMAGE_BYTEStoMBIN_MAX_IMAGE_BYTESin the.envfile. Please change this variable in case you are using it.
Docker Instructions
- Get the official image or check out the code and build it locally
- Stop all containers
docker compose down - Start all containers
docker compose up -d - Since the Debian version of the PostgreSQL Docker image was upgraded, you will need to run the command below to get rid of the "collation version mismatch" warning. Note that re-indexing your entire database could take a very long time, depending on the size of your database.
docker compose exec -it postgres psql mbin mbin -c \
'REINDEX DATABASE mbin; ALTER DATABASE mbin REFRESH COLLATION VERSION;'For Bare Metal
Admin guide changes (ATTENTION!)
- For Bare Metal admins, we advise you to look into the RabbitMQ APT sources, since the RabbitMQ team changed their APT repositories recently. Be sure to update your
rabbitmq.listfile accordingly.
If you applied the latest change by running the commands mentioned in the guide, be sure to run the APT update command as well as the APT install/upgrade command for therabbitmq-serverpackage.
In case of an upgrade, you will need to enable all feature flags after the rabbitmq-server upgrade by executing the following command:sudo rabbitmqctl enable_feature_flag all. - We now documented AMQProxy (in case you are not yet using AMQProxy). We strongly advise to install & run AMQProxy (follow this guide) after that you will also need to update the
.envfile by changing theMESSENGER_TRANSPORT_DSN.
You will need to update the default RabbitMQ port (5672) to the AMQProxy port of5673(keep the rest of theMESSENGER_TRANSPORT_DSNthe same, only change the port number).
In case you have AMQProxy configured and made your changes to the.envfile, always remember to run:./bin/post-upgradecommand (which will also executecomposer dump-env prodfor you). - The
set_permissioncommand was not correctly documented, please run the following command:sudo rabbitmqctl set_permissions -p / mbin ".*" ".*" ".*"(changembintokbinuser in case you your rabbitmq user is calledkbin).
Then monitor your messenger logs and if you still experience "channel error: 404" or "message: NOT_FOUND" errors on one or more queues (you will see errors messages if that is the case every ~10 minutes), we recommend removing that queue manually (eg. via the RabbitMQ Web interface). Mbin will then automatically recreate the missing queue with the correct permissions again. - We also changed some
php.iniconfigurations, by mainly increasing thememory_limitto 512MB. If you have sufficient RAM available, you can decide to increase the memory limit if you wish (this limit is per child). Again, this is optional but can be part of better fine-tuning of your server, which heavily depends on your server resources. - We also updated the Setup Supervisor section of the documentation. You can save storage and reduce disk I/O by adding
stdout_logfile=NONEandredirect_stderr=trueto your supervisormessenger-worker.conffile. Because most of the messages will be logged to the Mbin production log as well. - Finally, we renamed
MAX_IMAGE_BYTEStoMBIN_MAX_IMAGE_BYTESin the.envconfiguration. Please rename the variable as well in case you use it.
Bare metal Instructions
- Login as the mbin/kbin user:
su mbin - Go to your repo
cd /var/www/mbin - Get the new release:
git fetch && git checkout v1.9.0 - Run the update script:
bash bin/post-upgrade. - Run
exitso we are back at the root user (or put a sudo in front of every command) - Clear your opcache by reloading php fpm
systemctl restart php8.4-fpm(or for PHP 8.3:systemctl restart php8.3-fpm) - Restart the messengers:
supervisorctl restart messenger:*
What's Changed
- Add the nodeinfo endpoints to the allowlist by @BentiGorlich in #1717
- Add
$includeContextparameter by @BentiGorlich in #1718 - Create federation documentation by @BentiGorlich in #1720
- Improve the contributing docs by @BentiGorlich in #1719
- Update npm packages by @BentiGorlich in #1721
- Add a type filter to the modlogs by @BentiGorlich in #1714
- Properly logout user after changing the password or 2fa by @BentiGorlich in #1724
- Increase memory limit to 512M (and slightly increase post_max_size) by @melroy89 in #1726
- Implement a combined front page by @BentiGorlich in #1696
- Edit anubis docs by @BentiGorlich in #1730
- docs for devcontainer by @blued-gear in #1729
- Translations update from Hosted Weblate by @weblate in #1732
- Remove crosspost information from list API endpoints by @BentiGorlich in #1731
- Change internal error Mbin servers link to joinmbin.org by @jwr1 in #1734
- Performance Improvements for the new combined front page by @BentiGorlich in #1697
- docs(contributor): contributors readme action update by @github-actions[bot] in #1739
- docs(contributor): contributors readme action update by @github-actions[bot] in #1742
- Fix missing delete activity when normal user deletes their content by @BentiGorlich in #1743
- Translations update from Hosted Weblate by @weblate in #1745
- Fix
FollowHandlerby @BentiGorlich in #1746 - docs(contributor): contributors readme action update by @github-actions[bot] in #1747
- Translations update from Hosted Weblate by @weblate in #1752
- Add dropdown for who can send you a private message by @BentiGorlich in #1744
- Fix PeerTube embeds by @BentiGorlich in #1757
- filter crosspost candidates by image and write tests for crossposts by @blued-gear in #1751
- docs(contributor): contributors readme action update by @github-actions[bot] in #1758
- post_api_magazine_entry_create_image can accept entry body by @blued-gear in #1728
- Add command to rotate private keys by @BentiGorlich in #1725
- Fix mentions from mastodon by @BentiGorlich in #1756
- Upgrade to trixie Docker images by @melroy89 in #1762
- Translations update from Hosted Weblate by @weblate in #1761
- Translations update from Hosted Weblate by @weblate in #1766
- Upgrade to php8.4 in our CICD docker image by @melroy89 in #1763
- Use Ubuntu 25.04 for PHP 8.4 by @melroy89 in #1767
- Revert all by @melroy89 in #1769
- Update php-cs-fixer by @melroy89 in #1768
- Implement magazine banners by @BentiGorlich in #1759
- unify forms for creating an entry (article, link, photo) into one by @blued-gear in #1749
- Federate bans by @BentiGorlich in #1700
- docs(contributor): contributors readme action update by @github-actions[bot] in #1771
- Allow global mods to manage signups and receive notifications by @jwr1 in #1770
- Use the correct expression class by @BentiGorlich in #1774
- Add revert option to rotate keys command by @BentiGorlich in #1775
- sort list of languages for entry form alphabetically by @blued-gear in #1777
- docs(contributor): contributors readme action update by @github-actions[bot] in #1778
- don't open the comment page when tapping a spoiler header by @blued-gear in #1779
- Translations update from Hosted Weblate by @weblate in #1772
- Greatly reduce table padding by @BentiGorlich in #1781
- Better handle the Argument #3 () must be of type array|string, null by @melroy89 in #1776
- add some margin around the expand button by @blued-gear in #1784
- Table td padding by @melroy89 in #1786
- docs(contributor): contributors readme action update by @github-actions[bot] in #1787
- Fix 2FA not needed when authorizing an API client by @BentiGorlich in #1782
- Fix options on the comments view by @BentiGorlich in #1783
- Node.js v24 is now the latest LTS by @melroy89 in #1785
- Translations update from Hosted Weblate by @weblate in #1792
- Fix flaky test by @BentiGorlich in #1795
- Fix the toolbar in the entry create form by @BentiGorlich in #1794
- Implement emoji and mention autocomplete by @BentiGorlich in #1791
- Add
Blockactivities to federation documentation by @BentiGorlich in #1793 - Fix frontend linting and run it in CI by @BentiGorlich in #1790
- Use amqproxy in Docker setup by @jwr1 in #1797
- update oauth server and fix deprecations by @BentiGorlich in #1789
- docs(contributor): contributors readme action update by @github-actions[bot] in #1801
- Translations update from Hosted Weblate by @weblate in #1802
- docs: Small RabbitMQ documentation improvements by @melroy89 in #1796
- docs: Fix rabbitmq permission issues by @melroy89 in #1804
- Update contribution action to v2.3.11 by @melroy89 in #1805
- Translations update from Hosted Weblate by @weblate in #1807
- Update robots.txt + add extra bad bots by @melroy89 in #1808
- Docs: Add AMQProxy to our docs + improved RabbitMQ install guide by @melroy89 in #1806
- Add paths-ignore for pull requests to action.yaml by @melroy89 in #1809
- Make tags field not required in the magazine panel by @BentiGorlich in #1799
- fix microblog not active in header when post is shown by @blued-gear in #1812
- Introducing federation allow list and refactoring by @BentiGorlich in #1780
- Add
MBIN_USE_FEDERATION_ALLOW_LISTto.env.example_dockerby @BentiGorlich in #1813 - Order all instances by domain by @BentiGorlich in #1814
- Fix type error in
NotificationBaseApiby @BentiGorlich in #1816 - Fix/more margin for comment expand btn by @blued-gear in #1810
- docs(contributor): contributors readme action update by @github-actions[bot] in #1817
- Crossposts by @blued-gear in #1788
- Better explain how to run our integration tests by @melroy89 in #1819
- docs(contributor): contributors readme action update by @github-actions[bot] in #1820
- Use composer via a simple copy binary file from pre-built by @melroy89 in #1823
- No-dev and --abandoned flag on composer audit by @melroy89 in #1822
- Try to upgrade to Symfony v7.3.x + fix audit by @melroy89 in #1818
- Run available composer recipes by @melroy89 in #1824
- Fix api doc build (downgrade zircote/swagger-php) by @melroy89 in #1826
- Update to error.php by @melroy89 in #1825
- update swagger-php and use new attribute for encoding of file upload by @blued-gear in #1828
- Translations update from Hosted Weblate by @weblate in #1830
- docs(contributor): contributors readme action update by @github-actions[bot] in #1831
- Remove entry component from edit thread + fix top-margin by @melroy89 in #1811
- Fix Attempt to read property "root" on null by @melroy89 in #1829
- Introducing v1.9.0-rc1 by @melroy89 in #1833
- Translations update from Hosted Weblate by @weblate in #1834
- Translations update from Hosted Weblate by @weblate in #1836
- Improve Anubis docs by @melroy89 in #1835
- Missing options and optional username argument by @melroy89 in #1837
- Fix A logged in user is required to resolve the authorization request (500 error) by @melroy89 in #1839
- Use repository-dispatch to dispatch update-docs event to mbin-docs repo by @melroy89 in #1838
- Fix null exception in ban notification by @BentiGorlich in #1848
- Explain how to disable the log files of supervisor jobs by @melroy89 in #1849
- Small fixes bare metal docs by @melroy89 in #1855
- Fix some problems with the emoji and mention autocomplete by @BentiGorlich in #1853
- Translations update from Hosted Weblate by @weblate in #1854
- Small doc fixes in nginx by @melroy89 in #1857
- Improve Performance in the
ContentRepositoryby @BentiGorlich in #1863 - Add magazine followers in cc of
Announceactivities by @BentiGorlich in #1851 - Use the
NativeQueryAdapterinstead of fetching everything by @BentiGorlich in #1864 - Fix Undefined array key "path" by @melroy89 in #1866
- WebFingerParameters::getParams(): use !empty() instead of isset() by @blued-gear in #1867
- Add a user setting for the content being displayed by default by @BentiGorlich in #1852
- Translations update from Hosted Weblate by @weblate in #1865
- Improve English default view by @melroy89 in #1870
- Fix z5 focus issue with more button by @melroy89 in #1871
- Add missing new variables to devcontainer by @melroy89 in #1872
- Docs: comment-out options in messenger (for developers) by @melroy89 in #1874
- Increase shared memory size postgresql container by @melroy89 in #1876
- Translations update from Hosted Weblate by @weblate in #1875
- Translations update from Hosted Weblate by @weblate in #1877
- Add user admin panel to more then just the overview.html page by @melroy89 in #1879
- Add 2 settings for the sidebar sections + give performance warning about the random section + fix max_image_bytes by @melroy89 in #1878
- Translations update from Hosted Weblate by @weblate in #1880
- Translations update from Hosted Weblate by @weblate in #1882
- Use the SI standard for getMaxImageByteString by @melroy89 in #1881
- Fix broken combined (homepage) + Fix API endpoints by @melroy89 in #1883
- Translations update from Hosted Weblate by @weblate in #1887
- docs(contributor): contributors readme action update by @github-actions[bot] in #1889
- Translations update from Hosted Weblate by @weblate in #1890
- Add missing migration for front_default_content DB enum by @melroy89 in #1891
- update Devcontainer Docs to use Postgres 18 by @blued-gear in #1893
- icon for url threads by @blued-gear in #1894
- Improve ban notifications by @BentiGorlich in #1850
- 2nd attempt at fixing the notifications from other users by @BentiGorlich in #1856
- Improve performance of the main content query by @BentiGorlich in #1892
- Adapt the AP presentation of an entry with a URL and an image by @BentiGorlich in #1862
- Prepare for RC2 by @melroy89 in #1895
- Clean up the duplicates from .env.devcontainer by @melroy89 in #1897
- Break out of function when banned by @melroy89 in #1896
- Fix multiple mentions, fix magazine mentions by @BentiGorlich in #1900
- Translations update from Hosted Weblate by @weblate in #1899
- Fix Mercure transport configuration on Docker setups by @CocoPoops in #1903
- Translations update from Hosted Weblate by @weblate in #1901
- Improve findByActivity by @melroy89 in #1902
- Keep the sort options close together profile settings by @melroy89 in #1904
- retry update activity if entity was not found by @blued-gear in #1905
- Translations update from Hosted Weblate by @weblate in #1906
- Do not use settings table for max images bytes (Cleanup both MAX_IMAGE_BYTES and MBIN_MAX_IMAGE_BYTES from table) by @melroy89 in #1907
- Translations update from Hosted Weblate by @weblate in #1908
- Upgrade release version to rc3 by @melroy89 in #1909
- We can't count by @melroy89 in #1911
- Anubis setup: add the missing client ips to the logs by @BentiGorlich in #1910
- Fix migration from banned instances by @BentiGorlich in #1913
- Fix user with push subscription not being deleted by @BentiGorlich in #1914
- Translations update from Hosted Weblate by @weblate in #1912
- Bump to v1.9.0 stable by @melroy89 in #1915
New Contributors
- @blued-gear made their first contribution in #1729
Full Changelog: v1.8.4...v1.9.0