<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>The Quilt Project</title><description>The mod-loader that cares.</description><link>https://quiltmc.org/</link><language>en-us</language><item><title>This is Quilt</title><link>https://quiltmc.org/en/blog/2021-04-18-this-is-quilt/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2021-04-18-this-is-quilt/</guid><description>&lt;p&gt;This is the Quilt Project: An open, community-driven modding toolchain designed primarily for Minecraft. Quilt builds on many of the technologies developed by &lt;a href=&quot;https://fabricmc.net&quot;&gt;the Fabric Project&lt;/a&gt; and is designed to take what worked well and expand on it further.&lt;/p&gt;</description><pubDate>Tue, 20 Apr 2021 09:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;why-the-fork&quot;&gt;Why the Fork?&lt;/h2&gt;
&lt;p&gt;While the Fabric Project has made significant progress towards an open and advanced mod loader, it has recently slowed down in technical innovation and failed to address several organizational issues. There are a number of changes the Quilt Project will put into place in the future to differentiate ourselves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Governmental Structure — Quilt’s organizational structure has been designed with openness in mind; no one person holds all the keys.&lt;/li&gt;
&lt;li&gt;Separation of Concerns — Those in charge of technical concerns should not be making important community decisions, and vice versa. Quilt’s teams each control a very specific aspect of the project.&lt;/li&gt;
&lt;li&gt;Quilt Loader Plugins — Will allow other parties to change mod loading behavior in new and exciting ways.&lt;/li&gt;
&lt;li&gt;Dependency Downloading — Users will no longer have to download every single dependency for each of their mods.&lt;/li&gt;
&lt;li&gt;Cleaner Bytecode Modifications — A safe, deterministic alternative to “Mixin” or modifying bytecode by hand.&lt;/li&gt;
&lt;li&gt;Faster Iteration &amp;#x26; Experimentation — The Quilt project aims to fail fast. We would rather try something and fix it then spend countless months debating whether to move forward with it in the first place.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;important-documents-and-rfcs&quot;&gt;Important Documents and RFCs&lt;/h2&gt;
&lt;p&gt;Quilt makes use of a Request for Comment system to drive major organizational changes. The RFCs are designed to make clear what changes are on the horizon, allow for comment from the community and as a maintained location for how specific parts of The Quilt Project work (eg Governance).&lt;/p&gt;
&lt;p&gt;You can view these documents (accepted and not) via our &lt;a href=&quot;https://github.com/QuiltMC/rfcs&quot;&gt;GitHub Repository&lt;/a&gt;; please use this space to submit new RFCs and comment on currently open ones.&lt;/p&gt;
&lt;p&gt;The process of RFCs is outlined in &lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/master/structure/0001-rfc-process.md&quot;&gt;RFC-0001&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;who-is-involved&quot;&gt;Who is involved?&lt;/h2&gt;
&lt;p&gt;To view an approximate membership, our &lt;a href=&quot;https://github.com/QuiltMC&quot;&gt;GitHub organization&lt;/a&gt; is a good starting place. This list is not exhaustive as it may not include members who are part of the community team.&lt;/p&gt;
&lt;h2 id=&quot;can-i-mod-on-fabric-and-quilt&quot;&gt;Can I mod on Fabric and Quilt?&lt;/h2&gt;
&lt;p&gt;Fabric mods will be able to run on Quilt initially. There may be a point in the future where this is no longer possible.&lt;/p&gt;
&lt;h2 id=&quot;i-have-more-questions&quot;&gt;I have more questions!&lt;/h2&gt;
&lt;p&gt;We have written a FAQ which hopes to provide answers to some common questions. If something is not covered there, please ask on our &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Quilt September Update</title><link>https://quiltmc.org/en/blog/2021-09-19-quilt-sept-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2021-09-19-quilt-sept-update/</guid><description>&lt;p&gt;It has been a few months since the last update on the Quilt Project.&lt;/p&gt;
&lt;p&gt;Quilt has progressed far since that initial “This is Quilt” blog with: new teams set up; several important RFCs being published and developments in many key areas.&lt;/p&gt;</description><pubDate>Sun, 19 Sep 2021 15:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;clean-room-rfc-33&quot;&gt;Clean Room RFC-33&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/master/rfc/0033-quilt-mappings-and-clean-room.md&quot;&gt;RFC-33 has been merged&lt;/a&gt;. This RFC changes how Quilt is dealing with other mappings (such as MojMap, MCP and Yarn).&lt;/p&gt;
&lt;p&gt;Key Take-Aways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quilt’s fork of Yarn will be renamed to “Quilt Mappings” (QM)&lt;/li&gt;
&lt;li&gt;All restrictions on referencing mappings projects (other than Quilt Mappings) within Quilt’s community and development spaces will be lifted&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The reasoning, possible outcomes, drawbacks and smaller changes are outlined further in the RFC document.&lt;/p&gt;
&lt;h3 id=&quot;quilt-mappings&quot;&gt;Quilt Mappings&lt;/h3&gt;
&lt;p&gt;As noted above, Quilt Mappings (QM) exist and are open to contributions.&lt;/p&gt;
&lt;h2 id=&quot;quilt-standard-library-qsl&quot;&gt;Quilt Standard Library (QSL)&lt;/h2&gt;
&lt;p&gt;The Quilt Standard Library (Quilt’s separation of the current Fabric API into distinct modules — see &lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/master/rfc/0009-qsl-structure.md&quot;&gt;RFC-9&lt;/a&gt;), now has the resource loader and base (for events).&lt;/p&gt;
&lt;p&gt;We are looking for help testing the resource loader. This can be done by using the snapshot maven repo with &lt;code&gt;org.quiltmc.qsl.core:resource-loader:1.0.0-SNAPSHOT&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;QSL is seeing new additions on top of the reorganization into modules.&lt;/p&gt;
&lt;h2 id=&quot;quilt-mod-json&quot;&gt;Quilt Mod JSON&lt;/h2&gt;
&lt;p&gt;The Quilt Mod JSON has now been mostly implemented. The design of this is outlined in &lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/master/specification/0002-quilt.mod.json.md&quot;&gt;RFC-2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The majority of the work left is smooth out issues in the loader.&lt;/p&gt;
&lt;h2 id=&quot;quiltflower&quot;&gt;QuiltFlower&lt;/h2&gt;
&lt;p&gt;QuiltFlower (Quilt’s Fork/Maintained version of FernFlower/ForgeFlower) has seen some smaller changes.&lt;/p&gt;
&lt;p&gt;These changes should make de-complied code more readable. An example of this can be seen in the following images:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output produced by FabricFlower&lt;/strong&gt;
&lt;img src=&quot;https://i.imgur.com/M81I32X.png&quot; alt=&quot;Output Produced by Fabric Flower&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Same output, produced using QuiltFlower&lt;/strong&gt;
&lt;img src=&quot;https://i.imgur.com/1ICd4Nb.png&quot; alt=&quot;Same output produced by Quilt Flower&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;new-moderators&quot;&gt;New Moderators&lt;/h2&gt;
&lt;p&gt;Quilt’s community spaces are always looking for new moderators. If you think you’d be a good fit and like to be involved, you can submit an application via ModMail.&lt;/p&gt;
&lt;p&gt;Some key documents to be aware of &lt;strong&gt;before&lt;/strong&gt; applying:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://quiltmc.org/community/code-of-conduct.html&quot;&gt;The Quilt Code of Conduct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quiltmc.org/community/rules.html&quot;&gt;Quilt’s Rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quiltmc.org/community/moderation.html&quot;&gt;Our Moderation Ethos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/master/structure/0007-community-team.md&quot;&gt;RFC-7 (The Community Team Structure)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the qualities outlined in the above documents, seem like you… please step forward and apply. The interview process will follow the steps outlined in RFC-7 (TL;DR):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apply Via ModMail&lt;/li&gt;
&lt;li&gt;Interview with a Community Manager (and the wider Community Team)&lt;/li&gt;
&lt;li&gt;Community team holds a vote based on the interview&lt;/li&gt;
&lt;li&gt;Result of the vote given to interviewee, and if successful the applicant will become a Trainee Moderator&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;modding-with-quilt--fabric&quot;&gt;Modding with Quilt &amp;#x26; Fabric&lt;/h2&gt;
&lt;h3 id=&quot;can-i-mod-with-quilt-at-the-moment&quot;&gt;Can I mod with Quilt at the moment?&lt;/h3&gt;
&lt;p&gt;It is currently not possible to mod with the Quilt framework.&lt;/p&gt;
&lt;p&gt;However, progress has been made. We are currently waiting on a Gradle Plugin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We are looking for contributors.&lt;/strong&gt; If you would like to help out with this part of the project, please reach out in &lt;a href=&quot;https://canary.discord.com/channels/833872081585700874/884090296068091965/885866814410723358&quot;&gt;#build-tools-general&lt;/a&gt; and express interest. A member of the relevant team will reach out.&lt;/p&gt;
&lt;h3 id=&quot;are-things-still-compatible-with-fabric&quot;&gt;Are things still compatible with Fabric?&lt;/h3&gt;
&lt;p&gt;Things are largely compatible with loading mods.&lt;/p&gt;
&lt;p&gt;Mixin Plugins may not be possible to maintain compatibility. We may consider contributing to some mods that use them, to aid in replacing them.&lt;/p&gt;
&lt;h2 id=&quot;round-off&quot;&gt;Round-off&lt;/h2&gt;
&lt;p&gt;That is all for now! When there are more things to talk about, they will be published here; for more bleeding edge changes and updates on the project, follow along on our &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Discords&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thank-you to the Quilt Project’s team for helping flesh this out; it would have otherwise been just an update on moderators.&lt;/p&gt;</content:encoded></item><item><title>Quilt&apos;s (VERY LATE) October Update</title><link>https://quiltmc.org/en/blog/2021-11-10-quilt-oct-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2021-11-10-quilt-oct-update/</guid><description>&lt;p&gt;It is now &lt;em&gt;well&lt;/em&gt; past the End of October and closer to Halloween then I’d like to admit. Here is some of the more fleshed out updates about the Quilt Project:&lt;/p&gt;</description><pubDate>Wed, 10 Nov 2021 14:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;quilt-mappings-are-now-usable-in-loom&quot;&gt;Quilt Mappings are now usable in Loom!&lt;/h2&gt;
&lt;p&gt;Have you wanted to use mappings other than Yarn or MojMap?&lt;/p&gt;
&lt;p&gt;Quilt Mappings is a Yarn derivative that allows inspiration from MojMap. This allows for Quilt Mappings to map the obscure constants in Minecraft code and more.&lt;/p&gt;
&lt;p&gt;However, this can mean that Quilt Mappings maybe be different from Yarn.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OroArmor/quilt-mappings-on-loom&quot;&gt;The provided gradle plugin&lt;/a&gt; allows Quilt Mappings to be used in Loom and Fabric environments. Currently, it is 1.17.1+ only; with no plans of backporting to earlier versions.&lt;/p&gt;
&lt;p&gt;Benefits of Quilt Mappings:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Faster turn around.
&lt;ul&gt;
&lt;li&gt;For the past couple weeks, Quilt Mappings has been out before intermediary. While this doesn’t help too much in loom, it is something to look forward to in the future.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Consistent names.
&lt;ul&gt;
&lt;li&gt;Quilt Mapping names are never mismatched, meaning you won’t find issues where names swap between versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Familiarity of Yarn with the completeness of MojMap.
&lt;ul&gt;
&lt;li&gt;While not complete, Quilt Mappings has the goal of 100% mapping coverage for Minecraft. Any help toward this goal would be appreciated as well!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;how-to-use-quilt-mapping-gradle-plugin&quot;&gt;How to use Quilt Mapping (Gradle Plugin)&lt;/h3&gt;
&lt;p&gt;How to use Quilt Mappings:&lt;/p&gt;
&lt;h4 id=&quot;settingsgradle&quot;&gt;settings.gradle&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;groovy&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;pluginManagement {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    repositories {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        maven { url &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;https://maven.oroarmor.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;buildgradle&quot;&gt;build.gradle&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;groovy&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;plugins {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  id &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;quilt-mappings-on-loom&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; version &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2.0.0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;dependencies {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;   mappings(loom&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;layered {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      addLayer(quiltmappings&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;mappings(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;org.quiltmc:quilt-mappings:${minecraft_version}+build.${project.quilt_mappings}:v2&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;   })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;new-moderators&quot;&gt;New Moderators&lt;/h2&gt;
&lt;p&gt;Quilt’s community spaces are always looking for new moderators. If you think you’d be a good fit and like to be involved, you can submit an application via ModMail.&lt;/p&gt;
&lt;p&gt;Some key documents to be aware of &lt;strong&gt;before&lt;/strong&gt; applying:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://quiltmc.org/community/code-of-conduct.html&quot;&gt;The Quilt Code of Conduct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quiltmc.org/community/rules.html&quot;&gt;Quilt’s Rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quiltmc.org/community/moderation.html&quot;&gt;Our Moderation Ethos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/master/structure/0007-community-team.md&quot;&gt;RFC-7 (The Community Team Structure)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the qualities outlined in the above documents, seem like you… please step forward and apply. The interview proccess will follow the steps outlined in RFC-7 (TL;DR):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apply Via ModMail&lt;/li&gt;
&lt;li&gt;Interview with a Community Manager (and the wider Community Team)&lt;/li&gt;
&lt;li&gt;Community team holds a vote based on the interview&lt;/li&gt;
&lt;li&gt;Result of the vote given to interviewee, and if successful the applicant will become a Trainee Moderator&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Quilt enters Beta</title><link>https://quiltmc.org/en/blog/2022-03-22-quilt-enters-beta/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2022-03-22-quilt-enters-beta/</guid><description>&lt;p&gt;In February’s final bi-weekly developer meeting (which you can listen to &lt;a href=&quot;https://anchor.fm/quiltmc-dev-meetings&quot;&gt;as a podcast&lt;/a&gt;), an exciting announcement was made: &lt;strong&gt;Quilt is releasing its first beta on April 20th, 2022&lt;/strong&gt;.&lt;/p&gt;</description><pubDate>Tue, 22 Mar 2022 05:30:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s a huge milestone in our development process, and we could never have done it without our &lt;a href=&quot;https://quiltmc.org/about/teams&quot;&gt;incredible teams&lt;/a&gt; and supporting community.&lt;/p&gt;
&lt;p&gt;It is important to remember that this is a &lt;strong&gt;beta&lt;/strong&gt;, not a full release. Beta software is intended for testing, ironing out issues and having space to develop features ahead of a full release. This means that a beta release will have some features missing, and may be unstable.&lt;/p&gt;
&lt;h2 id=&quot;instability&quot;&gt;Instability&lt;/h2&gt;
&lt;p&gt;Beta software is inherently unstable. This means that there could be a lot of bugs and crashes, but it also means that &lt;em&gt;anything could change at any time, with no regard for compatibility between one version and the next.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It may be frustrating, but trying different approaches and iterating is an essential part of our development, and during this pre-release stage it is essential to not be held back by backwards compatibility.&lt;/p&gt;
&lt;h2 id=&quot;missing-features&quot;&gt;Missing Features&lt;/h2&gt;
&lt;p&gt;Beta software is also generally missing features that will be included in the full release, and Quilt is no exception. All our projects are at a stage where we feel that they are usable, but most of them are still missing features that will be included in the final release. Namely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mods will be built using a fork of Fabric’s Loom with Intermediary, instead of Quilt-Gradle with Hashed MojMap.&lt;/li&gt;
&lt;li&gt;The Chasm bytecode transformer is not yet ready for use and will not be available.&lt;/li&gt;
&lt;li&gt;Loader plugins will not exist.&lt;/li&gt;
&lt;li&gt;QSL (Quilt Standard Libraries) will not be automatically downloaded as a dependency.&lt;/li&gt;
&lt;li&gt;Many QSL Modules will not be available to use.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-were-releasing-now&quot;&gt;Why we’re releasing now&lt;/h2&gt;
&lt;p&gt;To address the elephant in the room, we’re not releasing Quilt on 4/20 for the memes. April 20th is actually the one-year anniversary of the Community Discord server, a very significant event in Quilt’s history. Besides this, we’re releasing our tools in an unfinished state for two reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quilt is relatively unknown outside its community, and we hope that by showing that Quilt is more than just an idea, the project will gain some traction, and start being taken more seriously by people in the modding sphere.&lt;/li&gt;
&lt;li&gt;Both our developers and our (future) users are very important to us, and we want your feedback and ideas on how to improve what we’ve made, while we still have the flexibility of being in the development stage to change and break things, without having to worry about backwards compatibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;stay-in-the-know&quot;&gt;Stay in the Know&lt;/h2&gt;
&lt;p&gt;While we are currently confident that we can make the April 20th target, the truth is that software development is often unpredictable, and estimates aren’t always representative of when a target is met. If you want to stay up-to-date with developments, we recommend joining our &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Community Discord Server&lt;/a&gt;, and/or &lt;a href=&quot;https://twitter.com/Quilt_MC&quot;&gt;following us on Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can even &lt;a href=&quot;https://quiltmc.org/feed.xml&quot;&gt;subscribe to this blog via RSS&lt;/a&gt; and get updates delivered straight to your RSS reader of choice.&lt;/p&gt;
&lt;p&gt;We also hold a Public Developer Meeting on the &lt;a href=&quot;https://discord.quiltmc.org/toolchain&quot;&gt;Toolchain Discord Server&lt;/a&gt; every second Saturday at 5PM UTC, where the teams get together and discuss the progress made on their respective projects, and also answer questions from the community. Even though it’s called a Developer meeting, anyone interested in Quilt’s future development is welcome.&lt;/p&gt;
&lt;h2 id=&quot;get-involved&quot;&gt;Get Involved&lt;/h2&gt;
&lt;p&gt;If you want to get involved, we could always use some extra help. A list of current openings for positions on our various teams can be found on the &lt;a href=&quot;https://quiltmc.org/openings&quot;&gt;Openings page&lt;/a&gt;, but if none of them speak to you, or if you want to contribute without joining a team, the best thing to do is to join the &lt;a href=&quot;https://discord.quiltmc.org/toolchain&quot;&gt;Toolchain Discord Server&lt;/a&gt; and offer your expertise.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We’d like to thank everyone who has come with us on the journey so far, including our developers and our wonderful community. This is Quilt’s biggest step since we ran out of GitHub Actions minutes and had to go public, and we never could’ve done it without all of you.&lt;/p&gt;
&lt;p&gt;Quilt is closer than ever, and we can’t wait.&lt;/p&gt;</content:encoded></item><item><title>Introducing BlanketCon!</title><link>https://quiltmc.org/en/blog/2022-03-29-introducing-blanketcon/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2022-03-29-introducing-blanketcon/</guid><description>&lt;p&gt;Heya! Lemma here to announce a big project we’ve been working on for a while now! From May 6th to May 7th this year, ModFest and Quilt are proud to be hosting &lt;strong&gt;BlanketCon&lt;/strong&gt;, an in-game Minecraft modding convention powered by Quilt Loader! We’ll be making a custom world where you can check out old favorites and newcomers alike! Come talk to devs and attend panels, keynotes, and more!&lt;/p&gt;</description><pubDate>Tue, 29 Mar 2022 07:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you’re a Minecraft mod developer, &lt;strong&gt;we want you here at BlanketCon&lt;/strong&gt;! Submit whatever mods you’d like to feature in the con; size or poularity doesn’t matter! The server will be running on the Quilt Loader beta, with support for both Fabric and Quilt mods, but if you develop for Forge, Sponge, Paper, or any other modding framework, you’re still more than welcome to hold an event - despite being Quilt-run, we want this to be a celebration of Minecraft modding as a whole! You can apply to host a booth or an at-con event at &lt;a href=&quot;https://blanketcon.modfest.net/signup&quot;&gt;https://blanketcon.modfest.net/signup/&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;The con server will open on May 5th at 6 PM UTC, with the opening ceremony beginning an hour later! You can see the full schedule as it’s created, as well as all confirmed booths on the BlanketCon site at &lt;a href=&quot;https://blanketcon.modfest.net&quot;&gt;blanketcon.modfest.net&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;If you have any questions, please don’t hesitate to ask in the &lt;a href=&quot;https://discord.gg/gn543Ee&quot;&gt;ModFest&lt;/a&gt; or &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Quilt&lt;/a&gt; discords! I hope to see you all there!&lt;/p&gt;</content:encoded></item><item><title>Announcing the Quilt Forum</title><link>https://quiltmc.org/en/blog/2022-05-07-announcing-quilt-forum/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2022-05-07-announcing-quilt-forum/</guid><description>&lt;p&gt;Hey everyone! I and the rest of the Community Team are excited to announce the final result of just over six months of planning, development, and a not insignificant amount of DevOps headaches. Namely, Quilt’s new community space, &lt;strong&gt;the official Quilt Forum&lt;/strong&gt;. The forum is being hosted and kindly sponsored by Starchild and their upcoming startup, Starchild Systems.&lt;/p&gt;</description><pubDate>Sat, 07 May 2022 04:30:00 GMT</pubDate><content:encoded>&lt;p&gt;You may have some questions about why we’ve launched a forum, and what will happen to our existing Discord spaces, but before we answer those, let’s get one universal question out the way:&lt;/p&gt;
&lt;h2 id=&quot;where-do-i-sign-up&quot;&gt;Where do I sign up?&lt;/h2&gt;
&lt;p&gt;The forum is live now at &lt;a href=&quot;https://forum.quiltmc.org&quot;&gt;https://forum.quiltmc.org&lt;/a&gt;, and you can sign up with a standard email and password, or using GitHub or Discord OAuth. Please make sure to read our &lt;a href=&quot;https://forum.quiltmc.org/privacy&quot;&gt;Privacy Policy&lt;/a&gt; if you have questions or concerns about how your data is handled and managed.&lt;/p&gt;
&lt;p&gt;With that out of the way, let’s address some other common questions.&lt;/p&gt;
&lt;h2 id=&quot;why-do-we-need-a-forum&quot;&gt;Why do we need a forum?&lt;/h2&gt;
&lt;p&gt;Currently, our primary community space is the official &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Quilt Community Discord&lt;/a&gt;, and while it is very good for short-form discussions and has served us well, a forum provides two distinct advantages over Discord: &lt;strong&gt;Openness&lt;/strong&gt;, and &lt;strong&gt;Control&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;openness&quot;&gt;Openness&lt;/h3&gt;
&lt;p&gt;One major problem with Discord is that it is a closed platform. To read the announcements and discussions we have in the Discord, you need to have a Discord account, and you need to explicitly join the server. This creates a barrier to entry for those wishing to learn more about Quilt and see what we’re doing beyond what’s on the website, which many people won’t bother to pass. With a forum, while you still need an account to participate in discussion, if you’re just looking, you can just visit it. There’s no form to fill out, no password to create. A forum will also be indexed by search engines, meaning that any discussions or support requests can easily be found by future modders with a quick search query.&lt;/p&gt;
&lt;h3 id=&quot;control&quot;&gt;Control&lt;/h3&gt;
&lt;p&gt;The other major advantage that a forum has over Discord is that it is fully owned and operated by us. Currently, if Discord goes down, we’d all be completely unable to communicate, but having a forum provides a backup place to use if this happens (and it works the other way around too). As well as this, Discord might someday change in a way that make it unsuitable for us to use, or it could even go out of business entirely, but a forum that is controlled by Quilt will exist as long as Quilt does. Even if Starchild Systems becomes unable to sponsor or host us in the future, we’ll still be able to pack the forum up and move it elsewhere, while still preserving its community and discussion history.&lt;/p&gt;
&lt;h2 id=&quot;what-will-happen-to-discord&quot;&gt;What will happen to Discord?&lt;/h2&gt;
&lt;p&gt;Not all that much. We’ll link up some channels to feeds from the forum so that you can keep track of what’s happening over there, but we have no plans to replace or otherwise deprecate Discord in favour of a forum. Discord is great for hanging out and having easy, short-form discussions, and it’s still our main community space, something which we don’t expect will change any time soon. Our Discord spaces will remain the active and cared-for places they are today, but the forum will also be available for those who prefer to use it.&lt;/p&gt;
&lt;p&gt;So what are you waiting for? Head over to &lt;a href=&quot;https://forum.quiltmc.org&quot;&gt;https://forum.quiltmc.org&lt;/a&gt; and join in the fun! Unless you don’t want to, I suppose?&lt;/p&gt;</content:encoded></item><item><title>October: Month of the &apos;toberfests</title><link>https://quiltmc.org/en/blog/2022-10-02-october-month-of-the-toberfests/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2022-10-02-october-month-of-the-toberfests/</guid><description>&lt;p&gt;October is most well known as a month of spookiness, of sugary treats, and of pumpkins (Pineapples, excuse me). But for developers, October is also a month of what I like to call “‘toberfests”, and today we’re excited to announce that Quilt will be participating in two of them: Hacktoberfest and Modtoberfest.&lt;/p&gt;</description><pubDate>Sun, 02 Oct 2022 19:20:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;but-what-are-toberfests&quot;&gt;But what &lt;strong&gt;are&lt;/strong&gt; ‘toberfests?&lt;/h2&gt;
&lt;p&gt;Aside from the German beer festival Oktoberfest, the original and most famous ‘toberfest is &lt;a href=&quot;https://hacktoberfest.com&quot;&gt;Hacktoberfest&lt;/a&gt;. Began by Digital Ocean in 2013, Hacktoberfest is, at it’s core, a challenge: during the month of October, you must contribute to four participating open-source projects, and the first 40,000 to complete the challenge get a choice of either a t-shirt or a tree planted in your name.&lt;/p&gt;
&lt;p&gt;Inspired by Hacktoberfest, several other groups have held smaller challenges, usually focused on a specific type of project. One of these, which this year Quilt is proud to be sponsoring, is &lt;a href=&quot;https://modtoberfest.com/&quot;&gt;Modtoberfest&lt;/a&gt;, which focuses on contributions to the Minecraft community. While the prizes might not get you the street cred of a Hacktoberfest t-shirt, a tree will be planted for every accepted pull request, and if you submit four accepted pull requests, you will receive a sticker pack containing, among other things, something that no-one else will have: the world’s &lt;strong&gt;first&lt;/strong&gt; tangible Pineapple. Behold it in all its fruity glory!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2022-10-02-october-month-of-the-toberfests/toberfest-blog-1.jpeg&quot; alt=&quot;A Pineapple sticker in a dark background&quot;&gt;&lt;/p&gt;
&lt;p&gt;You also get a Quilt logo sticker, a Modfest sticker, a BlanketCon 2022 and some others, to complete the collection.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2022-10-02-october-month-of-the-toberfests/toberfest-blog-2.jpeg&quot; alt=&quot;Four piles of stickers arranged in a 2x2 grid. From left to right: Quilt logo, Pineapple, Modfest logo, BlanketCon 2022 logo&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-do-i-start&quot;&gt;How do I start?&lt;/h2&gt;
&lt;p&gt;You can start by going to &lt;a href=&quot;https://hacktoberfest.com&quot;&gt;https://hacktoberfest.com&lt;/a&gt; and/or &lt;a href=&quot;https://modtoberfest.com/&quot;&gt;https://modtoberfest.com/&lt;/a&gt; and signing up. From there, all you need to do is find a participating project, see what you can contribute, and start coding!&lt;/p&gt;
&lt;p&gt;We have a full page with &lt;a href=&quot;https://quiltmc.org/en/toberfests&quot;&gt;guidelines for making contributions to Quilt specifically&lt;/a&gt;, but a word of advice: maintainers of the projects you contribute to have to officially accept the pull requests that you open in order for it to contribute to your total, and most of them will only accept ones that are high-quality and show effort put in for its own sake, not tiny changes that are clearly made in pursuit of a t-shirt (or the opportunity to be able to hold a Pineapple in one’s hands): your contributions should be made with love and genuinely benefit the project that you’re submitting to. Make sure to discuss any changes you want to make with the project’s maintainers before contributing, and make sure to follow the project’s contribution guidelines from the start to minimize their workload in the review phase, and maximize your chances of getting accepted.&lt;/p&gt;
&lt;p&gt;Happy hacking!&lt;/p&gt;</content:encoded></item><item><title>Adding Cloudflare Web Analytics to quiltmc.org</title><link>https://quiltmc.org/en/blog/2022-11-27-adding-cloudflare-analytics/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2022-11-27-adding-cloudflare-analytics/</guid><description>&lt;p&gt;Today, we’re adding the Cloudflare Web Analytics to quiltmc.org. We know that analytics tools have a reputation of being both greedy and careless with user data, and that some people might feel that we’re putting meaningless numbers before their privacy, which, given the general perception of web analytics, is not an unfair assumption. However, we have put thought and care into the decision, and so this article explains what data is collected, how we could use it, and how we collect it without impacting your privacy.&lt;/p&gt;</description><pubDate>Sat, 26 Nov 2022 23:45:00 GMT</pubDate><content:encoded>&lt;h4 id=&quot;contents&quot;&gt;Contents:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#contents&quot;&gt;Contents:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#analytics-and-privacy&quot;&gt;Analytics and Privacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-data-is-collected&quot;&gt;What Data Is Collected&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-we-could-use-the-data&quot;&gt;How We Could Use the Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why-cloudflare&quot;&gt;Why Cloudflare?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;analytics-and-privacy&quot;&gt;Analytics and Privacy&lt;/h2&gt;
&lt;p&gt;Analytics tools are not exactly known for their focus on user privacy. This is because the most well-known analytics tools are run by advertising companies, most notably Google Analytics, &lt;a href=&quot;https://w3techs.com/technologies/overview/traffic_analysis&quot;&gt;which has an 85% market share in the analytics business, and is installed on over 55% of all websites&lt;/a&gt;. As well as collecting analytics for the website owner to use, these tools use various technologies (like cookies or local browser storage) to associate users with a central identity. Then, when a user visits a website, they log that user as having visited it to a central database.&lt;/p&gt;
&lt;p&gt;While knowing that a user visited a single website isn’t very useful, if an analytics tool is installed on lots of websites (like how Google Analytics is on 55% of the web), it can get pretty accurate data of what websites a person is visiting and what they’re doing there, which can then be used to target ads to them. The website owner essentially makes a deal with the analytics tool vendor: The vendor will provide collect and store the analytics data for free, and in return, they get to watch every user visiting your site, and use the data for whatever they want. This is a great deal for both the vendor and the website operator, but not so much for the website’s users, and as a community-focused product, a deal that benefits us but hurts our users is not one that Quilt is willing to make. Fortunately, there is a better way.&lt;/p&gt;
&lt;p&gt;In more recent years, spurred on by the advent of the GDPR and similar privacy laws, many companies have developed more privacy-focused analytics products, one of which is Cloudflare Web Analytics. While there are many similar products available, we’ll be talking about it specifically, since it’s what we’re using for quiltmc.org. Critically,&lt;a href=&quot;https://www.cloudflare.com/en-gb/web-analytics/&quot;&gt; it doesn’t use cookies, local storage, fingerprinting, or any other technologies to associate you with an identity&lt;/a&gt;, which means &lt;strong&gt;it cannot track you around the web&lt;/strong&gt;. This means we won’t need to ask you to consent to cookies when you visit our site (even though it would be a great opportunity to make a drawing of Cozy nomming a cookie), because we still don’t use any.&lt;/p&gt;
&lt;h2 id=&quot;what-data-is-collected&quot;&gt;What Data Is Collected&lt;/h2&gt;
&lt;p&gt;The following list are the main things tracked by Cloudflare Web Analytics. It’s important to remember that because Cloudflare doesn’t log your IP address or use any other fingerprinting technologies, it’s impossible to associate any of this data with any specific person or group. If we looked at site visitor metrics, for example, we wouldn’t be able to see who those visitors were, or what each one of them did; only that some people visited some pages, and some people visited others.&lt;/p&gt;
&lt;p&gt;Cloudflare Web Analytics collects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Visits:&lt;/strong&gt; When someone visits a page from an external or direct link, rather than an internal link in another part of the website.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Page Views:&lt;/strong&gt; When someone successfully loads an HTML page on the website.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.cloudflare.com/en-gb/learning/performance/what-are-core-web-vitals/&quot;&gt;Core Web Vitals&lt;/a&gt;:&lt;/strong&gt; Performance metrics reported by most Chromium-based browsers and used in Google’s search rank algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Country:&lt;/strong&gt; What country someone visits from, based on their IP address.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Referrer:&lt;/strong&gt; What website a person came from.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Device Type:&lt;/strong&gt; The type of device a person visited with: desktop, mobile, or tablet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Browser:&lt;/strong&gt; The browser a person used when they visited.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operating System&lt;/strong&gt;: What operating system the person used when they visited.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Page Load Time&lt;/strong&gt;: How long each stage of page loading took.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, Cloudflare Web Analytics &lt;a href=&quot;https://www.cloudflare.com/en-gb/gdpr/introduction/&quot;&gt;is fully GDPR-compliant&lt;/a&gt; and doesn’t collect any information classed as Personally Identifiable Information (PII).&lt;/p&gt;
&lt;h2 id=&quot;how-we-could-use-the-data&quot;&gt;How We Could Use the Data&lt;/h2&gt;
&lt;p&gt;Even though Cloudflare Web Analytics doesn’t come with any privacy concerns, it does add complexity to the website that wouldn’t be worth it if we just used the data it provides to make pretty graphs. However, there are real ways that we can use it to make the website better for the increasing number of people that visit it every day. Here are some examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The data about what countries our visitors are from will help us know which languages to prioritize for localization.&lt;/li&gt;
&lt;li&gt;If we notice that a lot of visitors are coming from a particular social media post, video, or blog article, we can show it to the rest of our users as a way of saying thank you.&lt;/li&gt;
&lt;li&gt;If we notice people with certain device types, operating systems, or browsers are having bad experiences (for example, slow page loads), we can look into optimizing the website for them so that they have a better experience.&lt;/li&gt;
&lt;li&gt;If our Core Web Vital statistics are low for a large number of users, we can work on improving them to improve our SEO, since they are part of Google’s search ranking algorithm.&lt;/li&gt;
&lt;li&gt;If a page is loading slowly for a lot of people, we can see exactly which part of the process is getting stuck and fix it, without them having to go through filing a GitHub issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As well as these more practical examples, there is another use for them, which is encouragement. Seeing Quilt’s success in numbers, and how it’s gradually growing and spreading through the web to more and more places, reminds us that what we’re doing is in fact making an impact, even if it sometimes feels like Mojang breaks half our tooling every couple of minor releases. We know that our growth interests our community, too, and while it’s not possible to make the analytics completely public, if all goes well we plan to write a series of blog articles every so often about the website’s analytics, starting with December’s analytics in January.&lt;/p&gt;
&lt;h2 id=&quot;why-cloudflare&quot;&gt;Why Cloudflare?&lt;/h2&gt;
&lt;p&gt;Cloudflare has attracted a lot of controversy recently, most notably its initial refusal to stop providing service to the harassment forum Kiwi Farms, so it’s not unreasonable to wonder why we’re choosing to use their offering over one from another company. The reason is that almost all privacy-focused analytics tools are paid, since they can’t fund themselves by selling or utilizing the user data they collect, while Cloudflare offers a generous free tier in the hope that you’ll soon upgrade or try one of their paid products. There aren’t any other really reputable companies offering good free tiers, and the tradeoffs of using Cloudflare do not outweigh the costs that would be incurred from going with someone else.&lt;/p&gt;
&lt;p&gt;I hope that after reading this article, your mind is at rest. As the world becomes increasingly chaotic in many respects, it’s easy to think that we’re going the same way as everyone else: launching something new without really thinking about it, and hurting our users in the process, but hopefully, you now understand the reasoning behind the decision. If you have any questions, you can visit &lt;code&gt;#discord-meta&lt;/code&gt; in the &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Community Discord Server&lt;/a&gt;, or &lt;a href=&quot;https://forum.quiltmc.org/c/quilt/meta/&quot;&gt;the &lt;code&gt;Meta&lt;/code&gt; section of the forum&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Five vulnerabilities found in mrpack installer implementations</title><link>https://quiltmc.org/en/blog/2023-02-04-five-installer-vulnerabilities/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-02-04-five-installer-vulnerabilities/</guid><description>&lt;p&gt;Redacted by author’s request&lt;/p&gt;</description><pubDate>Sat, 04 Feb 2023 17:00:00 GMT</pubDate><content:encoded>&lt;!--Don&apos;t worry, there&apos;s supposed to be nothing here --&gt;</content:encoded></item><item><title>Quilted Fabric API: A call for contributors</title><link>https://quiltmc.org/en/blog/2023-02-14-qfapi-call-for-contributors/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-02-14-qfapi-call-for-contributors/</guid><description>&lt;p&gt;&lt;a href=&quot;https://github.com/quiltmc/quilted-fabric-api&quot;&gt;Quilted Fabric API&lt;/a&gt; is our fork of Fabric API which runs alongside QSL to ensure mods using the Fabric API can work on Quilt. Since almost all Fabric mods make use of the Fabric API in some way or another, it’s a critical part of Quilt’s compatibility with Fabric mods, but despite this, it is largely updated and maintained by a single person:&lt;/p&gt;</description><pubDate>Tue, 14 Feb 2023 12:15:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-02-14-qfapi-call-for-contributors/lonley-ennui.png&quot; alt=&quot;A screenshot of the Quilted Fabric API team on the Teams page, showing Ennui all by herself&quot;&gt;&lt;/p&gt;
&lt;p&gt;She could really use some help, so if you are able and have the time to spare, it would be really cool (dare I say, based?) of you to come on down and give her a hand.&lt;/p&gt;
&lt;h2 id=&quot;do-i-need-to-join-a-team&quot;&gt;Do I need to join a team?&lt;/h2&gt;
&lt;p&gt;Absolutely not! Although contributing is often linked to joining a team, we’re actually very happy to accept external contributions as well. You mustn’t feel like you need to commit to joining the team before helping, and it’s generally better if we get to know you and your contributions a little before accepting you onto a team if you want to be on one eventually.&lt;/p&gt;
&lt;h2 id=&quot;i-dont-feel-like-i-know-enough-to-contribute&quot;&gt;I don’t feel like I know enough to contribute…&lt;/h2&gt;
&lt;p&gt;Quilt is a big project, and you might think that it’s deeply complicated and requires expert skill to contribute to, but as long as you have basic Java knowledge and are willing to learn, you can do lots of things that would be a big help to us. The more people that contribute, the faster development will progress, and the more viable it is for other developers to take breaks when they need so that they can keep doing their best work. Your help is valuable, even if you don’t consider yourself a skilled programmer.&lt;/p&gt;
&lt;h2 id=&quot;what-can-i-do-to-help&quot;&gt;What can I do to help?&lt;/h2&gt;
&lt;p&gt;We’ve created &lt;a href=&quot;https://github.com/quiltMC/quilted-fabric-api/issues&quot;&gt;a truckload of GitHub issues&lt;/a&gt; to get you started, so have a look and find something you think you can do. If you find something you want to take on, make sure to comment on the issue so that others know you’re working on it and work doesn’t get done twice. If you have any questions or would like to discuss changes that you’re planning to make with the developers, come and join us on the &lt;a href=&quot;https://discord.quiltmc.org/toolchain&quot;&gt;Toolchain Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Although this post is focused on Quilted Fabric API, we welcome contributions to all our projects, such as &lt;a href=&quot;https://github.com/quiltmc/cozy-discord&quot;&gt;Cozy&lt;/a&gt;, &lt;a href=&quot;https://github.com/quiltmc/quiltmc.org&quot;&gt;quiltmc.org&lt;/a&gt;, and &lt;a href=&quot;https://github.com/orgs/QuiltMC/repositories&quot;&gt;others&lt;/a&gt;. Even if you can’t code, you can still help in other ways,  for example, by &lt;a href=&quot;https://github.com/QuiltMC/quiltmc.org/blob/stable/LOCALIZATION.md&quot;&gt;translating the website into your language&lt;/a&gt;. Join the &lt;a href=&quot;https://discord.quiltmc.org/toolchain&quot;&gt;Toolchain Discord&lt;/a&gt; if you’re interested!&lt;/p&gt;</content:encoded></item><item><title>Quilt Mappings needs you!</title><link>https://quiltmc.org/en/blog/2023-06-03-qm-needs-you/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-06-03-qm-needs-you/</guid><description>&lt;p&gt;Hello quilters! An important announcement from the Quilt Mappings team today (you can tell, because I’ve pulled out proper punctuation for the first time in my Quilt career). I’ll cut straight to the point and say it: Quilt Mappings is in need of contributions. The team and I have been working hard to keep up with Minecraft lately, but with a backlog of missing mappings since before I joined and Mojang always working to improve the game, we can’t hold up our completion by ourselves.&lt;/p&gt;</description><pubDate>Sat, 03 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;h4 id=&quot;whats-holding-the-team-back&quot;&gt;What’s holding the team back?&lt;/h4&gt;
&lt;p&gt;The Quilt Mappings team is one of the largest in Quilt, but we’re still struggling to keep up. Why? There are a few reasons. Most of the team is simply busy and doesn’t have the time to submit new mappings, and those of us that do have time have other exciting projects to work on! We’re building an entirely new mappings toolchain, always matching to the latest snapshots, and delivering huge improvements to Enigma, the program that we use to create mappings. That’s not to say we’re not working on mappings all the time, though, and we’re always here to deliver quick reviews on pull requests!&lt;/p&gt;
&lt;h4 id=&quot;why-even-bother&quot;&gt;Why even bother?&lt;/h4&gt;
&lt;p&gt;Quilt Mappings (or QM for short) is different from the other two sets of maintained mappings on the market: Mojmap and Yarn. We check our names against both sets constantly to make sure that we’re delivering the most accurate ones possible. Mojang names are often unintuitive, and aren’t built for modders: they’re made for the developers working on the game itself. Contrary to Mojmap, Yarn aims to deliver names that are easy to understand for modders, but since their names are not checked against Mojang’s intentions, they can sometimes be confusing and contradictory to the intended usage of the code. Both sets are excellent on their own, and QM is made to be a hybrid of the two, shipping clear, concise, and accurate names inspired by both. We’ve also implemented extensive checking for typos, Britishisms and convention violations to make sure no problematic mappings are published. Despite their drawbacks, Yarn and Mojang have 99% and 100% completion of class names respectively, and we can’t truly call ourselves the best with our measly 98.&lt;/p&gt;
&lt;h2 id=&quot;how-can-i-help&quot;&gt;How can I help?&lt;/h2&gt;
&lt;p&gt;The biggest way you can help with QM is by contributing new mappings to the large swaths of the game that are missing names. All you need to help out is knowledge of Java! We have a couple cute documents already written up on how to contribute: check out our &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/blob/HEAD/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; to find out everything you need to know before mapping! Making new mappings isn’t the only way to help, and if you want to improve our existing names, &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/issues&quot;&gt;our issue tracker&lt;/a&gt; is a great place to find suggestions of names to change. However, be warned that if you change names made by me you run the risk of incurring my wrath (affectionate). Opening Enigma will immediately give you an idea of what needs doing in terms of new mappings, thanks to our handy little status icons next to each class. If a class has a check mark, you can move on, but anything with a yellow dot or red x needs your help! This adorable graph, generated by the Mapping Stats feature in Enigma, can help show you where to start. As always, we’re happy to help you out with anything: using Enigma, what to name methods, where to map, etc! You can always talk to us on &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;our Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-06-03-qm-needs-you/qm-mapping-stats.png&quot; alt=&quot;A screenshot of a graph generated by Enigma to show unmapped entries, highlighting the world, entity and client packages are problem areas&quot;&gt;&lt;/p&gt;
&lt;p&gt;If mapping the game is less your thing, we have plenty of other projects for you to help out with. We can also use the help of those experienced with Java, networking, Swing, Gradle, and even translation.
Contributors have a few great options:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Working on our new toolchain, which we’re calling Quilt Mapping Tools. You can help with designing the toolchain, writing Java code, designing the new mapping format, or even preparing other parts of Quilt to use QMT. The best way to find out what needs doing here is talking to our team leader, OroArmor, on &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;our Discord&lt;/a&gt;! You can also check the &lt;a href=&quot;https://github.com/QuiltMC/quilt-mapping-tools/issues&quot;&gt;QMT issue tracker&lt;/a&gt; to get a rough idea of the work that’s still in progress.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Helping out with our deobfuscator, Enigma! Improving Enigma helps us make mappings faster and with fewer mistakes. To help out with Enigma, you can look at &lt;em&gt;its&lt;/em&gt; &lt;a href=&quot;https://github.com/QuiltMC/enigma/issues&quot;&gt;issue tracker&lt;/a&gt;, or try to break it to help us find more bugs. In particular, we’re looking for help with solving a pesky ui issue detailed &lt;a href=&quot;https://github.com/QuiltMC/enigma/issues/108&quot;&gt;here&lt;/a&gt;. Enigma is quite a complicated program, and you can always talk to me (rai), or Martrixx on &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;our Discord&lt;/a&gt; if you’d like some help understanding it. Enigma is separated into four parts: a backend, a command line interface, a server, and a swing GUI, which means there’s something for every type of Java experience! If the language you speak isn’t English &lt;em&gt;or&lt;/em&gt; Java, Enigma also has internationalisation support! You can add languages in the &lt;a href=&quot;https://github.com/QuiltMC/enigma/tree/master/enigma/src/main/resources/lang&quot;&gt;lang&lt;/a&gt; folder, or complete translation for existing languages! Compare against the &lt;code&gt;en_us&lt;/code&gt; file to find missing translations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tinkering with our existing tooling! Our new set of tooling is nowhere near completion, and the stuff we use right now still needs maintenance and improvements. You can check &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/issues?q=is%3Aissue+is%3Aopen+label%3A%22t%3A+toolchain%22&quot;&gt;issues marked as “toolchain”&lt;/a&gt; in our main repository to see what needs work right now.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thank you for reading, and we’ll see you on the creature trail!
- rai&lt;/p&gt;</content:encoded></item><item><title>Evil Modding Project Adds Telemetry</title><link>https://quiltmc.org/en/blog/2023-06-26-mau-beacon/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-06-26-mau-beacon/</guid><description>&lt;p&gt;If you’ve been keeping tabs on our RFC, or Request For Comment, &lt;a href=&quot;https://github.com/QuiltMC/rfcs&quot;&gt;repository&lt;/a&gt;, you may have noticed that we’ve just merged a proposal for Quilt Loader to keep tabs on how many people are using it each month. All considered, it’s unfortunate that it was RFC 81,not RFC 1984.&lt;/p&gt;</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Update 17/09/2023:&lt;/strong&gt; The beacon has been permanently removed in Loader &lt;code&gt;0.20.0&lt;/code&gt; following the decision that the usefulness of the MAU statistic is outweighed by community concerns and confusion regarding telemetry.&lt;/p&gt;
&lt;h2 id=&quot;why-are-we-doing-this&quot;&gt;Why are we doing this?&lt;/h2&gt;
&lt;p&gt;Excellent question, dear user. Over the last couple years of Quilt, we’ve been running &lt;a href=&quot;https://quiltmc.org/&quot;&gt;a website&lt;/a&gt;,
&lt;a href=&quot;https://maven.quiltmc.org/&quot;&gt;a repository of compiled binaries called a Maven&lt;/a&gt;, and other miscellaneous bits that we need hosting for.
One of the best ways for projects like us to pay for our infrastructure is by getting a sponsorship: a company agrees to pay some
of our costs, for the low low price of an icon on the website or something similar. Since they’re a company, before agreeing to take
on the financial burden of an entire project, they first want to make sure that people will actually see that icon: that’s where Monthly
Active Users, or MAU, come in. MAU is a pretty universal statistic that shows how popular something is: my personal website has one MAU,
which is just me coming back every once in a while when I add something interesting, while a big service like Github has millions of MAU
from people coming back all the time to view and commit code. Every unique person who visits that month bumps the MAU number by one.
Our potential sponsor gets to see that and go “ah, there are a pile of people playing on Quilt, that means a bunch of folks will see our
little ad and check us out!”.&lt;/p&gt;
&lt;p&gt;Another huge benefit of having an MAU statistic is that Quilt developers like me get to see just how many people are using our passion
project, which is great motivation for us to keep improving it! I’m sure it’ll always be fun to see how many of you are running around inside a Quilt-powered version of the silly block game.&lt;/p&gt;
&lt;h2 id=&quot;how-are-we-doing-this&quot;&gt;&lt;em&gt;How&lt;/em&gt; are we doing this?&lt;/h2&gt;
&lt;p&gt;As neatly laid out &lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/main/specification/0081-active-user-beacon.md#explanations&quot;&gt;in the RFC&lt;/a&gt;,
the process is very simple.
When you load up your game, Quilt Loader will check for a file that’s shared by all your instances of Minecraft,
that contains the last date that it told our infrastructure you’re a user.
If that month is the current month and you haven’t opted out, Loader will move on to updating the stats. After running the opt-out and date checks, this process is entirely separate to loading your game, and won’t slow anything down.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-06-26-mau-beacon/beacon-update-process.png&quot; alt=&quot;A cute graph explaining the process Quilt Loader goes through to update the MAU beacon&quot;&gt;&lt;/p&gt;
&lt;p&gt;When Loader has assessed that you’re not yet considered an active user for this month, it sends a simple request with no data;
no body or headers, to an endpoint at &lt;a href=&quot;https://quiltmc.org&quot;&gt;https://quiltmc.org&lt;/a&gt;. The server updates the counter without storing any identifying data.
Then, Loader updates its persistent file with the current month, and continues on its merry way.&lt;/p&gt;
&lt;h3 id=&quot;will-this-steal-my-data-the-family-cat-and-possibly-my-wife-as-well&quot;&gt;Will this steal my data, the family cat, and possibly my wife as well?&lt;/h3&gt;
&lt;p&gt;The biggest consideration when designing this feature was privacy: we want to get the numbers, and absolutely nothing else.
This means that while your IP address will be sent to our website once a month, we discard all information except the +1 to
our counter as per &lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/main/specification/0081-active-user-beacon.md#beacon-server-restrictions&quot;&gt;the restrictions in the RFC&lt;/a&gt;.
The server accepting the signal is &lt;a href=&quot;https://github.com/QuiltMC/beacon.quiltmc.org&quot;&gt;fully open source&lt;/a&gt;
and will remain that way so anyone can see what we’re doing with what you send us. Additionally, since Quilt Loader is open source as well, you can see all the code sending the signal in &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/pull/326&quot;&gt;the MAU beacon pull request&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-06-26-mau-beacon/beacon-signals.png&quot; alt=&quot;A screenshot of the table of signals sent to the beacon, showing that it stores date, time and nothing else&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;i-dont-like-that-how-can-i-say-no&quot;&gt;I don’t like that, how can I say no?&lt;/h2&gt;
&lt;p&gt;There are two simple ways to opt out of being counted.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When running Quilt Loader, add a property, &lt;code&gt;-Dloader.disable_beacon=true&lt;/code&gt;, to your Java Arguments. In the official Minecraft
launcher, you can do this by going to &lt;code&gt;installations -&gt; edit -&gt; more options -&gt; jvm arguments&lt;/code&gt; and appending that to the end.
If you’re using another launcher, check its documentation or poke around to find the same thing. Loader also has a collection of
other useful properties, nicely documented in &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/wiki/System-Properties&quot;&gt;its wiki&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set the &lt;code&gt;QUILT_LOADER_DISABLE_BEACON&lt;/code&gt; environment variable to &lt;code&gt;true&lt;/code&gt;. An environment variable is a value that is visible to all programs,
so using this method will opt you out on &lt;em&gt;all&lt;/em&gt; your installations.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Though it’s easy to disable, it would be lovely if you left it on for us. Who doesn’t love a number getting bigger?&lt;/p&gt;</content:encoded></item><item><title>Quiltflower is now Vineflower</title><link>https://quiltmc.org/en/blog/2023-07-09-quiltflower-is-now-vineflower/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-07-09-quiltflower-is-now-vineflower/</guid><description>&lt;p&gt;The Quiltflower decompiler is an integral part of Quilt’s toolchain, and has been quietly developed by jaskarth and the rest of the Decompilers team since our earliest beginnings. Yesterday, the team decided to separate from Quilt and continue development under the &lt;a href=&quot;https://github.com/Vineflower&quot;&gt;Vineflower&lt;/a&gt; organisation.&lt;/p&gt;</description><pubDate>Sun, 09 Jul 2023 14:55:00 GMT</pubDate><content:encoded>&lt;p&gt;Despite the separation and the change in name, we expect that very little will change for Quilt developers: We will continue to use Quiltflower — now Vineflower — in our toolchain as we always have.&lt;/p&gt;
&lt;h2 id=&quot;why-did-this-happen&quot;&gt;Why did this happen?&lt;/h2&gt;
&lt;p&gt;Although decompilation is a core part of Minecraft modding, decompilers aren’t inherently related to Minecraft in the same way that Quilt Loader or QSL might be, and so the decompilers team hasn’t really ever operated like the rest of Quilt’s development teams. Because of this separation, they felt that it would be easier to develop Vineflower independently of the complexity that comes with having to coordinate the operations of an entire modding toolchain and its associated community.&lt;/p&gt;
&lt;p&gt;Although we will be sad to see the decompiler team go, we’re very proud that they have managed (the geniuses that they are) to make Quiltflower into one of the best Java decompilers in the world, and bring it to a point where it is ready to leave our cozy nest, and blossom into its own amazing project.&lt;/p&gt;
&lt;p&gt;If you’d like to show the new Vineflower team some love, you might &lt;a href=&quot;https://github.com/vineflower/vineflower&quot;&gt;send them a Star on GitHub&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Quilt Loader Telemetry Explained</title><link>https://quiltmc.org/en/blog/2023-07-12-quilt-telemetry-explained/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-07-12-quilt-telemetry-explained/</guid><description>&lt;p&gt;Quilt Loader 0.19.2 adds beacon functionality to count Quilt’s Monthly Active Users, or MAUs. There has recently been some confusion about how this functionality works and why it was added, so this blog post is intended to provide a clear explanation of both of those things.&lt;/p&gt;</description><pubDate>Wed, 12 Jul 2023 11:25:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Update 17/09/2023:&lt;/strong&gt; The beacon has been permanently removed in Loader &lt;code&gt;0.20.0&lt;/code&gt; following the decision that the usefulness of the MAU statistic is outweighed by community concerns and confusion regarding telemetry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 17/07/2023:&lt;/strong&gt; The beacon has been temporarily disabled following a report that it was erroneously storing IP addresses. Please see &lt;a href=&quot;https://forum.quiltmc.org/t/important-monthly-active-user-beacon-update/1649&quot;&gt;this forum post&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&quot;how-the-telemetry-works&quot;&gt;How the telemetry works&lt;/h2&gt;
&lt;p&gt;Most telemetry is gathered with the intention of precisely learning how different demographics of people are using a product, perhaps with the intention of analysing behaviour to fine-tune an algorithm, interface, or marketing campaign. The word “telemetry” is associated with all sorts of sensitive data: your IP address, your location, the intimate details of how you’re using an app, but we’re not collecting anything like that. In Quilt’s case, we only need to know how many people are using Quilt in the wild, so we optimised for sharing as little data as we possibly could while still accomplishing this goal.&lt;/p&gt;
&lt;p&gt;When Quilt Loader is launched, it first checks if the user has opted out of telemetry (more on this later), or if it has already added you to this month’s active user count. If it neither of those apply, it sends an empty request to &lt;code&gt;beacon.quiltmc.org&lt;/code&gt;, containing no data except the bare minimum that it needs to establish a connection. No identification, no information about how you’re using Quilt Loader, no nothing. It then records the fact that it has made this request in a local file that is shared among all your Minecraft instances, so that it doesn’t send any more requests that month. After receiving the request, the Beacon server increments the Monthly Active User counter, logs the request as a simple timestamp, then deletes all the connection data associated with the request that it just received.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-06-26-mau-beacon/beacon-update-process.png&quot; alt=&quot;A cute graph explaining the process Quilt Loader goes through to update the MAU beacon.&quot;&gt;
Image Credit: ix0rai&lt;/p&gt;
&lt;p&gt;It’s important to emphasise just how little data is being sent here. You’re sending more data away if you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Play Minecraft itself.&lt;/li&gt;
&lt;li&gt;Use CurseForge, Modrinth, or any mods or launchers that integrate with them (such as Prism or ModMenu).&lt;/li&gt;
&lt;li&gt;Connect to any website on the internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to dig into the exact workings of the system, you can look at &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/pull/326&quot;&gt;Quilt Loader PR #326&lt;/a&gt;, &lt;a href=&quot;https://github.com/QuiltMC/rfcs/blob/main/specification/0081-active-user-beacon.md&quot;&gt;RFC 81&lt;/a&gt; which outlines the functionality of the active user beacon, and the &lt;a href=&quot;https://github.com/QuiltMC/beacon.quiltmc.org&quot;&gt;Beacon server itself&lt;/a&gt;, which is fully open-source.&lt;/p&gt;
&lt;h2 id=&quot;why-are-we-adding-telemetry&quot;&gt;Why are we adding telemetry?&lt;/h2&gt;
&lt;p&gt;Monthly Active Users is a statistic used all over the technology industry, often as a way to assess a platform’s size or value. Although we’ve made sure that the telemetry we’ve added is as privacy-preserving as possible, it wouldn’t be worth the disadvantages, however slight, if we didn’t actually need it for some reason.&lt;/p&gt;
&lt;p&gt;The main reason we need a Monthly Active User count is that many companies and organisations are reluctant to work with us if they don’t consider us large or consequential enough to be worth their time. Most notably, CurseForge asked us for a Monthly Active User count when we enquired about launcher support for Quilt. Additionally, although this hasn’t happened yet, knowing our Monthly Active User count gives us a widely-accepted measure of size to use when applying for any sponsorships, grants, or other partnerships that we may need in the future.&lt;/p&gt;
&lt;h2 id=&quot;but-why-couldnt-you-just&quot;&gt;But Why Couldn’t You Just…&lt;/h2&gt;
&lt;p&gt;We did consider some alternatives, however, everything we came up with was unsuitable for various reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Measuring QSL downloads is inaccurate, because everyone downloads a new version of QSL whenever it updates.&lt;/li&gt;
&lt;li&gt;Measuring Installer downloads ignores a large portion of users who use 3rd-party launchers, like Prism.&lt;/li&gt;
&lt;li&gt;Measuring downloads of the Loader itself from Maven is technically infeasible because it is downloaded directly from a cloud storage bucket, and there’s no point where you can reasonably insert a counter for download requests without spending lots of money.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, all of those methods simply measure download count, which, while a useful statistic, is not as universally accepted as a Monthly Active User count.&lt;/p&gt;
&lt;h2 id=&quot;how-to-disable-the-telemetry&quot;&gt;How to disable the telemetry&lt;/h2&gt;
&lt;p&gt;If, despite the precautions we’ve taken to measure telemetry in a privacy-preserving way, you’d still like to disable it, there are a couple of ways that you can do so.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add the Java argument &lt;code&gt;-Dloader.disable_beacon=true&lt;/code&gt;. In the vanilla launcher, you can add Java arguments in Installations -&gt; Edit -&gt; More Options -&gt; JVM Arguments. Note that this will only disable the telemetry for the Installation that you add the Java argument to.&lt;/li&gt;
&lt;li&gt;Set the environment variables &lt;code&gt;QUILT_LOADER_DISABLE_BEACON&lt;/code&gt; or &lt;code&gt;CI&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;. How to do this varies in complexity based on your OS:
&lt;ul&gt;
&lt;li&gt;In Windows, you can &lt;a href=&quot;https://www.architectryan.com/2018/08/31/how-to-change-environment-variables-on-windows-10/&quot;&gt;add a new environment variable in Control Panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;In Linux, you can usually add the line &lt;code&gt;QUILT_LOADER_DISABLE_BEACON=true&lt;/code&gt; to the &lt;code&gt;/etc/environment&lt;/code&gt; file, but this can vary by distribution.&lt;/li&gt;
&lt;li&gt;In macOS, there seems to be no reliable way to set environment variables for the entire system, as opposed to just the zsh shell. We recommend using Java arguments instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Edit: 2023/07/12 12:50PM GMT:&lt;/strong&gt; Clarified that CurseForge takes Monthly Active Users as a consideration, not as a requirement. Also clarified that the Beacon server saves a timestamp, and fixed instructions about adding the beacon-disabling environment variable (thanks &lt;a href=&quot;https://60228.dev/@leo&quot;&gt;Leo&lt;/a&gt;!)
&lt;strong&gt;Edit: 2023/07/13 19:45 GMT:&lt;/strong&gt; The environment variable to disable telemetry is &lt;code&gt;QUILT_LOADER_DISABLE_BEACON&lt;/code&gt;, not &lt;code&gt;QUILT_DISABLE_BEACON&lt;/code&gt; (thanks esoterica!)&lt;/p&gt;</content:encoded></item><item><title>Quilt&apos;s (EXTREMELY LATE) November Update</title><link>https://quiltmc.org/en/blog/2023-09-28-quilt-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-09-28-quilt-update/</guid><description>&lt;p&gt;It’s been quite a while since the last proper development update here, with the last one being our 2021 October update. In this fairly enormous post, we’ll be covering all the biggest developments since entering beta! We’ll be going through Quilt Standard Libraries, Quilt Loader, Quilt Mappings, Quilted Fabric API, Chasm, Quilt Kotlin Libraries, Cozy, and a few other things. Taking the crown for the new longest blog post, I hope you enjoy seeing what we’ve been working on!&lt;/p&gt;</description><pubDate>Thu, 28 Sep 2023 15:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;quilt-standard-libraries&quot;&gt;Quilt Standard Libraries&lt;/h2&gt;
&lt;p&gt;QSL has received just over 30 new APIs in the time since we last posted about QSL development on the blog. We’re making the executive decision that that reflects on how amazing its contributors are at making APIs, and not how slow us over in the writing team are with releasing our blog posts. Before you start thinking about just how long it’s been, let’s get into the updates!&lt;/p&gt;
&lt;p&gt;Starting off with April of 2022, we saw the initial version of the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/29&quot;&gt;Registry Entry Attachment API&lt;/a&gt;, or REA for short. This is a pretty unique API that allows developers to associate arbitrary values with any objects managed by registries, such as items or blocks. If you are familiar with Java’s collections, this functions as a &lt;code&gt;Map&lt;/code&gt;, connecting registry objects to values, like how tags function as a &lt;code&gt;List&lt;/code&gt; of items with a certain property. We’ll see later how this is useful by taking a look at a few of the APIs that rely on it. It has continued to get updates, and is now incredibly powerful. It’s not limited to simply registering through code, and supports datapacking so that more than just mod developers can make use of it! REA forms the basis for quite a few other Quilt APIs, such as the API for adding enchantment table boosters, flammable blocks, and compostable items.&lt;/p&gt;
&lt;p&gt;In May, we added &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/87&quot;&gt;an API for registering new resource pack providers&lt;/a&gt;. This allows mods to use code in place of making their own static resource packs in the files, which lets developers do neat things like generating textures at runtime, and then zipping them up into a resource pack that can be applied and removed in-game at the user’s will! As always with a unified API, this also means fewer conflicts between mods all trying to do the same thing with the same mixins.&lt;/p&gt;
&lt;p&gt;Not stopping with the new APIs, we added our own &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/135&quot;&gt;Block Entity API&lt;/a&gt;, which gives developers the ability to register their own block entities, sync their data from server to client, and use the same block entities on multiple blocks! An essential for a full Minecraft modding API, this is an important step towards making standalone development with QSL possible for big mods. In addition, we shipped two other big updates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/138&quot;&gt;Caching for mod-provided resource packs&lt;/a&gt;, which was quite a big improvement to resource reload performance! It reduced the startup time of the Blanketcon 2022 modpack by seven seconds, according to some simple benchmarks.&lt;/li&gt;
&lt;li&gt;Added a configuration option to disable Minecraft’s “Here be dragons!” warning screen, since it’s pretty much impossible to avoid triggering it when making mods that touch world generation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Speaking of world generation, in July we introduced another unique new API in the form of the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/148&quot;&gt;Surface Rule API&lt;/a&gt;. This is a neat little system for injecting new types of surface world generation into the three vanilla dimensions. You may know this from the iconic &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/blob/1.20/library/worldgen/surface_rule/src/testmod/java/org/quiltmc/qsl/worldgen/surface_rule/test/QuiltSurfaceRuleTest.java&quot;&gt;Trans Ground&lt;/a&gt; test mod, demonstrates the power of this API by turning the ground into a beautiful, pastel transgender flag. In addition, we shipped the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/127&quot;&gt;Item Content Registries API&lt;/a&gt;, allowing you to attach compostability and custom fuel times to your items!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-09-28-quilt-update/trans-ground.png&quot; alt=&quot;An image of the Minecraft&amp;#x27;s ground transformed into a gorgeous transgender flag.&quot;&gt;&lt;/p&gt;
&lt;p&gt;August brought yet more uses of the REA system, with the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/143&quot;&gt;&lt;em&gt;Block&lt;/em&gt; Content Registries API&lt;/a&gt;! Just like Item Content Registries giving us data driven fuel times and compostability, Block Content Registries gives us control over stripping, waxing and flammability in our datapacks! But if you’ll believe me, that’s one of the smaller APIs in terms of code this month. We also got:&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/95&quot;&gt;Registry sync&lt;/a&gt;! This is yet another critical step towards standalone QSL development. Registry Sync is short for &lt;em&gt;registry synchronisation&lt;/em&gt;, which makes sure that both your Minecraft client and the server you’re connected to have the same sets of items, blocks, entities, and other things. It’s necessary in order to have content mods working QSL-only.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/149&quot;&gt;Multipart Entity API&lt;/a&gt;, an API for creating your own huge, complex entities. The “multipart” in the name comes from the fact that this is support for entities with multiple sub-parts, like the Ender Dragon. The dragon has multiple hitboxes, and now you can too!&lt;/li&gt;
&lt;li&gt;Alas, a sad story. The QSL DataFixerUpper (DFU) API was a short-lived feature that allowed developers to register their own Datafixers, the same system that Mojang uses to upgrade worlds between versions. This API ran into a critical problem: DFU wasn’t built with a heavily modded game in mind, and it had issues, namely with trying to update the IDs of items in modded containers. Press F to pay respects, and other gamer-y things here. I write more code nowaways than I play video games. Sad.&lt;/li&gt;
&lt;li&gt;To finish off this amazing month, we introduced the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/73&quot;&gt;Bow and Crossbow APIs&lt;/a&gt;, making it simple to add your own bows and crossbows in your mods. Nice!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In September of 2022 we had another massive month (two in a row!) with 4 cute new APIs. These include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A fully featured &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/191&quot;&gt;Virtual Resource Pack API&lt;/a&gt;, building off the work done in the Resource Pack Provider API in order to provide more goodies like in-memory resource packs, events, and better ways to add resources to packs.&lt;/li&gt;
&lt;li&gt;A big set of &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/42&quot;&gt;entity-related events&lt;/a&gt;, allowing mods to easily react to events like entities being killed, entities being loaded, entities moving between dimensions, and more!&lt;/li&gt;
&lt;li&gt;A pile of &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/67&quot;&gt;entity object builders&lt;/a&gt; to simplify setting up points of interest, vehicles, villager trades, and (again) more!&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/158&quot;&gt;Recipe Remainder API&lt;/a&gt;, allowing you too to leave buckets behind when making recipes for your custom cakes. Someone more creative would have come up with something cool to suggest doing with this API. I am not that person. We are looking on &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/issues/251&quot;&gt;suggestions&lt;/a&gt; to help with a duplication issue for the API, so give your advice!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next month we finally calmed down for the winter, introducing a new set of events for registry manager setup and loading, and fixing a small pile of bugs. A nice October.&lt;/p&gt;
&lt;p&gt;In November, we added the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/189&quot;&gt;Entity Selector Options API&lt;/a&gt;, allowing modders to better integrate their features with Minecraft’s commands system via meshing into the way entities are filtered for autocomplete. Additionally, we added a big API: the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/187&quot;&gt;Status Effect API&lt;/a&gt;! Using it, mods will be able to easily add status effects, and customise things such as whether the effect will be cleared when drinking milk. Amazing!&lt;/p&gt;
&lt;p&gt;Moving on to 2023, In January we added an API for &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/250&quot;&gt;listening to and modifying chat&lt;/a&gt;, highly useful for server mods! After that, we added the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/166&quot;&gt;Armor Rendering Registry API&lt;/a&gt;, allowing registration of, as the name implies, different types of rendering for armor that are associated with certain armors. It’s since been updated with support for layers, and is quite powerful!&lt;/p&gt;
&lt;p&gt;In February we shipped one big new API: &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/226&quot;&gt;Quilt Game Tests&lt;/a&gt;. This is a helpful API for using Minecraft’s fantastic &lt;a href=&quot;https://www.youtube.com/watch?v=TNkPE6NTNHQ&quot;&gt;Gametest system&lt;/a&gt;, which is the way that Mojang themselves test the game before releasing updates. It lets you easily create tests by building structures in-game, and then writing code that uses that structure and defines a test with an expected result. For example, you could write a test that uses a rail structure, places a minecart on it, and tells the game that after 10 seconds the minecart should reach the other end of the track. Neat! Using this API is the perfect way to help make sure that your mod is bug-free. Which admittedly us developers are pretty bad at. But if you are one of the rare folks who has the patience to write tests, this is the perfect API for you!&lt;/p&gt;
&lt;p&gt;Rapid fire API time! Let’s go through March and April why don’t we.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;March brought a couple new entity-related events to help you out with writing reactive code. Cool!&lt;/li&gt;
&lt;li&gt;April gave us the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/271&quot;&gt;Dynamic Registry Registration API&lt;/a&gt;, which, well, allows you to register your own dynamic registries. This means that you can hook into Minecraft’s registry system and define your own data to be loaded from datapacks, allowing users to heavily customise your mod without touching any code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As seems to be usual, May was also a big month for us! In QSL, that meant the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/264&quot;&gt;Data Callback API&lt;/a&gt;, the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/293&quot;&gt;Entity Spawn Data API&lt;/a&gt;, and &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/298&quot;&gt;Registry Sync V2&lt;/a&gt;. Let’s see them!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/298&quot;&gt;Registry Sync V2&lt;/a&gt;. This is an enormous update to Quilt’s registry sync, which we talked about a while ago in this post! First, it adds a system for protocol versions, which allows you to define what’s compatible with what, instead of registry sync deciding for you. Secondly, we released validation of block and fluid states, which enables more reliable sync. But we weren’t done! This update also adds more configuration, such as disabling sync outright, an API for checking what optional entries the client has, and much better error messages.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/293&quot;&gt;Entity Spawn Data API&lt;/a&gt;. This is a helpful little API that allows you to add more context to entity spawns, making creation of entities with different variants easier! For example, this could be used to outdo &lt;a href=&quot;https://modrinth.com/mod/rainglow&quot;&gt;my own mod&lt;/a&gt; and make the best rainbow entity system out there!&lt;/li&gt;
&lt;li&gt;Finally, keeping in line with Quilt’s excellent support for datapacks, we added the &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/264&quot;&gt;Data Callback API&lt;/a&gt;, which allows making events controlled by datapacks! This API allows you to make separate “event” files to modify data-driven values.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Since May, we’ve been cleaning up code, fixing bugs, and mostly adding minor features. QSL is becoming a super solid collection of APIs, and I’m not sure I realised just &lt;em&gt;how&lt;/em&gt; solid it was until writing this post. We’ll be right back after I port my mods.&lt;/p&gt;
&lt;h2 id=&quot;quilt-loader&quot;&gt;Quilt Loader&lt;/h2&gt;
&lt;p&gt;Loader has seen an incredible amount of innovation, from going, to quote the team, “stable-ish” in May of 2022 to the beginnings of loader plugins early this year. Let’s get right into it with the first release: &lt;code&gt;0.16.0&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;&lt;code&gt;0.16.0&lt;/code&gt; came to us with a massive amount of bug fixes, to make sure we were ready to uphold our promise of stableishness. It didn’t have many flashy updates, but was important to make sure loader was ready for the big features that were to come, the first of which being support for Fabric loader internals! While using internals is still heavily discouraged by both us and Fabric, this means that we can have better compatibility for mods whose developers who haven’t yet had a chance to update their code.&lt;/p&gt;
&lt;p&gt;Next month, we (or, well, Glitch and Alex. For some reason when you develop for Quilt you end up considering yourself part of a hivemind. undiagnosable) shipped quite a big new feature: the initial version of our unified configuration library, &lt;a href=&quot;https://github.com/QuiltMC/quilt-config&quot;&gt;&lt;strong&gt;Quilt Config&lt;/strong&gt;&lt;/a&gt;. This library aims to finally resolve the ancient modding issue: “every mod JiJs nightconfig aughhghhhhhhhhghhh” by making sure every developer has access to configuration utilities right in the loader. By default, Quilt Config supports &lt;a href=&quot;https://github.com/TheElectronWill/night-config&quot;&gt;TOML&lt;/a&gt; and &lt;a href=&quot;https://github.com/QuiltMC/quilt-json5&quot;&gt;JSON5&lt;/a&gt; reading and writing, and has the capacity to be extended for more file formats if you’d like to &lt;a href=&quot;https://github.com/QuiltMC/quilt-config&quot;&gt;toss us a contribution&lt;/a&gt;! It’s consistently being updated, with new goodies like the &lt;code&gt;ReflectiveConfig&lt;/code&gt; API having arrived earlier this year.&lt;/p&gt;
&lt;p&gt;In August of 2022, the &lt;strong&gt;mod table&lt;/strong&gt; was delivered to the world. This is a new way of showing mods in logs that has a couple important innovations over the old tree-esque design. It allows us to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Show &lt;em&gt;far&lt;/em&gt; more information in the log files, providing critical details for the tireless helpers in our Discord, forum, and elsewhere to use when fixing issues. Neat!&lt;/li&gt;
&lt;li&gt;More easily parse the log for ✨automation✨! If you hang around the aforementioned &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Discord server&lt;/a&gt;, you may have noticed our adorable bot &lt;a href=&quot;https://github.com/QuiltMC/cozy-discord&quot;&gt;Cozy&lt;/a&gt; searching through logs and helping (quite literally) hundreds of users. Cozy has the ability to detect Quilt-incompatible Fabric mods, analyse which mods are erroring, and provide tons of other help via parsing logs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-09-28-quilt-update/mod-table.png&quot; alt=&quot;An image of the mod table at work in a log file.&quot;&gt;&lt;/p&gt;
&lt;p&gt;The Loader team wasn’t done yet though, and came back in October with their biggest update ever, &lt;code&gt;0.18.0&lt;/code&gt;. This release, along with having more beta versions than I had previously thought possible, introduced new annotations, better errors, and subfolder mod loading! Let’s run through what those mean.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Our own &lt;code&gt;@ClientOnly&lt;/code&gt; and &lt;code&gt;@DedicatedServerOnly&lt;/code&gt; annotations. These replace Fabric’s &lt;code&gt;@Environment&lt;/code&gt; annotations, and allow mods to avoid pesky sidedness errors. Lovely!&lt;/li&gt;
&lt;li&gt;Better solver errors. Solver errors are the “the game can’t load with this mod!” things you’ll see in the window that opens if the game crashes when launching. We cleaned up quite a few things and updated some particularly nasty ones to make &lt;em&gt;most&lt;/em&gt; readable by those who haven’t invested more time into developing for Quilt than they have playing the game.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/wiki/Mod-Loading-Behaviour&quot;&gt;Loading mods from subfolders&lt;/a&gt;! This update gives you some amazing control over the way your mods are loaded, with a few handy tricks outside the main feature of searching all subfolders of the &lt;code&gt;mods&lt;/code&gt; directory for more delicious mods to load. For one, all folders that start with a digit will be checked against the current Minecraft version, and only loaded if it matches! This means that you can name a folder, for example, &lt;code&gt;1.18&lt;/code&gt; , and mods in that folder will only be loaded if the current game version is &lt;code&gt;1.18&lt;/code&gt;. You can also specify greater than or lesser than by naming your folders &lt;code&gt;&gt;[version]&lt;/code&gt; and &lt;code&gt;&amp;#x3C;[version]&lt;/code&gt; respectively. To cap things off, folders starting with a dot (&lt;code&gt;.&lt;/code&gt;) will be ignored entirely.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In November we swapped over to a new standard called &lt;a href=&quot;https://github.com/unascribed/FlexVer&quot;&gt;FlexVer&lt;/a&gt; by Unascribed that helps us more cleanly sort versions and extends the SemVer &lt;code&gt;major.minor.patch&lt;/code&gt; convention used by… well… most everything in the open-source world. In particular, this helps us out with mods who use versioning schemes that can’t be translated into the &lt;code&gt;1.2.3&lt;/code&gt; world of SemVer without a major rethinking of some things. Which is exactly what FlexVer does! The team also wrote up a fantastic &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/wiki&quot;&gt;GitHub wiki&lt;/a&gt; and added per-game-instance configuration of Quilt loader settings, which are, predictably, documented on that wiki!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-09-28-quilt-update/flexver-comparison-demo.png&quot; alt=&quot;An image of Flexver running a few comparisons to show off its capabilities.&quot;&gt;&lt;/p&gt;
&lt;p&gt;Not stopping for a minute, Alex and Glitch then gave us a December present in the form of dependency overrides! This is a clever feature that will let you change things about mods’ dependencies without having to go to the bother of recompiling them. For example, this is useful if a mod has a hard dependency on a Minecraft version, but you want to test if it works on the bleeding edge of block games. Dependency overrides let you change the mod’s Minecraft dependency to whatever you want, letting you try it out on other versions! Do note that if you’re messing with dependency overrides you can’t expect mod developers to support you at all. Mods can’t be expected to always work on other versions of the game, but if you’re lucky you might find some!&lt;/p&gt;
&lt;p&gt;After spending a month restraining themselves from releasing more versions, &lt;code&gt;0.19.0&lt;/code&gt; came in February of 2023! This brought initial support for one of the big features we set out to make with Quilt: loader plugins! This is a system that allows an all-new type of mod to be created: a mod for the loader itself. Some examples of things that you could do with loader plugins are hooking into mod loading to add support for different programming languages, mods from different modloaders (in fact, Fabric support is implemented internally via a plugin!), and other delightful nonsense like pre-launch GUIs. As of writing, support remains behind the &lt;code&gt;-Dloader.experimental.allow_loading_plugins=true&lt;/code&gt; JVM flag, but progress is continuing on refining plugins and adding functionality for their full release. This release also brought support for &lt;em&gt;another&lt;/em&gt; flagship Quilt feature: &lt;a href=&quot;https://github.com/QuiltMC/chasm&quot;&gt;Chasm&lt;/a&gt;, our replacement for Mixin! Chasm allows for more compatibility in between mods modifying the same Minecraft code. Currently, Chasm support remains more proof-of-concept than anything as Chasm hasn’t yet reached a fully featured release. In order to try it out, use the &lt;code&gt;-Dloader.experimental.enable_chasm=true&lt;/code&gt; flag! To finish things off, Quilt loader solved the age-old of mods breaking randomly due to internal changes by heavily restricting access to its internal classes. Although it’s a bit more complicated than that. To avoid breaking existing mods with dependencies on internals, this will only apply to new internal classes. The same system can also be used via the &lt;code&gt;@ModInternal&lt;/code&gt; annotation, which modders can put on their own classes to seal them off from tampering!&lt;/p&gt;
&lt;p&gt;In June, we shipped yet another big version of loader! This one further improved solver messages, as well as adding some new features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A per-instance cache for storing sorta-persistent files. This comes with a nice API for developers to use!&lt;/li&gt;
&lt;li&gt;A new API that developers can use to open up custom error dialogs, the same way loader does for version mismatch errors and whatnot. This API also allows the developers to implement buttons to help the user fix the issue. Neat!&lt;/li&gt;
&lt;li&gt;Finally, a bunch of internal file system things were reworked and rewritten in order to make loading mods faster and lighter, using much less memory and much less time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Just next month, the loader team gave you better dependency overrides, as well as a global configuration and cache! As with all good things, the dependency override format is defined in the &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/wiki&quot;&gt;loader wiki&lt;/a&gt; so you can get straight to overriding.&lt;/p&gt;
&lt;p&gt;To finish things off, last month’s updates delivered:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yet more memory usage and speed improvements, helping you to play more Minecraft and spend less time waiting! Send your local loader team some love today.&lt;/li&gt;
&lt;li&gt;Mod validation! This is a helpful tool that our developers can use to check for bugs in Quilt loader, and that means it’ll help us fix more of them!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;quilt-mappings&quot;&gt;Quilt Mappings&lt;/h2&gt;
&lt;p&gt;Quilt Mappings has had an amazing year, and it’s not even because I made my debut on the mappings team! This post isn’t going to cover name updates, only tooling updates, since name changes are going on &lt;em&gt;constantly&lt;/em&gt; in the background and if we tried to name every PR we’d be here all day. Speaking of tooling, we’ve introduced an absolutely critical feature allowing mappings on loom, improved linting, completely overhauled our mapping editor, and added more automatic mapping! Starting with June 2022, let’s take a look.&lt;/p&gt;
&lt;p&gt;To start off our post-beta bettering, we moved over the functionality of Fabric’s &lt;a href=&quot;https://github.com/FabricMC/stitch&quot;&gt;Stitch&lt;/a&gt; tools into our own in-house &lt;a href=&quot;https://github.com/QuiltMC/quilt-enigma-plugin&quot;&gt;Enigma plugin&lt;/a&gt;, which makes the structure of mappings as a whole quite a bit cleaner. Neat!&lt;/p&gt;
&lt;p&gt;Next, in July, we upgraded our newly created plugin with a new feature: automagic mapping for simple fields. This allows &lt;a href=&quot;https://github.com/QuiltMC/enigma&quot;&gt;Enigma&lt;/a&gt;, the tool we use to make mappings, to derive names for fields and parameters out of a manually written file. For example, since in most classes there’s only one &lt;code&gt;Codec&lt;/code&gt; field, it will automatically be named &lt;code&gt;CODEC&lt;/code&gt; by the plugin. Lovely! This allows our mappers to do less work, and is generally really cool.&lt;/p&gt;
&lt;p&gt;Moving on to October, we introduced the single most important addition to QM: intermediary publishing! Those who aren’t deep into modding are probably asking: what in the name of Pineapple does that mean? Good news: I’ll tell you. Quilt uses our own system called &lt;a href=&quot;https://github.com/QuiltMC/mappings-hasher&quot;&gt;Hashed Mojmap&lt;/a&gt;, which takes Mojang’s official names and scrambles them into copyright-free hashes for us to use at runtime, making sure that we’re not violating the terms of Mojang’s official mappings while decreasing the chance that names will change with Minecraft updates. A Quilt mapping looks like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FIELD f_abcdefg MAX_APPLES F&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Its type, followed by its hashed name, followed by its mapped name, followed by its class. Contrarily, a Fabric mapping will use something more like &lt;code&gt;field_783462&lt;/code&gt; in place of the hashed name, using a specification they call Intermediary. We introduced Hashed to fix a couple issues with Intermediary: namely, Hashed allows for the mappings to be automatically generated instead of manually like Intermediary. So why does any of this matter? Well, Fabric’s Loom tool that’s used to compile mods only understands Intermediary mappings, and doesn’t understand how to apply Hashed mappings to Minecraft. This means that Quilt Mappings in its base form is incompatible with Loom. We’ve patched this in our &lt;a href=&quot;https://github.com/QuiltMC/quilt-loom&quot;&gt;version of Loom&lt;/a&gt;, but it means that Quilt Mappings can’t be used to develop Fabric mods. Intermediary publishing solves this, by providing both a Hashed-based and Intermediary-based version of Quilt Mappings for you to use, allowing development using QM on Fabric!&lt;/p&gt;
&lt;p&gt;In December, we saw an arguably more important toolchain update: to quote my notes, “SAY HELLO TO IX0RAI BAYBEE WE’RE SLAYING IT’S MAPPING TIME” (I joined the team. This is important because it’s my blog post and I can do whatever I want). We also introduced more checks to be run on pull requests, such as making sure that mappers haven’t accidentally left mappings in the default &lt;code&gt;net/minecraft/unmapped&lt;/code&gt; package. Cute!&lt;/p&gt;
&lt;p&gt;Continuing with improving our mapping lint action in 2023, we added a new check for spelling issues, simultaneously resolving dozens of typos all around the codebase! The final count resolved to about 100 typos that slipped through the cracks, and our check prevents this from happening again. Still in January, we focused on Enigma’s GUI element for a little bit, fixing some major problems to help mappers work faster. First off, our most sly and mysterious mappings team member, Iota, had already given you decompilation via the incredible &lt;a href=&quot;https://github.com/vineflower/vineflower&quot;&gt;Vineflower&lt;/a&gt; decompiler, making the code you’re mapping easier to understand. Of course, being the queen she is, she only announced this enormous feature to one single channel on the &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Discord&lt;/a&gt;. That’s not even to mention the superb keybind system she introduced even before that. But going back to the present day, we gave you the ability reorganise and the right and left panels as well as close them, giving more personalization as well as more space for your code! We also introduced a merged class tree panel letting you see both obfuscated (unmapped) and deobfuscated (mapped) classes together in one place. Moving away from Enigma, we also added a helpful feature for PR review: &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/331&quot;&gt;comments on your commits to show the code difference&lt;/a&gt;, which gives critical context for the actual impact of a rename.&lt;/p&gt;
&lt;p&gt;In February we kept working on enigma, implementing new, clear notifications, which trade off the Red Triangle of Bad UI Design in favour of the bubble style used by most everything. Longtime mappers will know what this means. We also cleaned up quite a bit of code and added restoration of recent projects, bringing Enigma closer to being a more standalone app! No, we’re not trying to be more like JADX. We’d never do such a thing.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-09-28-quilt-update/enigma.png&quot; alt=&quot;An image of an in-development version of Enigma.&quot;&gt;&lt;/p&gt;
&lt;p&gt;Over the next few months, we kept improving mapping linting (validating mappings for issues before a release), adding more tests, and packing Enigma with more features! The biggest addition to Enigma was cute little icons next to each class in the tree, letting you tell at-a-glance what needs work and what’s complete. We also implemented some new features into the plugin, including an extremely cool feature which will automatically map getters and parameters for a field when you name it. The mappings team is always looking for more members, so if you’d like to contribute to our tooling or improve our mapping coverage, make sure to let us know!&lt;/p&gt;
&lt;p&gt;Finally, we have quite a few ongoing projects, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/quilt-mapping-tools&quot;&gt;Quilt Mapping Tools&lt;/a&gt;, our new unified backend for mappings tooling. This will help simplify the web of projects that contribute to each and every release of Quilt Mappings, and consequently take some load off your local QM wizards via allowing mere mortals to understand how all this works.&lt;/li&gt;
&lt;li&gt;Yet more updates for Enigma, including migrating to the aforementioned Quilt Mapping Tools. Enigma &lt;code&gt;2.0&lt;/code&gt; will be more than just that though, and work is continuing in the background on it. You can check out the &lt;a href=&quot;https://github.com/QuiltMC/enigma/milestone/3&quot;&gt;milestone&lt;/a&gt; on GitHub to see what’s planned so far.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;quilted-fabric-api&quot;&gt;Quilted Fabric API&lt;/h2&gt;
&lt;p&gt;Despite QFAPI being one of the less flashy cogs in the Quilt machine, it still requires quite a bit of love. Luckily, our &lt;a href=&quot;https://quiltmc.org/en/about/teams/#sub-team-quilted-fabric-api&quot;&gt;fantastic QFAPI team&lt;/a&gt;, having expanded by two members just recently, is up to the task! While most of the work is simply updating to new Fabric and Minecraft versions, there have been quite a few changes to its internals! Of course, with this project always needing to keep up with FAPI, contributions are very welcome.&lt;/p&gt;
&lt;p&gt;Firstly, we’ve Quiltified four Fabric APIs! This is an admittedly silly name for the process of taking an API from Fabric API and turning all its methods into overloads of QSL APIs, simplifying the project overall. Every API Quiltified is one less API relying on Fabric code! The APIs ported over the last while are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Screen API&lt;/li&gt;
&lt;li&gt;Fabric’s Registry Sync&lt;/li&gt;
&lt;li&gt;Entity Load Events&lt;/li&gt;
&lt;li&gt;Block Content Registries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finishing off our 2022, we introduced a helpful safeguard against mod errors that Ennui has previously posted a &lt;a href=&quot;https://discord.com/channels/817576132726620200/908399987099045999/1016486859070787645&quot;&gt;devlog&lt;/a&gt; about on our &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Discord&lt;/a&gt;. To summarise quite a long post, since QSL’s APIs for attaching properties like flammability to items and blocks is based on Registry Entry Attachments, attachment of those properties can only be done on items that are already registered. Fabric’s APIs take a more static approach, which means they lacks that kind of validation. Since we of course can’t expect mod developers to change their code for compatibility, we came up with a clever solution: Deferred Queues. To simplify it a little, when a mod tries to register properties for an item or block that is not yet in Minecraft’s registries, QFAPI will intercept it and only apply the property once addition to registries is complete. With that, we perfectly replicate the behaviour of Fabric’s APIs without relying on them in QFAPI!&lt;/p&gt;
&lt;h2 id=&quot;chasm-collision-handling-asm&quot;&gt;Chasm: Collision Handling ASM&lt;/h2&gt;
&lt;p&gt;Chasm has improved a lot in the last year! It’s been going through constant planning, prototyping, and testing, and has seen two big events in what I’ve dubbed the Chasm Timeline. Firstly, Chasm and its tooling hit version &lt;code&gt;0.1.0&lt;/code&gt; in July of 2022! This update had three key points.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firstly, quite a bit of the backend was reorganised and rethought from the prototype in order to create a much faster system! A must for the end goal of using CHASM as the new backend powering Mixin.&lt;/li&gt;
&lt;li&gt;The internal library used to parse compiled transformations into something ready to be applied has been moved from Antlr4 to an alternative called JavaCC21. This allows CHASM to be used as a standalone JAR, without any runtime dependencies.&lt;/li&gt;
&lt;li&gt;The specification for Chassembly files, or the compiled transformations Chasm will read when the transformations are to be applied, has changed quite a bit! It’s now a more or less stable format, with no more major changes planned.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And now, the flashier point: our old project lead, CheaterCodes, managed to use Chasm to modify Minecraft! Here’s the obligatory iconic screenshot of Minecraft’s splash text overridden via Chasm.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-09-28-quilt-update/chasm.png&quot; alt=&quot;An image of Minecraft&amp;#x27;s title screen, with the splash text reading &amp;#x22;Now with Chasm!&amp;#x22; thanks to a Chasm transformation.&quot;&gt;&lt;/p&gt;
&lt;p&gt;Finally, since the Chasm team can’t actively work on the project for various reasons (mostly lack of motivation), we’re looking for folks who can take it to the finish line! You can talk to the old team in the &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Discord&lt;/a&gt; if you’re interested on getting this unique tool into production.&lt;/p&gt;
&lt;h2 id=&quot;quilt-kotlin-libraries&quot;&gt;Quilt Kotlin Libraries&lt;/h2&gt;
&lt;p&gt;From its introduction in June of 2022, to its stable release in December, to today, &lt;a href=&quot;https://github.com/QuiltMC/quilt-kotlin-libraries&quot;&gt;Quilt Kotlin Libraries&lt;/a&gt; has been being updated, QFAPI-esque, to new Fabric Language Kotlin versions by its tireless team. Despite that, they’ve still managed to find time for quite a few updates! This includes a huge set of builders, or easily ways to instantiate objects, for commonly used Minecraft classes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BlockSettings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ItemSettings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Various recipe classes&lt;/li&gt;
&lt;li&gt;Registry attachments&lt;/li&gt;
&lt;li&gt;Commands with &lt;a href=&quot;https://github.com/mojang/brigadier&quot;&gt;Brigadier&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve also introduced two DSLs, or Domain Specific Languages, for working with the aforementioned Brigadier and with registries. These are sort of mini scripting languages that make it both easier and faster to work with their target system. As an example, here’s two different ways to register blocks with the &lt;a href=&quot;https://github.com/QuiltMC/quilt-kotlin-libraries/pull/7&quot;&gt;Registry DSL&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;kotlin&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;RegistryDsl&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;modid&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    Registry.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BLOCK&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        TEST_BLOCK withName &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;test_1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        TEST_BLOCK withName &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;test_2&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    TEST_BLOCK withName &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;test_3&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; toRegistry Registry.BLOCK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This keeps a more natural language order as well as concise grammar, and just makes your code prettier!&lt;/p&gt;
&lt;p&gt;There’s also a veritable grab bag of miscellaneous other utilities, such as a Kotlin wrapper around event registration, overloads on math operations for vectors and positions, and Kotlin serialization around Codecs. The Kotlin team has also set up a few wrappers to make working with QSL’s Java syntax nicer.&lt;/p&gt;
&lt;h2 id=&quot;cozy&quot;&gt;Cozy&lt;/h2&gt;
&lt;p&gt;Moving away from Minecraft for a minute, what have we been doing with our in-house Discord bot, &lt;a href=&quot;https://github.com/QuiltMC/cozy-discord&quot;&gt;Cozy&lt;/a&gt;? Unlike the bots I made back in my Phase (we don’t talk about how I learned to code), it’s been getting consistent updates! Let’s run through the big ones.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cozy now has a command that gives you a &lt;em&gt;self timeout&lt;/em&gt;, meaning it’ll prevent you from sending messages, but you’ll still be able to read messages. This is nice for when you need to make an exit from a heated discussion, or just need to force yourself into taking a break from Discord for a bit.&lt;/li&gt;
&lt;li&gt;We’ve implemented our own AMA, or Ask Me Anything module, to use during our usually-monthly development updates. On the first Saturday of every month, we poke our developers to escape their IDEs for a couple hours and talk about what they’ve done the previous month, so that the community can stay caught up with what’s going on in the World Of Quilt. Cozy’s AMA system helps us with the end of the meeting, where we open ourselves up to questions and let everyone ask the developers, as the name implies, (almost) anything!&lt;/li&gt;
&lt;li&gt;All Cozy modules have been published on our &lt;a href=&quot;https://maven.quiltmc.org/repository/snapshot/org/quiltmc/community/&quot;&gt;Maven&lt;/a&gt; server, for use as libraries in your &lt;a href=&quot;https://github.com/kordlib/kord&quot;&gt;Kord&lt;/a&gt; projects. Neat!&lt;/li&gt;
&lt;li&gt;Finally, the thing that all Quilters know Cozy for: log parsing. This is an absolutely incredible feature that detects when Minecraft logs are posted in the Discord, and analyses them to see if there’s a simple solution. Cozy’s log parsing can detect Mixin failures, out-of-date first-party libraries (QFAPI and QKL), mods that will have broken features, Fabric mods with Quilt replacements, and mods that are incompatible with Quilt! The &lt;a href=&quot;https://github.com/QuiltMC/quiltmc.org/blob/main/public/incompatible-mods.json&quot;&gt;list of incompatible mods&lt;/a&gt; is open-source on our website repository, so please open a pull request or tell us on the &lt;a href=&quot;https://forum.quiltmc.org/t/mod-incompatibility-megathread/261&quot;&gt;forum post&lt;/a&gt; if you find any new ones!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2023-09-28-quilt-update/cozy-log-parsing.png&quot; alt=&quot;An image of Cozy helping out a user in the Quilt discord server using its log parsing.&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;miscellaneous-updates&quot;&gt;Miscellaneous Updates&lt;/h2&gt;
&lt;p&gt;Finally, let’s throw in a few miscellaneous updates. This isn’t an exhaustive list, but these developments caught my eye!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We’ve cleaned up and improved the specifications of our &lt;a href=&quot;https://meta.quiltmc.org/&quot;&gt;Meta server&lt;/a&gt;, giving it a fancy new OpenAPI coat of paint as well!&lt;/li&gt;
&lt;li&gt;The Community and Toolchain Discords servers have been merged into one &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;monolithic server&lt;/a&gt;, where both the developers and the community will be able to live together in harmony until the Fire Nation attacks.&lt;/li&gt;
&lt;li&gt;Quiltflower, our decompiler project, has become &lt;a href=&quot;https://github.com/Vineflower/vineflower&quot;&gt;Vineflower&lt;/a&gt;! Moving out of the umbrella of a Minecraft-centric project means that the Vineflower team can simply deal with the decompiler, and not worry about the rest of the project, which many of them didn’t have a large hand in. While we’re sad to see the team leader Jasmine and the rest of the developers go, it’s amazing to see something incubated in Quilt becoming an even bigger project! You can read more about this change in its &lt;a href=&quot;https://quiltmc.org/en/blog/2023-07-09-quiltflower-is-now-vineflower/&quot;&gt;dedicated blog post&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The Quilt Wiki, your favourite resource on how to mod with Quilt, is finally gaining some steam thanks to a rewrite! We’ve just merged a &lt;a href=&quot;https://github.com/QuiltMC/developer-wiki/pull/52&quot;&gt;huge PR&lt;/a&gt; to outline the planned structure of the wiki, add a couple critical articles, and clean up the look of the rewrite. If you’d like to contribute, we’re always looking for writers!&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Quilt Development Update: November 2023</title><link>https://quiltmc.org/en/blog/2023-11-30-quilt-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-11-30-quilt-update/</guid><description>&lt;p&gt;Hello! This is the first entry in a newly consistent series on the blog, chronicling what’s been going on in Quilt development.&lt;/p&gt;</description><pubDate>Thu, 30 Nov 2023 15:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We intend to publish an update at the end of each month, and they’re going to replace the development update meetings hosted on &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Discord&lt;/a&gt;. We’re still going to be hosting Q&amp;#x26;A sessions there monthly (dates are TBD), but we’ll no longer be having developers read out updates to you via the voice channels. With that said, we hope that this move will make development updates more accessible and easier to follow!&lt;/p&gt;
&lt;p&gt;This has been a fairly slow month for Quilt, but we still have a few interesting changes to show you!&lt;/p&gt;
&lt;h2 id=&quot;loader&quot;&gt;Loader&lt;/h2&gt;
&lt;p&gt;Loader has seen a few big PRs this month, thanks to Alex’s tireless work. First, the biggest PR in terms of code changed of &lt;em&gt;anything&lt;/em&gt; in this post, is &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/pull/374&quot;&gt;solver pre-processing&lt;/a&gt;. This is a large update to the way that Quilt Loader &lt;em&gt;optimises&lt;/em&gt; the mod set, essentially making sure that mods and their dependencies are set up in the best way possible. In &lt;code&gt;0.21&lt;/code&gt;, we limit the optimisation process to 5 seconds maximum. Thanks to improper implementation of that process, removing this limit means that the &lt;a href=&quot;https://modrinth.com/modpack/blanketcon-23&quot;&gt;Blanketcon 2023 pack&lt;/a&gt; takes over 20 minutes to optimise. With this newest PR it’s now 60 milliseconds. Nice!&lt;/p&gt;
&lt;p&gt;There are tons more &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/pull/380&quot;&gt;new APIs&lt;/a&gt;, bug fixes, small changes, and improvements to logging in &lt;code&gt;0.22&lt;/code&gt;, check it out!&lt;/p&gt;
&lt;h2 id=&quot;quilt-standard-libraries&quot;&gt;Quilt Standard Libraries&lt;/h2&gt;
&lt;p&gt;Quilt Standard Libraries hasn’t seen any new merges since the update to &lt;code&gt;1.20.2&lt;/code&gt; back at the start of October. The QSL developers are currently busy with school, making it hard to port Quilted Fabric API to 1.20.2+, and most &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pulls&quot;&gt;open pull requests&lt;/a&gt; still need to be updated to the latest Minecraft version before they can be merged. If you’re interested in contributing, helping to update them is a great place to start. Althought QSL’s &lt;em&gt;APIs&lt;/em&gt; haven’t seen any proposed changes, there is &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/354&quot;&gt;one new PR&lt;/a&gt;: &lt;a href=&quot;https://github.com/YumiProject/yumi-gradle-licenser&quot;&gt;Lambda has made a new licenser plugin based on quilt-gradle-licenser&lt;/a&gt;, and she’s opened a pull request to move QSL over to the new plugin. We’re still working hard on updating QFAPI to this new QSL release, and hope to have it done soon! We’re also considering making some changes to the structure of QSL and QFAPI to make the updating process quicker and simpler in the future.&lt;/p&gt;
&lt;h2 id=&quot;mappings&quot;&gt;Mappings&lt;/h2&gt;
&lt;p&gt;As always, QM has been updated to each and every snapshot this month, which includes &lt;code&gt;23w44a&lt;/code&gt;, &lt;code&gt;23w45a&lt;/code&gt;, &lt;code&gt;23w46a&lt;/code&gt;, &lt;code&gt;1.20.3-pre1&lt;/code&gt;, and &lt;code&gt;1.20.3-pre2&lt;/code&gt;. Though new mappings have been a tad scarce, we saw some &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/513&quot;&gt;important entity names&lt;/a&gt; from &lt;a href=&quot;https://github.com/HyperPigeon&quot;&gt;HyperPidgeon&lt;/a&gt;, and a few &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/514&quot;&gt;changes to item mappings&lt;/a&gt; by yours truly to account for the changes Mojang made to accomodate the &lt;a href=&quot;https://minecraft.wiki/w/Crafter&quot;&gt;Crafter&lt;/a&gt;. Along with those two small pull requests, I brought you &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/515&quot;&gt;full coverage of &lt;code&gt;net.minecraft.data&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/Platymemo&quot;&gt;Platymemo&lt;/a&gt; delivered &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/496&quot;&gt;a huge update to advancement mappings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since the main team is busy toiling away on &lt;a href=&quot;https://github.com/QuiltMC/enigma/&quot;&gt;Enigma&lt;/a&gt;’s &lt;code&gt;2.0&lt;/code&gt; update, QM has lost coverage this month, going from &lt;code&gt;94.42%&lt;/code&gt; in the final &lt;code&gt;23w44a&lt;/code&gt; version to &lt;code&gt;93.15%&lt;/code&gt; in the current build of &lt;code&gt;1.20.3-pre2&lt;/code&gt;.  Quilt Mappings development is incredibly simple to pick up, and anyone with experience developing Minecraft mods already has the knowledge needed to start mapping! You can read our &lt;a href=&quot;https://quiltmc.org/en/blog/2023-06-03-qm-needs-you/&quot;&gt;blog post&lt;/a&gt; for more info about contributing to QM or go straight to our &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/blob/HEAD/CONTRIBUTING.md&quot;&gt;contributing guide&lt;/a&gt; to help!&lt;/p&gt;
&lt;p&gt;Now: what is that &lt;code&gt;2.0&lt;/code&gt; update that the team is so caught up with? Enigma is our &lt;em&gt;deobfuscator&lt;/em&gt;, the program that we use to create mappings for Minecraft. It allows you to see and navigate Minecraft’s obfuscated code, as well as apply names you come up with. This month we’ve been working on the final improvements to its plugin system, shipping two big changes. First, Iota added new parsing features for profiles, with allow you to pass in data to plugins. In QM we use this to pass in information on Minecraft classes to &lt;a href=&quot;https://github.com/QuiltMC/quilt-enigma-plugin&quot;&gt;our plugin&lt;/a&gt;. Iota’s &lt;a href=&quot;https://github.com/QuiltMC/enigma/pull/158&quot;&gt;pull request&lt;/a&gt; allows you to use a JSON list instead of an unwieldy string object, making parsing simpler for plugins and allowing JSON validation to act on lists.&lt;/p&gt;
&lt;p&gt;Secondly, I worked on a &lt;a href=&quot;https://github.com/QuiltMC/enigma/pull/163&quot;&gt;huge pull request&lt;/a&gt; which overhauled the &lt;em&gt;name proposal API&lt;/em&gt;, which allows plugins to automatically propose names for mappings. This means that an Enigma plugin is able to analyse compiled Java code, and guess — or &lt;em&gt;propose&lt;/em&gt; — new names based on it. This is incredibly useful for repetitive code, and reduces the workload for the humans who work on QM. We also added tons of documentation, and a priority system that decides which plugin takes priority if two plugins propose a name for the same entry. Additionally, we fixed some crashes, squashed some bugs, removed some Recaf mapping format support, updated some other APIs, and cleaned up and documented internals as always.&lt;/p&gt;
&lt;p&gt;Currently, Enigma &lt;code&gt;2.0&lt;/code&gt; is in the home stretch! Iota is busy porting our plugin and refining the updates to the API, and I’m moving Enigma’s configuration backend to our own in-house &lt;a href=&quot;https://github.com/quiltmc/quilt-config&quot;&gt;Quilt Config&lt;/a&gt; API. Once those three items are complete, we should be ready to ship! Barring sudden disasters, of course.&lt;/p&gt;</content:encoded></item><item><title>Quilt Development Update: December 2023</title><link>https://quiltmc.org/en/blog/2023-12-31-quilt-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2023-12-31-quilt-update/</guid><description>&lt;p&gt;Welcome back to your favourite series recapping the month’s Quilt development! This month saw tons of work on mappings with Enigma &lt;code&gt;2.0&lt;/code&gt;, plenty of new beta releases for Quilt Loader, work on porting Quilted Fabric API to new Fabric API releases and Minecraft versions, and work on the wiki, Quilt Config, the website, and more for our lovely miscellaneous section.&lt;/p&gt;</description><pubDate>Sun, 31 Dec 2023 15:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;quilt-standard-libraries&quot;&gt;Quilt Standard Libraries&lt;/h2&gt;
&lt;p&gt;This month saw just one new pull request on the QSL repository: an &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/356&quot;&gt;update to &lt;code&gt;1.20.2&lt;/code&gt;&lt;/a&gt; by moe of mappings team fame. Neat!&lt;/p&gt;
&lt;p&gt;While QSL development has remained quiet this month, the QFAPI cogs have begun spinning again, with two new pull requests: unilock’s &lt;a href=&quot;https://github.com/QuiltMC/quilted-fabric-api/pull/141&quot;&gt;1.19.2 update&lt;/a&gt;, bringing our support up to FAPI &lt;code&gt;0.77.0&lt;/code&gt;, and Kneelawk’s &lt;a href=&quot;https://github.com/QuiltMC/quilted-fabric-api/pull/140&quot;&gt;1.20.1 update&lt;/a&gt;, bringing Fabric API &lt;code&gt;0.91.0&lt;/code&gt;. That’s not all that’s gone on, however: our lovely OroArmor has continued to finalise the work on bringing Fabric compatibility to &lt;code&gt;1.20.2&lt;/code&gt;. The inside scoop is that the number of files with compilation errors has been whittled down from hundreds to just four, so make sure to show him some love for his hard work.&lt;/p&gt;
&lt;h2 id=&quot;quilt-loader&quot;&gt;Quilt Loader&lt;/h2&gt;
&lt;p&gt;Loader has seen quite a bit of activity in the background this month, with the beginning of the betas for &lt;code&gt;0.22.1&lt;/code&gt; as well the &lt;code&gt;0.23&lt;/code&gt; release. Among the improvements slated for the next versions are &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/commit/d8dc29ae07199526d7687e310909d00eed64f3ef&quot;&gt;improvements to debugging&lt;/a&gt;, &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/commit/b64aa65aedbf074d7066f2c3110cda8875e10dc0&quot;&gt;expanded crash reports&lt;/a&gt;, &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/commit/93d4f65443d3e199f67877f98200d9d9fdc7acbc&quot;&gt;support for Mixin Extras&lt;/a&gt; to match Fabric Loader’s recent implementation, &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/commit/076ad1c197e0f5ca128795a4e93d4ee2f059f4b1&quot;&gt;new API methods&lt;/a&gt;, and of course tons of bugfixes.&lt;/p&gt;
&lt;p&gt;Alex has also continued working in the background on the huge &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/pull/385&quot;&gt;path retention PR&lt;/a&gt;, making tons of improvements. For a sneak peek, here’s the new set of user-friendly errors for unsupported mod files:
&lt;img src=&quot;/assets/img/writing/blog/2023-12-31-quilt-update/quilt-loader-errors.png&quot; alt=&quot;Some very descriptive loader startup errors for unsupported mod files&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;quilt-mappings&quot;&gt;Quilt Mappings&lt;/h2&gt;
&lt;p&gt;As always, QM has stayed up to date with the latest versions, being ported to &lt;code&gt;1.20.3-rc1&lt;/code&gt;, &lt;code&gt;1.20.3&lt;/code&gt;, &lt;code&gt;1.20.4-rc1&lt;/code&gt;, &lt;code&gt;1.20.4&lt;/code&gt;, &lt;code&gt;23w51a&lt;/code&gt;, &lt;code&gt;23w51b&lt;/code&gt; this month. New mappings have been light, but the lovely &lt;a href=&quot;https://github.com/moehreag&quot;&gt;moe&lt;/a&gt; came through with a &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/516&quot;&gt;bunch of new classes &lt;/a&gt; for you! We also got a &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/519&quot;&gt;new class&lt;/a&gt; courtesy of Kneelawk that came with the added bonus of fixing a game crash when breaking chests. The diverse ways that mapping issues can crash the game continue to amaze.&lt;/p&gt;
&lt;p&gt;This has been a huge month for &lt;a href=&quot;https://github.com/QuiltMC/enigma&quot;&gt;Enigma&lt;/a&gt;, the tool we use to create mappings, with the release of Enigma &lt;code&gt;2.0&lt;/code&gt;! Half a year in the making, this is our largest update to Enigma ever, or as I called it in the announcement, the greatest revolution in mapping technology since the last time we updated Enigma. Instead of giving you what we did on the update just this month, here’s the highlight reel of the whole thing.&lt;/p&gt;
&lt;p&gt;In the backend, we’ve done some major reorganisation: the base package is now &lt;code&gt;org.quiltmc.enigma&lt;/code&gt;, and we’ve moved every class into either an &lt;code&gt;api&lt;/code&gt; or &lt;code&gt;impl&lt;/code&gt; package. This means that you can trust we’re not going to make any breaking changes to functionality in the &lt;code&gt;api&lt;/code&gt; package until &lt;code&gt;3.0&lt;/code&gt;! We also introduced indexing for mappings, meaning that just like how Enigma analyses JAR files to provide utilities, you can now do the same with mappings! Currently, we use this in the UI to tell you when a rename will create a new package. Finally, we did quite a few reworks to the plugin API, especially in the name proposal department. Now, the API is event-based, which means your plugin can provide names after two events: opening a JAR file, and when the mappings change. This took quite a few API changes, so make sure to read the &lt;a href=&quot;https://github.com/QuiltMC/enigma/blob/master/CHANGELOG.md#200&quot;&gt;full changelog&lt;/a&gt; if you’re interested in writing a plugin.&lt;/p&gt;
&lt;p&gt;The command line got slightly less love, but nonetheless a few neat updates:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;All commands now automatically detect the format of their input mappings: one less argument for you to write!&lt;/li&gt;
&lt;li&gt;Errors and help have been improved: you can now run the &lt;code&gt;help&lt;/code&gt; command to see all commands and descriptions of their function. Additionally, in the error message for a command, it will now show you all of its required and optional arguments, as well as descriptions of how to write them and what they do.&lt;/li&gt;
&lt;li&gt;All commands now use &lt;code&gt;kebab-case&lt;/code&gt;, making their names nice and predictable.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The user interface got the most updates here, with some major improvements to help you map faster. We’ve expanded the statistic system in the class tree: stats are now explicitly stored per-class, giving us the power to display stat icons on packages as well as classes. Additionally, instead of generating statistics for individual classes as they come into view, the stats for the full tree are generated at startup, making navigating the tree much snappier. Moving on to the code view, we added a new feature: the entry navigator. This consists of two buttons and a dropdown, which let you quickly navigate between entries of any token type. The token types are &lt;code&gt;DEOBFUSCATED&lt;/code&gt;, &lt;code&gt;OBFUSCATED&lt;/code&gt;, &lt;code&gt;JAR_PROPOSED&lt;/code&gt;, and &lt;code&gt;DYNAMIC_PROPOSED&lt;/code&gt;. For an example usage of this, instead of having to scroll through a big class looking for the one entry that you missed, you can simply switch to &lt;code&gt;OBFUSCATED&lt;/code&gt; in the navigator and use the &lt;code&gt;ctrl + down arrow&lt;/code&gt; hotkey to navigate to the next unmapped entry. For the final big update to the UI, we’ve moved over to &lt;a href=&quot;https://github.com/QuiltMC/quilt-config&quot;&gt;Quilt Config&lt;/a&gt;, our in-house config library, for configuration. Your old config will not be migrated, and we’ve removed our old config library which was built into Enigma. The config now contains helpful comments and is sensibly organised into &lt;code&gt;net&lt;/code&gt;, &lt;code&gt;decompiler&lt;/code&gt;, &lt;code&gt;keybind&lt;/code&gt;, &lt;code&gt;main&lt;/code&gt;, and &lt;code&gt;docker&lt;/code&gt; sections. Lovely!&lt;/p&gt;
&lt;p&gt;There are tons more updates, including merging tons of changes from Fabric’s Enigma (thanks YanisBFT for giving us permission to steal them!), adding more tests and documentation, fixing tons of bugs, and piles of smaller changes we made to the backend and user interface. You can see everything in the &lt;a href=&quot;https://github.com/QuiltMC/enigma/blob/master/CHANGELOG.md#200&quot;&gt;full changelog&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Enigma continues to be developed, with &lt;code&gt;2.1&lt;/code&gt; already on the way, fixing issues and adding yet more features. We’ve already ported our &lt;a href=&quot;https://github.com/QuiltMC/quilt-enigma-plugin&quot;&gt;Enigma plugin&lt;/a&gt; and &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/517&quot;&gt;moved QM over to &lt;code&gt;2.0&lt;/code&gt;&lt;/a&gt;, so write some mappings and try them out!&lt;/p&gt;
&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h2&gt;
&lt;p&gt;First thing we did this month outside of the Big Three projects? Released the &lt;a href=&quot;https://quiltmc.org/en/blog/2023-11-30-quilt-update/&quot;&gt;November update&lt;/a&gt;. We’re starting off strong with the release schedule of these posts. That isn’t the only thing that happened on the website this month: our brilliant &lt;a href=&quot;https://github.com/Southpaw1496&quot;&gt;Southpaw&lt;/a&gt;, who edits these posts, has been working in the background on updating its backing tech to the latest versions. &lt;a href=&quot;https://github.com/QuiltMC/cozy-discord&quot;&gt;Cozy&lt;/a&gt;, our discord bot, has been getting the same treatment, with sschr15 giving it an aptly named &lt;a href=&quot;https://github.com/QuiltMC/cozy-discord/commit/7e7305d581e0fbf47cbc7d06ebb13c89a28ce021&quot;&gt;Big Update tm&lt;/a&gt;. For one last update to our Web Stuff, our developer wiki got an &lt;a href=&quot;https://github.com/QuiltMC/developer-wiki/pull/65&quot;&gt;awesome PR&lt;/a&gt; from new contributor c-leri to support multiple languages and translate some articles into French.&lt;/p&gt;
&lt;p&gt;To round things off, I dipped my feet into working on Quilt Config, adding some interesting new features to &lt;code&gt;1.1&lt;/code&gt;, which is currently in beta. It should be released out of beta soon!&lt;/p&gt;</content:encoded></item><item><title>Quilt Development Update: January 2024</title><link>https://quiltmc.org/en/blog/2024-02-12-quilt-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2024-02-12-quilt-update/</guid><description>&lt;p&gt;As a homunculus constructed of mappings and Swing, barely tied together by a high-voltage web of electricity and emotion, I try to deliver a nuanced view of each month’s development in the Quiltosphere, to varying degrees of success. Let’s see what happened in the last 31 days of development.&lt;/p&gt;</description><pubDate>Mon, 12 Feb 2024 15:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As always, Mappings won the month, delivering two releases of Enigma and tons of changes to Quilt Mappings. Loader and QSL tried their best, but unfortunately can’t even come close to comparing to the glory of the Quilt Mappings suite of projects. Let’s get right into their pathetic attempts in the latest edition of Quilt Development Update: Unbiased Edition.&lt;/p&gt;
&lt;h2 id=&quot;qsl&quot;&gt;qsl&lt;/h2&gt;
&lt;p&gt;After a long few months in the mines, &lt;a href=&quot;https://github.com/OroArmor&quot;&gt;OroArmor&lt;/a&gt; has completed the &lt;a href=&quot;https://github.com/QuiltMC/quilted-fabric-api/pull/144&quot;&gt;port&lt;/a&gt; of &lt;a href=&quot;https://github.com/QuiltMC/quilted-fabric-api&quot;&gt;Quilted Fabric API&lt;/a&gt; to Minecraft &lt;code&gt;1.20.2&lt;/code&gt;! Due to many, many technical changes in Minecraft, Quilt Standard Libraries, and Fabric API, it was an enormous task to tie them all back together in Quilted Fabric API. We’re sorry for the delay, and hope to find more help (perhaps you, dear reader?) and rethink the way QFAPI is set up so that we can update faster in the future! As with any big update, this came with a few issues, and we’ve continued to release new builds fixing them as soon as they come up. Next, on to &lt;code&gt;1.20.4&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2024-02-12-quilt-update/oro_armor.png&quot; alt=&quot;A comparison of OroArmor&amp;#x27;s two profile pictures, featuring one head with blue eyes titled &amp;#x22;oro (pre qfapi)&amp;#x22; and one with red eyes titled &amp;#x22;oro (post qfapi).&quot;&gt;&lt;/p&gt;
&lt;p&gt;Now, as a special treat, I’ve convinced our lovely new hire &lt;a href=&quot;https://upcraft.dev/&quot;&gt;Up&lt;/a&gt; from the installer team to write up this month’s Quilt Loader section. While she’s absolutely brilliant in software development, she remains unproven in the blog post space. Make sure to &lt;a href=&quot;mailto:ix0rai64@gmail.com&quot;&gt;email me&lt;/a&gt; regarding her performance if you find the following section unsatisfactory or would like to throw her a compliment for the excellent section.&lt;/p&gt;
&lt;h2 id=&quot;loader&quot;&gt;loader&lt;/h2&gt;
&lt;p&gt;At least that was the plan. In a personal attack against me, Up’s internet tragically went down just before she was about to research and write this section. It’s still down as of writing. There seems to be some sort of cosmic force that prevents me from getting any help with writing these posts. Alas. Now let’s see what the loader gang was up to in January.&lt;/p&gt;
&lt;p&gt;The main event of note was Up joining the installer team. Right at the beginning of the month, we finally pushed through a major cleanup of our &lt;a href=&quot;https://github.com/QuiltMC/quilt-native-installer&quot;&gt;new installer&lt;/a&gt; (which is not quite done yet!), written by the ironically named &lt;a href=&quot;https://github.com/theRookieCoder&quot;&gt;Rookie Coder&lt;/a&gt;. This clears the way for the team to continue working on getting the new installer as feature-complete as the old one!&lt;/p&gt;
&lt;p&gt;Next, we wrote up an &lt;a href=&quot;https://github.com/QuiltMC/rfcs/pull/89&quot;&gt;RFC&lt;/a&gt; and a subsequent &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/pull/395&quot;&gt;implementation&lt;/a&gt; of &lt;em&gt;sided mixins&lt;/em&gt;, a neat feature which allows you to better organise your mixins based on whether they apply to Minecraft’s client or dedicated server. Neat!&lt;/p&gt;
&lt;h2 id=&quot;mappings&quot;&gt;mappings&lt;/h2&gt;
&lt;p&gt;Mappings has had a big month this time around, thanks to Enigma &lt;code&gt;2.0&lt;/code&gt; being pushed out last month, to excellent reviews from Enigma critics everywhere. One Enigma feature that has had the exact impact I hoped for in my nefarious plan is &lt;a href=&quot;https://github.com/QuiltMC/enigma/pull/152&quot;&gt;bright green checkboxes on fully mapped packages&lt;/a&gt;: to quote a new contributor, &lt;a href=&quot;https://github.com/pyrox0&quot;&gt;pyrox0&lt;/a&gt;, “Four easy checkboxes in the classes panel, I’m happy with that.” The QM team continues to innovate by creating new ways to make mapping more fun and therefore get mappers mapping.&lt;/p&gt;
&lt;p&gt;Speaking of Pyrox, she has absolutely dominated the mapping scene like a rather prolific blizzard or perhaps an unusually furious snowstorm. It has managed to commit more than 2500 new mappings in just a month and &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/539&quot;&gt;only&lt;/a&gt; &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/530&quot;&gt;three&lt;/a&gt; &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/pull/528&quot;&gt;PRs&lt;/a&gt;, which as a mapper myself is some fairly incredible output. However, she wasn’t the only thing happening in the QM sphere this month — let’s check out what the rest of the team was up to!&lt;/p&gt;
&lt;p&gt;First off, Iota and I (rai minecraft) continued cooking up new Enigma goodness for you. At the very beginning of January, we released Enigma &lt;code&gt;2.1&lt;/code&gt;, a release mainly aimed at refining &lt;code&gt;2.0&lt;/code&gt; but nonetheless featuring a few additions. Because we couldn’t help it. Firstly, we added two more development options: highlighting debug tokens in the UI, and showing the source plugin of automatically proposed mappings. This may not be exciting for you, the reader, but it allows us to more easily fix issues in the future! Speaking of issues, we fixed a longtime issue with interfaces: sometimes, a class could implement methods with the same names and signatures from two different interfaces. This would break the mappings if you renamed one of those, as Enigma wasn’t aware that they needed to match. Now they’ll be synced, making that impossible! And finally, we managed to sneak in a flashy feature: tokenization in the bytecode decompiler view, allowing you to more easily understand bytecode and rename tokens directly.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2024-02-12-quilt-update/enigma_bytecode.png&quot; alt=&quot;The lovely new Enigma bytecode view.&quot;&gt;&lt;/p&gt;
&lt;p&gt;It also came with a &lt;a href=&quot;https://github.com/QuiltMC/enigma/blob/master/CHANGELOG.md#bugfixes-a-lot-of-them&quot;&gt;huge round of bugfixes&lt;/a&gt;, since our team of two can’t catch everything before release. But on to &lt;code&gt;2.2&lt;/code&gt;! This one once again had a headline feature from Iota, hot off the tail of her bytecode view upgrade. The Enigma server, being the one component that didn’t get much love in &lt;code&gt;2.0&lt;/code&gt;, has finally gotten a facelift in &lt;code&gt;2.2&lt;/code&gt;. Among the main features are a rework to the way clients are approved which improves security, another development option (mwahaha) to log packets, streamlined code, and adding tests to keep everything running smoothly. It also comes with a new command: &lt;code&gt;print-stats&lt;/code&gt;, which prints data about the total mapping percentages of the project. “But rai, none of these help you map faster!” I hear you screaming. Fear not, Enigma &lt;code&gt;2.2&lt;/code&gt; brings more information in the identifier panel, telling you the parents of inner classes and — more importantly — the types of each parameter. This second one helps a lot for lambda parameters, which don’t clearly show their type like a regular one would. Now you no longer have to guess!&lt;/p&gt;
&lt;p&gt;The Enigma sphere has one more thing to offer this month: Iota has been hard at work on the &lt;a href=&quot;https://github.com/QuiltMC/quilt-enigma-plugin&quot;&gt;plugin&lt;/a&gt; once again, implementing recursive constant field search, delegate parameter name proposal, allowing strings passed to constructors to be used as constant field names, and cleaning up tons of code. This is one of the most technical projects in all of Quilt, so here’s a buzzword breakdown.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;recursive constant field search: now, if a constant field is initialized using &lt;em&gt;another&lt;/em&gt; constant field as a parameter, the plugin is able to see that field’s name and consider it as a name for the current field.&lt;/li&gt;
&lt;li&gt;strings passed to constructors as constant field names: previously, the constant field name finder could use strings passed to methods to come up with names, but was unable to do the same when the declaring looked like this: &lt;code&gt;new Thing(&quot;name&quot;)&lt;/code&gt; instead of &lt;code&gt;createThing(&quot;name&quot;)&lt;/code&gt;. Lovely!&lt;/li&gt;
&lt;li&gt;delegate parameter name proposal: we like to call this one “bubbling up parameters”. It’s similar to recursively searching for constant field names, but it’s now searching for parameter names. Occasionally in Java you’ll write an &lt;em&gt;overload method&lt;/em&gt;, which means you’ll have a method like &lt;code&gt;awesomeMethod(int value, int value2)&lt;/code&gt;, where you usually want that second int value to be a constant value: let’s say 5. You’d write a second method, the overload method, that looks like this: &lt;code&gt;awesomeMethod(int value) { awesomeMethod(value, 5); }&lt;/code&gt;. Now, thanks to some cleverness on Iota’s part, the &lt;code&gt;value&lt;/code&gt; parameter name from the base method will now carry over to its overload method, as long as it’s unmodified.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now let’s finally get into the actual mapping changes. As always, we updated to every snapshot this month: &lt;code&gt;24w03a&lt;/code&gt;, &lt;code&gt;24w03b&lt;/code&gt;, &lt;code&gt;24w04a&lt;/code&gt;, &lt;code&gt;24w05a&lt;/code&gt;, and &lt;code&gt;24w05b&lt;/code&gt;. Our coverage went from &lt;code&gt;92.76%&lt;/code&gt; in &lt;code&gt;23w51b&lt;/code&gt; to &lt;code&gt;94.62%&lt;/code&gt; in &lt;code&gt;24w05b&lt;/code&gt;, thanks to 21 pull requests from 8 different contributors! We had dreams of being able to say we were above &lt;code&gt;95%&lt;/code&gt; for this post, but unfortunately the latest snapshots knocked us down to 94 again. &lt;a href=&quot;https://quiltmc.org/en/blog/2023-06-03-qm-needs-you/&quot;&gt;We’re always looking for new mappers&lt;/a&gt;, so feel free to open up a PR of your own or stop by the &lt;a href=&quot;https://discord.quiltmc.org&quot;&gt;Discord&lt;/a&gt; any time. Here are the full stat differences:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2024-02-12-quilt-update/mapping_stats.png&quot; alt=&quot;A comparison of the mapping stats in snapshot 23w51b and 24w05b.&quot;&gt;&lt;/p&gt;
&lt;p&gt;This month was heavy on the new additions, with very few refactors to speak of. We’re continuing to work towards getting our completion up there with that of &lt;a href=&quot;https://github.com/fabricmc/yarn&quot;&gt;yarn&lt;/a&gt; again! Finally, our lovely OroArmor, QSL developer extraordinaire, came down from his throne to deliver a &lt;a href=&quot;https://github.com/QuiltMC/quilt-mapping-tools/commit/bb96b21be34d4192b80b3016de9f4d51de3073d2&quot;&gt;couple new features&lt;/a&gt; to &lt;a href=&quot;https://github.com/QuiltMC/quilt-mapping-tools&quot;&gt;Quilt Mapping Tools&lt;/a&gt;, our work-in-progress redo of the mappings toolchain.&lt;/p&gt;
&lt;h2 id=&quot;misc&quot;&gt;misc&lt;/h2&gt;
&lt;p&gt;After about eight months without getting any features (*unikitty voice* &lt;em&gt;emmm&lt;/em&gt;barrassing!) &lt;a href=&quot;https://github.com/QuiltMC/quilt-config&quot;&gt;Quilt Config&lt;/a&gt;, our solution to the Minecraft config library disaster, defrosted thanks to some hot new additions with its &lt;code&gt;1.2&lt;/code&gt; release. The motivation of these additions, mostly made by a certain rai minecraft you may have heard of, was to get QConf working outside of Quilt Loader to be used as the config backend for the aforementioned Enigma &lt;code&gt;2.0&lt;/code&gt;. Mission success! Let’s look at what it took:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;instead of expecting programs using QConf to provide their own serializers (the programs which take config values and read and write them to config files), it now ships with two default options for the &lt;strong&gt;TOML&lt;/strong&gt; and &lt;strong&gt;JSON5&lt;/strong&gt; formats. This solves what was, dare I say, a pretty stupid situation before where Loader had to directly copy the code of the serializers used in QConf’s unit tests for use in production. An additional benefit of this is that features that depend on serializer changes, such as one we’re going to talk about next, no longer require programs using QConf to manually update their serializers. Instead they can just import the updated versions directly!&lt;/li&gt;
&lt;li&gt;I leveraged Quilt Config’s powerful metadata system to set up a new annotation: &lt;code&gt;@SerializedName&lt;/code&gt;. A mainstay in serialization libraries like &lt;a href=&quot;https://github.com/google/gson&quot;&gt;GSON&lt;/a&gt;, this allows you to manually decide the name your config field will take in the serialized file instead of having to use the name from your code. For an example usage, you could name a field in your code &lt;code&gt;superCoolField&lt;/code&gt; and then serialize it as &lt;code&gt;super_cool_field&lt;/code&gt;, to conform to both Java and TOML name conventions at the same time. Thanks to the heavy lifting of implementing this, we already have some new ways you can customise your config files coming in &lt;code&gt;1.3&lt;/code&gt;!&lt;/li&gt;
&lt;li&gt;While building those updates, I ran into a few high-profile issues that needed fixing. These are now fixed!
&lt;ul&gt;
&lt;li&gt;The metadata on config sections used to be ignored, meaning that you couldn’t give them custom serialized names, comments, or any of Quilt Config’s other handy pieces of metadata. Unfortunate.&lt;/li&gt;
&lt;li&gt;Adding dots to a key when saving to TOML was completely broken and would produce an unreadable disaster in the config file. Thanks to the lovely &lt;a href=&quot;https://hibiscus.pet/&quot;&gt;hibi&lt;/a&gt; for finding this one!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That’s not quite it for Quilt Config. I’m working on &lt;a href=&quot;https://github.com/QuiltMC/developer-wiki/pull/81&quot;&gt;comprehensive tutorials&lt;/a&gt; for the &lt;a href=&quot;https://github.com/QuiltMC/developer-wiki&quot;&gt;developer wiki&lt;/a&gt; on how to use Quilt Config! Now we’re done.&lt;/p&gt;
&lt;p&gt;Our &lt;a href=&quot;https://github.com/QuiltMC/quilt-template-mod&quot;&gt;template mod&lt;/a&gt; got a nice little update in the form of deduplicating the maven group value between the &lt;code&gt;gradle.properties&lt;/code&gt; and &lt;code&gt;quilt.mod.json&lt;/code&gt; files, the same way the version is synced. Thanks to &lt;a href=&quot;https://github.com/TheKodeToad&quot;&gt;TheKodeToad&lt;/a&gt; for that!&lt;/p&gt;
&lt;p&gt;One of our other little-loved projects got pull requests this month: &lt;a href=&quot;https://github.com/QuiltMC/quilt-parsers&quot;&gt;Quilt Parsers&lt;/a&gt;, the backend JSON parser for everything Quilt, has a couple minor improvements in the words thanks to &lt;a href=&quot;https://github.com/Leo40Git&quot;&gt;Leo&lt;/a&gt;! Delightful. We’ll see you next month!&lt;/p&gt;</content:encoded></item><item><title>Quilt Development Update: February 2024</title><link>https://quiltmc.org/en/blog/2024-03-09-quilt-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2024-03-09-quilt-update/</guid><description>&lt;p&gt;Well gamers. Another month another late blog post from your local insomniac. This month, to break up the monotony of my ramblings, we’ve brought local QSL guy OroArmor onto the program to tell us about, you guessed it, QSL. Come sit by the fireside with him.&lt;/p&gt;</description><pubDate>Sat, 09 Mar 2024 15:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;quilt-standard-libraries&quot;&gt;Quilt Standard Libraries&lt;/h1&gt;
&lt;p&gt;It was barely one day into February when I was told that the registry sync system in QSL was running too late. This lead me on a wild chase as I hunted down and squashed the bug, upgrading QSL’s configuration networking API in &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/pull/363&quot;&gt;QSL PR #363&lt;/a&gt;. Later in the month, I went on another bug-squashing adventure, quickly taking out &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/issues/364&quot;&gt;#364&lt;/a&gt;, &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/issues/365&quot;&gt;#365&lt;/a&gt;, and &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/issues/358&quot;&gt;#358&lt;/a&gt; for &lt;code&gt;1.20.2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now, I bet a lot of you are wondering when I will get around to QSL for &lt;code&gt;1.20.3&lt;/code&gt; and &lt;code&gt;1.20.4&lt;/code&gt;. I understand its been a while, but I am very busy. UNTIL NEXT WEEK. (editor’s note: Mr Armor is always saying this. Take his words with a grain of salt)&lt;/p&gt;
&lt;p&gt;That’s right, a new QSL update is coming soon to a Mod Hosting Site near you! Hurry up, only while supplies last!&lt;/p&gt;
&lt;h2 id=&quot;quilted-fabric-api&quot;&gt;Quilted Fabric API&lt;/h2&gt;
&lt;p&gt;As for the other half of Quilt’s APIs, QFAPI was updated with the latest QSL version, making sure that you get those bug fixes. In addition, there were a few sync pull requests that brought older versions of QFAPI for &lt;code&gt;1.20.1&lt;/code&gt; and &lt;code&gt;1.19.2&lt;/code&gt; up to date with the latest Fabric API for those versions. Thanks &lt;a href=&quot;https://github.com/unilock&quot;&gt;unilock&lt;/a&gt; and &lt;a href=&quot;https://github.com/Kneelawk&quot;&gt;Kneelawk&lt;/a&gt; for these updates!&lt;/p&gt;
&lt;h1 id=&quot;quilt-loader&quot;&gt;Quilt Loader&lt;/h1&gt;
&lt;p&gt;Back to your regularly scheduled writer. Loader has mostly been getting minor fixes and keeping synced with Fabric compatibility this month, in preparation for a bigger release coming in March! This includes some improvements to error readablity for users, fixing compatibility with a few mods using Fabric Loader internals, and work towards the stabilization of loader plugins. As I write this, it’s March and the release has come out. Because I’m mean, you, dear reader, will be told about it next month!&lt;/p&gt;
&lt;h1 id=&quot;quilt-mappings&quot;&gt;Quilt Mappings&lt;/h1&gt;
&lt;p&gt;As always, your favourite team has delivered day 1 updates for every snapshot: &lt;code&gt;24w09a&lt;/code&gt;, &lt;code&gt;24w07a&lt;/code&gt;, and &lt;code&gt;24w06a&lt;/code&gt; this month. Let’s hit the highlights in terms of pull requests. Realms screens as well as particles have once again hit 100% completions thanks to work from Iota and pyrox, and we’ve seen lots of new coverage in snapshot features like trial spawners and world events. Despite the valiant efforts of our mappers, we’ve lost 0.5% coverage this month. A single perfect tear rolls down my smooth, emotionless visage.
&lt;img src=&quot;/assets/img/writing/blog/2024-03-09-quilt-update/mapping-comparison.png&quot; alt=&quot;A beautiful comparison of mapping statistics, going from 94.8% to 93.3%&quot;&gt;&lt;/p&gt;
&lt;p&gt;To discuss something &lt;em&gt;other&lt;/em&gt; than coverage for once, we’re planning to go ahead with a major change to QM in the future: &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/issues/550&quot;&gt;matching Mojang’s package structure&lt;/a&gt;. Note that we’ve hardly started on the implementation of this change, so it’s still very much to feedback from the community (including you, dear reader!). This means that while QM will still define its own package names, all classes will be organised in the same packages as they are in Mojmap. This allows for a few major benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It gives us the ability to map &lt;code&gt;package-info&lt;/code&gt; files, which allow giving more context to users as to what an overall package is meant for.&lt;/li&gt;
&lt;li&gt;By mimicking Mojang’s structure, we allow QM names to be more future-proof: instead of deciding our own names which may be contrary to Mojang’s intentions, we follow their vision for the code exactly. This prevents situations where mappers organise things one way, and via game updates it becomes clear that Mojang intended the classes to be organised in a different manner, forcing us to refactor names.&lt;/li&gt;
&lt;li&gt;QM mappings will become more familiar to modders accustomed to using Mojmap.&lt;/li&gt;
&lt;li&gt;It eliminates the necessitity of remapping class access rules: QM’s arbitrary former package structure meant that package-private elements could be put in any package, meaning that tooling would have to edit those access rules to make sure they functioned the same as an unmapped game. Without this step, it’s easier to implement QM on platforms such as Neoforge that are moving to Mojmap-only.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And finally, &lt;a href=&quot;https://github.com/QuiltMC/enigma&quot;&gt;Enigma&lt;/a&gt; has of course been getting some love throughout the month. We’ve fixed a pile of bugs with version &lt;code&gt;2.2.1&lt;/code&gt;, and started work on some features for &lt;code&gt;2.3&lt;/code&gt;! &lt;code&gt;2.2.1&lt;/code&gt; brings fixes for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improper syncing of javadocs on the server&lt;/li&gt;
&lt;li&gt;A couple crashes&lt;/li&gt;
&lt;li&gt;A few false positives in the mapping uniqueness validator&lt;/li&gt;
&lt;li&gt;An edge case where valid Java code could be rejected&lt;/li&gt;
&lt;li&gt;The “decompile inner classes” Vineflower options causing decompilation failures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And in terms of features we have cooking, the &lt;code&gt;ctrl + f&lt;/code&gt; quick find dialogue has been updated and we’ve stolen yet another feature from IntelliJ: the progress bar in the corner. More details will come in next month’s post!&lt;/p&gt;
&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h2&gt;
&lt;h3 id=&quot;developer-wiki&quot;&gt;Developer Wiki&lt;/h3&gt;
&lt;p&gt;The Quilt Developer Wiki got not one, not two, but three new articles this month, thanks to a &lt;a href=&quot;https://github.com/QuiltMC/developer-wiki/pull/81&quot;&gt;rather enormous pull request&lt;/a&gt; from yours truly. These articles are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/getting-started&quot;&gt;Getting started with Quilt Config&lt;/a&gt;, an overview of the most important features in Quilt Config and how to use them. It includes how to set up a config in a Quilt mod, how to add values, using annotations to add metadata, and saving values in maps and lists.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/advanced-configuring&quot;&gt;Advanced configuring&lt;/a&gt;, an article that goes into all the gorgeous features of Quilt Config that you &lt;em&gt;don’t&lt;/em&gt; need for a simple configuration. However, for those storing complex values in the config or making large configs, this is a must-read! It goes into detail on serializing custom values outside of basic types, maps, and lists, as well as giving details on using the powerful processor feature and organising your config into separate sections and files.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata&quot;&gt;Annotation and metadata reference&lt;/a&gt;, a reference on all the different annotations Quilt Config allows you to apply to your configs, sections and fields. It currently includes:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata#comment&quot;&gt;@Comment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata#floatrange-and-integerrange&quot;&gt;@FloatRange and @IntegerRange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata#matches&quot;&gt;@Matches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata#processor&quot;&gt;@Processor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata#serializedname&quot;&gt;@SerializedName&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata#serializednameconvention&quot;&gt;@SerializedNameConvention (currently unreleased!)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata#alias&quot;&gt;@Alias (currently unreleased!)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve also updated the url to &lt;code&gt;wiki.quiltmc.org&lt;/code&gt; (from &lt;code&gt;modder.wiki.quiltmc.org&lt;/code&gt;). The original idea behind the frankly grody old domain was to create an entirely separate wiki on &lt;code&gt;user.wiki.q.o&lt;/code&gt; that was targeted specifically at users, to provide install information as well as tutorials for features like dependency overrides. We’ve decided that an entire dedicated domain is a tad overkill for the few tutorials that would be written for it.&lt;/p&gt;
&lt;h3 id=&quot;quilt-config&quot;&gt;Quilt Config&lt;/h3&gt;
&lt;p&gt;Quilt Config has seen the merge of a few minor pull requests this month, with some bigger ones in the works for a future &lt;a href=&quot;https://github.com/QuiltMC/quilt-config/milestone/1&quot;&gt;1.3&lt;/a&gt; release! &lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/metadata#processor&quot;&gt;Processors&lt;/a&gt; have gotten a pretty big update, getting full documentation and the ability to apply to sections, in addition to the fields and classes they could already work on. We’ve also removed some nonsense comments bloating config files with custom serialized values, added a new shortcut method to allow you to more easily set values, and fixed up some problematic Javadoc.&lt;/p&gt;
&lt;h3 id=&quot;quilt-loom&quot;&gt;Quilt Loom&lt;/h3&gt;
&lt;p&gt;Quilt Loom got updated to the latest Fabric Loom. Cool! Oro did this, so I probably should have made him write the section. As resident mappings girlie I hardly write mods and haven’t used this. Burn me at the cross now. It’s mostly about performance, with the headline feature being the way Loom remaps mixins being brought in line with the way everything else is remapped, for better consistency, more buglessness, and performance.&lt;/p&gt;
&lt;h3 id=&quot;quilt-kotlin-libraries&quot;&gt;Quilt Kotlin Libraries&lt;/h3&gt;
&lt;p&gt;Quilt Kotlin Libraries &lt;a href=&quot;https://github.com/QuiltMC/quilt-kotlin-libraries/pull/88&quot;&gt;has followed QSL in updating to &lt;code&gt;1.20.2&lt;/code&gt;&lt;/a&gt;! It also fixes a few old bugs and new bugs. Have fun!&lt;/p&gt;
&lt;p&gt;At last, that’s it for me. See you next month quilters. Keep slaying.&lt;/p&gt;</content:encoded></item><item><title>Quilt Development Update: March 2024</title><link>https://quiltmc.org/en/blog/2024-04-08-quilt-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2024-04-08-quilt-update/</guid><description>&lt;p&gt;In my journeys through the many QuiltMC codebases, I’ve learned many things. One of those teachings is that I should keep this intro short and sweet. This month saw tons of work on QSL, a big release of Quilt Loader, and a ton of new mappings. Simply delightful. Grab your machete, and I’ll show you the path to enlightenment via learning about updates to our block game modding toolchain.&lt;/p&gt;</description><pubDate>Mon, 08 Apr 2024 15:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;quilt-standard-libraries&quot;&gt;Quilt Standard Libraries&lt;/h1&gt;
&lt;p&gt;Despite not officially being on the program today, OroArmor has been hard at work updating &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries&quot;&gt;Quilt Standard Libraries&lt;/a&gt; and &lt;a href=&quot;https://github.com/QuiltMC/quilted-fabric-api&quot;&gt;Quilted Fabric API&lt;/a&gt;. This time, they’ve been updated to 1.20.4, squashing countless bugs, including one from 2021! In addition, he squeezed in a rework of the Recipe Remainder API.&lt;/p&gt;
&lt;p&gt;In the old Remainder API, there was &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/issues/251&quot;&gt;a long-standing bug&lt;/a&gt; which allowed duplicating items in a few mods. This would happen when smelting a water bucket to create an item like Modern Industrialization’s Steam Bucket: while the mod relied on the vanilla behaviour of the furnace input being destroyed, the QSL API erroneously saw a bucket being destroyed and assumed it should be kept as a remainder. Since the recipe creates a new bucket as output, this would result in smelting a water bucket giving you a bucketful of steam as well as an empty bucket left behind. The new version of the API solves this by requiring mods to explicitly state that they’d like to leave a remainder when it wouldn’t follow the vanilla behaviour.&lt;/p&gt;
&lt;h1 id=&quot;quilt-loader&quot;&gt;Quilt Loader&lt;/h1&gt;
&lt;p&gt;At the very beginning of March, the Loader team satisfied the Minecraft community’s eternal hunger for updates by delivering a major upgrade. There are headlines here for both users &lt;em&gt;and&lt;/em&gt; developers! First off, here are the new treats that users are getting.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The dependency error interface has been updated to be much more human readable for lists of versions. No longer do you need to take pre-calc and understand that &lt;code&gt;version range [0.5.7, 0.5.7] U [0.5.8, 0.5.8]&lt;/code&gt; means you need either version &lt;code&gt;0.5.7&lt;/code&gt; or &lt;code&gt;0.5.8&lt;/code&gt;. We’ll instead simply display a list of versions: &lt;code&gt;version 0.5.7 or 0.5.8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We’ve added a new startup screen which shows mods that Quilt Loader cannot load. Currently, it’ll recognise Neoforge, Forge, or Risugami’s Modloader mods, and inform you what’s going on.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now let’s get to the fun bit: the API stuff! Loader plugins have taken a huge step towards stability with the merge of the path retention system, which means that loader retains information on files and folders after finding them, allowing plugins loaded later to still scan those files and folders for mods. In terms of the non-plugin API, many GUI classes have been moved to the public-facing API, allowing the few mods that need them to work with Quilt Loader GUIs.&lt;/p&gt;
&lt;p&gt;Additionally, you may have noticed that a new project has cropped up under the Quilt GitHub organisation: &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader-bootstrap&quot;&gt;Quilt Loader Bootstrap&lt;/a&gt;! This new project will, in the future, allow Quilt Loader to update itself, saving you a trip to &lt;a href=&quot;https://quiltmc.org&quot;&gt;https://quiltmc.org&lt;/a&gt; to go grab an installer file to run every time you need to update Quilt Loader. It solves the issue of adding Quilt Loader and its libraries to be added to the Java classpath after launch, the main blocker to allowing painless updates. Its &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader-bootstrap?tab=readme-ov-file#quilt-loader-bootstrap&quot;&gt;README&lt;/a&gt; file has more information!&lt;/p&gt;
&lt;p&gt;The loader team is already hard at work on the next updates!&lt;/p&gt;
&lt;h1 id=&quot;quilt-mappings&quot;&gt;Quilt Mappings&lt;/h1&gt;
&lt;p&gt;Like a glorious phoenix, Quilt Mappings’ completion of Minecraft has risen 1% this month. Well, 0.95% to be exact. But let me have this, ok? Let’s start with the beautiful imagery.
&lt;img src=&quot;/assets/img/writing/blog/2024-04-08-quilt-update/mapping-comparison.png&quot; alt=&quot;A beautiful comparison of mapping statistics, going from 93.3% to 94.3%&quot;&gt;&lt;/p&gt;
&lt;p&gt;Now I know, looking at that image, your first thought is “how, pray tell, has Quilt’s &lt;em&gt;creme de la creme&lt;/em&gt; in terms of developers managed to achieve this feat?” An understandable question, dear reader. Over &lt;code&gt;24w10a&lt;/code&gt;, &lt;code&gt;24w11a&lt;/code&gt;, &lt;code&gt;24w12a&lt;/code&gt;, and &lt;code&gt;24w13a&lt;/code&gt;, nine pull requests have been merged adding new mappings, as well as two refactor pull requests! These pull requests were all made by &lt;a href=&quot;https://github.com/ix0rai&quot;&gt;myself&lt;/a&gt;, &lt;a href=&quot;https://github.com/supersaiyansubtlety&quot;&gt;supersaiyansubtlety&lt;/a&gt; and &lt;a href=&quot;https://github.com/pyrox0&quot;&gt;pyrox0&lt;/a&gt; in a truly incredible run that we’d rather not repeat this month. If you’d like to help us increase our coverage, our &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/blob/HEAD/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; is a great place to start!&lt;/p&gt;
&lt;p&gt;The most notable achievements this month are completing mappings of Mojang’s new item component system added in &lt;a href=&quot;https://quiltmc.org/en/mc-patchnotes/#24w09a&quot;&gt;24w09a&lt;/a&gt;, completing mappings for entities. We’ve also added tons of new mappings in areas such as networking, screens, datafixers, potions, and more!&lt;/p&gt;
&lt;p&gt;Enigma got quite a bit of minor work as well this month, working towards the release of the &lt;code&gt;2.3.0&lt;/code&gt; update. The highlights are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an improved for look for the &lt;code&gt;ctrl + f&lt;/code&gt; quick find dialogue&lt;/li&gt;
&lt;li&gt;cleaned up information in the identifier panel&lt;/li&gt;
&lt;li&gt;fixing desyncs between the entry navigator and the actual mappings&lt;/li&gt;
&lt;li&gt;the merge of &lt;code&gt;2.3&lt;/code&gt;’s major feature, the new &lt;a href=&quot;https://github.com/QuiltMC/enigma/pull/183&quot;&gt;progress bar&lt;/a&gt; which indicates what enigma is doing in the background as you map&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stay tuned for the release, coming soon! You know it’s actually coming soon because it’s me saying it, and not Oro.&lt;/p&gt;
&lt;h1 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h1&gt;
&lt;p&gt;Lots of work has been happening on smaller Quilt projects this month, with the &lt;a href=&quot;https://quiltmc.org&quot;&gt;website&lt;/a&gt;, the &lt;a href=&quot;https://wiki.quiltmc.org/en&quot;&gt;developer wiki&lt;/a&gt;, &lt;a href=&quot;https://github.com/QuiltMC/quilt-config&quot;&gt;Quilt Config&lt;/a&gt; and &lt;a href=&quot;https://github.com/QuiltMC/quilt-loom&quot;&gt;Quilt Loom&lt;/a&gt; getting attention.&lt;/p&gt;
&lt;p&gt;First, there’s a new page on our website! &lt;a href=&quot;https://quiltmc.org/en/changelog/&quot;&gt;The changelog page&lt;/a&gt; is here to save you from needing to sift through Discord and GitHub to find changelogs for Quilt projects. Currently, it supports Enigma and Quilt Config, and will be updated to include more projects and more versions in the future! It automatically updates as new changelogs are written for each project. Eventually, we hope to include every major Quilt project on this page! In addition, we’ve reorganised the install page and updated it in order to reflect the release of GDLauncher Carbon, the latest launcher to add support for Quilt.&lt;/p&gt;
&lt;p&gt;The developer wiki has received a big update thanks to &lt;a href=&quot;https://github.com/c-leri&quot;&gt;celeri&lt;/a&gt;, who translated every single page to French! We also reworked the “Creating your first item” page in order to be more clear and useful.&lt;/p&gt;
&lt;p&gt;Finally, Quilt Config got tons of work towards its &lt;code&gt;1.3&lt;/code&gt; release and Quilt Loom was updated to pull in Fabric’s changes in Loom &lt;code&gt;1.6&lt;/code&gt;! Thanks for reading, and I’ll be back with more updates next month. You can’t stop me. Many have tried.&lt;/p&gt;</content:encoded></item><item><title>Quilt Development Update: April, May &amp; June 2024</title><link>https://quiltmc.org/en/blog/2024-07-02-quilt-update/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2024-07-02-quilt-update/</guid><description>&lt;p&gt;Welcome back to the blog, quilters. It’s been three months since the last time I wrote up one of these big update posts, three months since you skipped to the parts you cared about without reading my whole post, and one month since Eminem released a new Slim Shady song and took away my chance to start this post with a “guess who’s back” joke. Which is fine. I’m not mad. Not even a little. Let’s see what happened with Quilt in the last few months!&lt;/p&gt;</description><pubDate>Tue, 02 Jul 2024 23:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;quilt-loader&quot;&gt;Quilt Loader&lt;/h2&gt;
&lt;p&gt;As always, our beloved Alex has been cooking up endless amounts of features and fixes for Quilt Loader. We released two major updates in the past 3 months, &lt;a href=&quot;https://quiltmc.org/en/changelog/quilt-loader/0.25.0/&quot;&gt;&lt;code&gt;0.25.0&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://quiltmc.org/en/changelog/quilt-loader/0.26.0/&quot;&gt;&lt;code&gt;0.26.0&lt;/code&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Starting things off, landing in &lt;code&gt;0.25&lt;/code&gt; is a &lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/pull/414&quot;&gt;feature&lt;/a&gt; by a new contributor, &lt;a href=&quot;https://github.com/FirstMegaGame4&quot;&gt;Mega&lt;/a&gt;! This is an annotation built into Loader that allows stripping code from your mod when another mod is not detected. This is an easy way to improve compatibility with other mods that don’t implement their own entrypoints. To parrot the example from Mega’s PR description, this is usable to make an item a &lt;a href=&quot;https://modrinth.com/mod/trinkets&quot;&gt;trinket&lt;/a&gt; only when that mod is loaded:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; MyOptionalTrinketItem&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; extends&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Item&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; implements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; @&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Requires&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&quot;trinkets&quot;) &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Trinket&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;	@&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;	@&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;Requires&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;trinkets&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;	public&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Multimap&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;EntityAttribute&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;EntityAttributeModifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt; &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getModifiers&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(ItemStack &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;stack&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, SlotReference &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;slot&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, LivingEntity &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;entity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, UUID &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;uuid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;		// code that will only exist in the mod if Trinkets is loaded!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When using this annotation, be careful to always test in production without the optional mod in order to ensure you properly stripped all references. This release also contains some minor features and fixes, such as providing the reason in inter-mod breakage errors.&lt;/p&gt;
&lt;p&gt;Moving on to &lt;code&gt;0.26&lt;/code&gt;, we have a release more geared towards backend improvements than new APIs for mod developers. The lovely &lt;a href=&quot;https://github.com/lukebemish&quot;&gt;Lukebemish&lt;/a&gt; contributed a &lt;a href=&quot;https://github.com/quiltmc/quilt-loader/issues/418&quot;&gt;rework of how Loader manages its dependencies&lt;/a&gt;, making it much, &lt;em&gt;much&lt;/em&gt; easier to depend on Loader outside of Loom. Another new contibutor, &lt;a href=&quot;https://github.com/voidpointer0x00&quot;&gt;voidpointer&lt;/a&gt;, added a new commandline parameter, &lt;code&gt;-Dloader.ignore_unsupported_mods=true&lt;/code&gt;, that allows ignoring the errors for mods in the mod folder that cannot be loaded by Quilt. This release also makes two improvements to crash reports, which the changelog will tell you about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Include the zone offset (raw time number like +0100) in the actual crash report file. This should help when assisting people in other timezones, as we can figure out how recently a crash report was generated.&lt;/li&gt;
&lt;li&gt;Change from CLOCK_HOUR_OF_DAY to HOUR_OF_DAY. This means we’ll get digital time at 15 minutes past midnight (00:15) rather than analog time (24:15).
Of course, this release also comes with some important bug fixes and minor changes. Which I would love to talk about. But corporate tells me I’m consistently exceeding my word budget on these posts, so on to another update under the Loader umbrella: Quilt Config!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;quilt-config&quot;&gt;Quilt Config&lt;/h3&gt;
&lt;p&gt;Right at the beginning of April, we released Quilt Config’s biggest update ever: &lt;a href=&quot;https://quiltmc.org/en/changelog/quilt-config/1.3.0/&quot;&gt;&lt;code&gt;1.3.0&lt;/code&gt;&lt;/a&gt;! Quilt Loader has already updated, so all these features are already available to use in your mods as of Loader &lt;a href=&quot;https://quiltmc.org/en/changelog/quilt-loader/0.25.0/&quot;&gt;&lt;code&gt;0.25.0&lt;/code&gt;&lt;/a&gt;. The main highlight of this release is five new annotations, but we’ll get to those in a second. Firstly, we solved two big issues with using &lt;a href=&quot;https://quiltmc.org/en/changelog/quilt-config/1.2.0/&quot;&gt;&lt;code&gt;1.2&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The deprecated &lt;code&gt;WrappedConfig&lt;/code&gt; system had some major flaws (on top of the ones that make it impractical and deprecated!) related to using simple types like &lt;code&gt;String&lt;/code&gt;. Compiled code in Java will inline references to constant values (those prefixed with &lt;code&gt;final&lt;/code&gt;), meaning that the hackery we did to change the values in the code according to the ones read from the config wouldn’t always work. The inlined usages of those variables are no longer references, they just directly pass in the original value, ignoring what was read from the config file. We now allow using non-final fields in &lt;code&gt;WrappedConfig&lt;/code&gt; configs, and print warnings when fields are final. This will resolve that issue, but make it easier to misuse the system and cause unexpected behaviour. We highly recommend using &lt;code&gt;ReflectiveConfig&lt;/code&gt; instead.&lt;/li&gt;
&lt;li&gt;Processors were undocumented (besides on our &lt;a href=&quot;https://wiki.quiltmc.org/en/configuration/advanced-configuring#using-processors&quot;&gt;lovely wiki&lt;/a&gt;) and didn’t work consistently. We’ve now added extensive Javadocs and fixed them not working on sections to make their behaviour more predictable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now for the exciting part! Composing the five new annotations in this version are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@SerializedNameConvention&lt;/code&gt;: this allows you to define a convention for automatically converting your field names to a specific casing for serialization. The most common use case for this is to convert the &lt;code&gt;camelCase&lt;/code&gt; of your Java field names to the &lt;code&gt;snake_case&lt;/code&gt; that is the TOML convention. You can apply this to every field in a class with just one annotation!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Alias&lt;/code&gt;: this annotation, in addition to being cutie baby, allows you to change the names of elements in your config while maintaining backwards compatibility. Note that there is no mechanism in Quilt Config to migrate the type of your field (yet!) so this will only be useful for direct name changes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@ChangeWarning&lt;/code&gt;: allows you to define how destructive changing a specific config value will be: gives the options of &lt;code&gt;RequiresRestart&lt;/code&gt;, &lt;code&gt;Unsafe&lt;/code&gt;, &lt;code&gt;Experimental&lt;/code&gt;, and &lt;code&gt;Custom&lt;/code&gt; (with &lt;code&gt;CustomTranslatable&lt;/code&gt; also an option!).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@DisplayName&lt;/code&gt; and &lt;code&gt;@DisplayNameConvention&lt;/code&gt;: allows you to define a nicely formatted name for your value, to be displayed to users. Supports translations!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those last three annotations have no real functionality in Quilt Config: you’re simply defining more information to be attached to your config field as metadata. Quilt Config &lt;code&gt;1.3&lt;/code&gt; is a huge step forward in terms of establishing the APIs and annotations we need in order to build a mod that will use that information to automatically generate config screens for all mods using Quilt Config. If you’re a real Quilt Config aficionado, make sure to check the full changelogs for &lt;a href=&quot;https://quiltmc.org/en/changelog/quilt-config/1.3.0/&quot;&gt;&lt;code&gt;1.3.0&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://quiltmc.org/en/changelog/quilt-config/1.3.1/&quot;&gt;&lt;code&gt;1.3.1&lt;/code&gt;&lt;/a&gt; to see all the smaller changes we made!&lt;/p&gt;
&lt;h2 id=&quot;quilt-standard-libraries&quot;&gt;Quilt Standard Libraries&lt;/h2&gt;
&lt;p&gt;QSL has received quite a bit of attention in the past few months, both on released versions and the work-in-progress ports to &lt;code&gt;1.20.6&lt;/code&gt; and &lt;code&gt;1.21&lt;/code&gt;. &lt;code&gt;1.20.4&lt;/code&gt; got two minor features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/commit/7449ab2da1d652fce034751b44f49274e01c6765&quot;&gt;new event&lt;/a&gt; for when networking configuration is complete and ready to move into the PLAY phase.&lt;/li&gt;
&lt;li&gt;An option to &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/commit/f3f3ad054cc475b17e9209ed85423f3dbf504ff0&quot;&gt;reserialize custom packets&lt;/a&gt;, fixing edge cases with networking compatibility compared to Fabric API. Coincidentally, Mojang have implemented this same functionality in Minecraft &lt;code&gt;1.20.5+&lt;/code&gt;, which means we’ll be able to drop this hackfix in future versions. Which is cute for us. Not that you care.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ve been hard at work with the ports, and I’d like to use this post to explain part of why ports of Quilt Standard Libraries take so &lt;em&gt;long&lt;/em&gt;. As you probably know already, we simply have less developer time available, making it more difficult to keep up with Mojang. However, that’s not the only reason we release API much later than other loaders. Instead of prioritising maintaining the same API surface between Minecraft updates, our philosophy is to break as much as we need in order to make a more elegant API. This allows developers to better understand the way Minecraft’s systems work, through molding QSL’s APIs to Mojang’s changes. However, reworking APIs takes time, and right now it’s yet another barrier to quickly releasing updates.&lt;/p&gt;
&lt;p&gt;This release schedule makes it very difficult to develop mods using QSL, so we’re making a few changes to the process. Instead of creating a monolithic port to be released all at once, for future versions we’ll be releasing QSL module-by-module, to ensure that developers have something to work with as soon as possible. Using this system, we’ll be able to release core systems such as entrypoints day one. Until QSL is fully ported, unported modules will be disabled and unusable by mods. We’ve begun doing this with a core-only publication of QSL for 1.20.6.&lt;/p&gt;
&lt;h3 id=&quot;quilted-fabric-api&quot;&gt;Quilted Fabric API&lt;/h3&gt;
&lt;p&gt;Moving on to QFAPI, we’re also making major changes over there. Instead of a system where we maintain a full fork of the FAPI codebase, we’re moving over to maintaining &lt;em&gt;patches&lt;/em&gt; that will apply to the original codebase. Previously, for each update to the FAPI code we had to fight with git merges in order to get the new code into our parallel project. Each time we did so, we were adding commits and confusion to the git tree, making the next merge an even harder project. With patches, we’ll have the much easier job of updating any out-of-date patches with each update to upstream FAPI instead of dealing with hundreds of files needing merge attention. Progress has been steady on this new system, and we’re just as excited to have an easier time updating as you are to get faster updates.&lt;/p&gt;
&lt;p&gt;In terms of actual releases and not just work-in-progress stuff, we’ve done a few updates! To shorten a &lt;em&gt;lot&lt;/em&gt; of work (a lot of fighting with git) into just a sentence, we released &lt;code&gt;1.20.4&lt;/code&gt; and synced it up to FAPI &lt;code&gt;0.97.0&lt;/code&gt;, as well as updated our &lt;code&gt;1.20.1&lt;/code&gt; version to FAPI &lt;code&gt;0.92.2&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;quilt-mappings&quot;&gt;Quilt Mappings&lt;/h2&gt;
&lt;p&gt;It’s been &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/commits/1.21/?since=2024-04-01&amp;#x26;until=2024-06-25&quot;&gt;three months&lt;/a&gt; since we last updated you on the state of Quilt Mappings. Perhaps that lack of blog attention combined with a slight lack of maintainer attention is what’s caused this drop in percentage. Either way, don’t linger too long on my shame. We’ve lost nearly 1% in the last 3 months.
&lt;img src=&quot;/assets/img/writing/blog/2024-07-02-quilt-update/mapping-comparison.png&quot; alt=&quot;A beautiful comparison of mapping statistics, going from 94.37% to 93.55%&quot;&gt;
At the very least, we’re gaining once again as of 1.21! Contributions are always welcome, and Quilt Mappings is one of the easiest modding projects to hop into and start helping with. Check out our &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings/blob/HEAD/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; to get started!&lt;/p&gt;
&lt;h3 id=&quot;enigma&quot;&gt;Enigma&lt;/h3&gt;
&lt;p&gt;Now on to my child. The software behind it all. Enigma. We made &lt;a href=&quot;https://quiltmc.org/en/changelog/enigma/2.3.0/&quot;&gt;three&lt;/a&gt; &lt;a href=&quot;https://quiltmc.org/en/changelog/enigma/2.3.1/&quot;&gt;enigma&lt;/a&gt; &lt;a href=&quot;https://quiltmc.org/en/changelog/enigma/2.4.0/&quot;&gt;releases&lt;/a&gt; in the last few months, with two big updates and a bugfix release!&lt;/p&gt;
&lt;p&gt;Starting with &lt;a href=&quot;https://quiltmc.org/en/changelog/enigma/2.3.0/&quot;&gt;&lt;code&gt;2.3.0&lt;/code&gt;&lt;/a&gt;, we put out an update composed of mostly small features. We added some UI garnish, with a corner progress bar telling you what’s going on in the background, more info in the info panel, and info on dockers when they’re inactive instead of just an empty panel. For info lovers, this one’s a treat! We also made lots of bugfixes, updated dependencies, and added a couple new config options. Then &lt;a href=&quot;https://quiltmc.org/en/changelog/enigma/2.3.1/&quot;&gt;&lt;code&gt;2.3.1&lt;/code&gt;&lt;/a&gt; was released because the updated ASM dependency was a pinned snapshot that expired. Oops.&lt;/p&gt;
&lt;p&gt;After relaxing with a mostly-UI update, for &lt;a href=&quot;https://quiltmc.org/en/changelog/enigma/2.4.0/&quot;&gt;&lt;code&gt;2.4.0&lt;/code&gt;&lt;/a&gt; we went back to the backend and broke the API. The main change here was moving reading and writing mappings into services, which are defined by Enigma plugins. We did this in order to abstract out reading and writing, so that we can add support for different methods without continuing to complicate the internals. We’ll be using this in the future to add &lt;a href=&quot;https://github.com/FabricMc/Mapping-IO&quot;&gt;Mapping-IO&lt;/a&gt; support. With this comes new features like active-by-default services that bypass the need to enable them in the profile, filters for the “open mappings” dialogue in the UI to make it easier to search for mappings, and validation for lambda parameter names. That last one is important — lambda parameter names previously had no validation, but now it’s impossible to introduce clashes between parameter names using the UI! And of course, we fixed tons of bugs, added more little features, and updated some dependencies.&lt;/p&gt;
&lt;p&gt;And we’ve still got one more thing to share with you! Quilt Enigma is being &lt;a href=&quot;https://github.com/ParchmentMC/Parchment/pull/268&quot;&gt;tested out&lt;/a&gt; by &lt;a href=&quot;https://parchmentmc.org/&quot;&gt;Parchment&lt;/a&gt;, another mappings project for Minecraft. Parchment takes Mojang’s official mappings, and adds parameters and Javadoc to make it more usable. Parchment is a great project, and we’re glad that we can help them out with our tooling!&lt;/p&gt;
&lt;h2 id=&quot;quiltmcorg&quot;&gt;quiltmc.org&lt;/h2&gt;
&lt;p&gt;In the last few months, the website has received &lt;a href=&quot;https://github.com/QuiltMC/quiltmc.org/commits/main/?since=2024-04-01&amp;#x26;until=2024-06-25&quot;&gt;quite a few updates&lt;/a&gt;! We could go in chronological order (yuck, boring, been doing it all post) to see the additions but I think it’s more fun if we take a little tour.&lt;/p&gt;
&lt;p&gt;Starting off in the top bar, you may immediately notice a big change: there’s a &lt;a href=&quot;https://github.com/QuiltMC/quiltmc.org/pull/200&quot;&gt;search bar now&lt;/a&gt;! This search bar uses the &lt;a href=&quot;https://lunrjs.com/&quot;&gt;lunr.js&lt;/a&gt; backend, and allows you to search for any page on the site. As the dropdowns continue to expand with more and more pages, I’m glad those who don’t spend 25 hours a day on &lt;a href=&quot;https://quiltmc.org&quot;&gt;https://quiltmc.org&lt;/a&gt; like me will still be able to find their way around.&lt;/p&gt;
&lt;p&gt;Moving along the top bar, you may notice that the &lt;a href=&quot;https://quiltmc.org/en/usage/&quot;&gt;usage&lt;/a&gt; dropdown has grown in size a bit. Firstly, we’ve created a dedicated page for &lt;a href=&quot;https://quiltmc.org/en/usage/known-incompatibilities/&quot;&gt;known QFAPI incompatibilities&lt;/a&gt;. This page lists off all mods that work when running &lt;a href=&quot;https://modrinth.com/mod/fabric-api&quot;&gt;Fabric API&lt;/a&gt;, but not &lt;a href=&quot;https://modrinth.com/mod/fabric-api&quot;&gt;Quilted Fabric API&lt;/a&gt;. If you’re using QFAPI and run into issues, this is the first place to check! But let’s move on. We’ve been busy, and there’s more to look at on the website.&lt;/p&gt;
&lt;p&gt;On the sidebar, there are now five items where there used to be two! We’ve just gone over one, but there are still more new pages to see. Firstly, we’ve created an official &lt;a href=&quot;https://quiltmc.org/en/usage/latest-versions/&quot;&gt;import utility&lt;/a&gt; for finding the latest versions of each Quilt project for a given Minecraft version. We previously had an unofficial utility maintained by &lt;a href=&quot;https://github.com/lambdaurora&quot;&gt;LambdAurora&lt;/a&gt;, and all the same features that utility had have made their way to the official website. Finally, the biggest new addition: &lt;a href=&quot;https://quiltmc.org/en/usage/generator/&quot;&gt;the mod generator&lt;/a&gt;! This page, similar to the one recently launched by &lt;a href=&quot;https://fabricmc.net/develop/template/&quot;&gt;Fabric&lt;/a&gt;, automatically customizes a mod template, so that you can just download and get right into modding. No more fiddling with renaming directories and messing with metadata before you can get up and running!&lt;/p&gt;
&lt;p&gt;That’s about it for the exciting new things, but thanks to the work of contributors like &lt;a href=&quot;https://github.com/UpcraftLP&quot;&gt;Up&lt;/a&gt; and &lt;a href=&quot;https://github.com/Pyrofab&quot;&gt;Pyro&lt;/a&gt;, we’ve done plenty of updates to our existing pages and maintainance to keep the website running smoothly. Finally, while being a lovely engaged reader and clicking the many cute blue hyperlinks I’ve been feeding you, you may have noticed a small quirk of our website: right now, absolutely nothing has icons. We previously had a paid subscription to an icon kit, &lt;a href=&quot;https://fontawesome.com/&quot;&gt;FontAwesome&lt;/a&gt;, but are now in between icon sets. Let me know if you like the new, weird-blank-space-abundant layout. I think I might push to keep it.&lt;/p&gt;
&lt;h3 id=&quot;quilt-developer-wiki&quot;&gt;Quilt Developer Wiki&lt;/h3&gt;
&lt;p&gt;If you turn your attention over to our &lt;a href=&quot;https://wiki.quiltmc.org/en&quot;&gt;wiki&lt;/a&gt;, you’ll also notice a few new things! We’ve written up a &lt;a href=&quot;https://wiki.quiltmc.org/en/misc/mappings&quot;&gt;beginner’s guide&lt;/a&gt; to understanding and contributing to Quilt Mappings, and as per usual rewritten some sections of the other pages in order to increase clarity. We’ve also finally added a proper &lt;a href=&quot;https://wiki.quiltmc.org/en&quot;&gt;landing page&lt;/a&gt;, giving our work-in-progress wiki the beginning of that finished project shine! Monthly reminder to thank &lt;a href=&quot;https://github.com/c-leri&quot;&gt;c-leri&lt;/a&gt; for doing much of the backend work to keep the Quilt wiki running.&lt;/p&gt;
&lt;h3 id=&quot;quilt-infrastructure&quot;&gt;Quilt Infrastructure&lt;/h3&gt;
&lt;p&gt;Quilt’s infrastructure has been, to be nice and pretty much give our servers a pat on the head and a good job, not working very well for a long while now. We’ve kept everything up (except the forum!) and reliable, but behind the scenes things have been pretty messy. In the last few months, our infrastructure team has been cleaning everything up in the background, as well as making sure that our infra won’t become a disaster for a second time.&lt;/p&gt;
&lt;p&gt;We moved to the platform &lt;a href=&quot;https://argo-cd.readthedocs.io/en/stable/&quot;&gt;Argo CD&lt;/a&gt; for &lt;em&gt;continuous delivery&lt;/em&gt;, which is fancy way to say keeping everything running all the time. We’re using Argo CD for a few reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It allows us to monitor and interact with resources on our servers through a nice user interface, diminishing the technological wizardry we have to go through on a regular basis.&lt;/li&gt;
&lt;li&gt;It allows us to define granular permissions, which we can use to allow teams who don’t have access to all of our infrastructure to run maintenance like updates and restarts on the projects they work on.&lt;/li&gt;
&lt;li&gt;In general, it allows our deployments to be more reproducible and explictly defined, helping with the aforementioned keeping infrastructure from falling apart.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Moving on to updates our lovely users actually benefit from, the &lt;a href=&quot;https://forum.quiltmc.org/&quot;&gt;Quilt Forum&lt;/a&gt; has been brought back from the dead! Now that it’s up and running again, we intend to post to the forum more often with changelogs and blog posts like this one! This took a lot of work, and we’re still finishing it up: as of writing, the forum is readable, but not everyone can make posts yet. The full forum should be ready soon!&lt;/p&gt;
&lt;p&gt;In order to prevent another long period of downtime for the forum, we’ve set up regular backups of all our databases. We’ll be able to quickly restore one of these in case of another hardware failure like the one that took down the forum last time!&lt;/p&gt;
&lt;p&gt;We also &lt;a href=&quot;https://github.com/QuiltMC/quilt-helm-charts/pull/5&quot;&gt;cleaned up&lt;/a&gt; the way we deploy new versions of our Discord bot, &lt;a href=&quot;https://github.com/QuiltMC/cozy-discord&quot;&gt;Cozy&lt;/a&gt;, and gave her a little more memory to work with to make mappings lookup more reliable. Finally, we’ve moved all of our servers with sensitive data (such as Modmail), over to providers in the European Union. This guarantees we comply with the &lt;a href=&quot;https://gdpr-info.eu/&quot;&gt;GDPR&lt;/a&gt; privacy laws to protect your data.&lt;/p&gt;
&lt;p&gt;And that’s everything big that we worked on in the last few months! Come back next month for a hopefully-on-time July update.&lt;/p&gt;</content:encoded></item><item><title>QSL and QFAPI for 1.20.6 and beyond</title><link>https://quiltmc.org/en/blog/2024-07-03-qfapi-moving-forward/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2024-07-03-qfapi-moving-forward/</guid><description>&lt;p&gt;QFAPI is out &lt;em&gt;now&lt;/em&gt; for 1.20.6 and 1.21. However, the version of QSL (the Quilt-only tools we provide developers) bundled in these versions is much smaller than before, and currently only contains the &lt;code&gt;qsl_base&lt;/code&gt; and &lt;code&gt;crash_info&lt;/code&gt; modules. More APIs will be reintroduced to QSL as time goes on. This means that mods written using Quilt Standard Libraries may need extra work to be ported to 1.20.6 and beyond, while Fabric mods for these versions will work fine. Additionally, delays on updating to new versions should be significantly shorter in the future.&lt;/p&gt;</description><pubDate>Wed, 03 Jul 2024 20:00:00 GMT</pubDate><content:encoded>&lt;p&gt;More importantly, however, you may have noticed that this is the second blog post in two days! That’s not even enough time for Eminem to write another song. This is because rai (your usual blog post correspondent) now has competition! If she doesn’t turn in the next monthly blog post on time, I’m replacing her with an AI trained on speeches given by members of the Canadian Parliament. What could go wrong?&lt;/p&gt;
&lt;!-- MORE --&gt;
&lt;h2 id=&quot;the-meat-of-the-story&quot;&gt;the meat of the story&lt;/h2&gt;
&lt;!--the actual blog post begins here--&gt;
&lt;p&gt;On a more serious note, you may have noticed that 1.20.6 has been out since late April, but QSL and QFAPI had (until this blog post) still not updated. And this has been a problem stretching all the way back to 2022, when QFAPI was first released. I want to take some time to describe why we’ve had so much trouble updating, what we’re doing about it now, and some ideas we’re considering for the future.&lt;/p&gt;
&lt;h2 id=&quot;why-things-have-taken-so-darn-long&quot;&gt;why things have taken so darn long&lt;/h2&gt;
&lt;p&gt;QSL updates are slow for a few reasons. For one, it’s huge! It spans several very complex problems that normal modders don’t need to think much about, like the internals of networking, synchronizing registries, and loading mod-provided resources. Additionally, these huge APIs touch parts of the Minecraft codebase that are refactored by Mojang all the time, meaning even an update like 1.20.4 to 1.20.5 might require a rewrite of half the networking module.&lt;/p&gt;
&lt;p&gt;Another hurdle for porting QSL is that its APIs must be implemented in a way that is compatible with QFAPI. This means that we not only have to design a new API that elegantly represents how the internal Minecraft code changed, while still being similar enough to Fabric that we can maintain compatability.&lt;/p&gt;
&lt;p&gt;But perhaps the biggest problem with porting QSL is that these complex APIs are really old! The original contributors for these APIs, who intimately understood how they worked, have moved on from Quilt. That means that our “new guard” of core maintainers, who didn’t write the now-broken APIs, have to learn how they work as we try to fix them, which is slow and very error-prone.&lt;/p&gt;
&lt;h2 id=&quot;what-were-doing-about-it-now-or-how-i-learned-to-stop-worrying-and-love-fabric-api&quot;&gt;what we’re doing about it now, or “how i learned to stop worrying and love fabric api”&lt;/h2&gt;
&lt;p&gt;Clearly, QSL in its current form is not sustainable, and we’re going to need to do significant work on it so that it can be updated quickly. However, we lack the contributions to both work on a rewrite of QSL and keep the behemoth old QSL updated. So, in the meantime we’re going to distribute an extremely stripped down version of QSL. Currently, that means only &lt;code&gt;qsl_base&lt;/code&gt;, the module that provides entrypoints and an event system, and &lt;code&gt;crash_info&lt;/code&gt;, so that crash reports are still Quilt-y. Quilt modders looking to port to 1.20.6 and beyond should migrate their use of Quilt APIs to the relevant Fabric equivalents for the time being.&lt;/p&gt;
&lt;p&gt;If you are a Quilt modder who relied on a Quilt API with no Fabric replacement, please tell us! We want to prioritize providing APIs that modders actually use, so please &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries/issues/new&quot;&gt;open an issue&lt;/a&gt; and let us know.&lt;/p&gt;
&lt;h2 id=&quot;moving-forward&quot;&gt;moving forward&lt;/h2&gt;
&lt;p&gt;Stripping QSL like this is meant to be a stop-gap solution to keep things moving along while we fix the underlying issues with QSL. We aren’t sure exactly how things will change in the future. We may eventually restore all the old QSL APIs and continue business as usual, remove some modules which unnecessarily  share code with Fabric (like networking), or even move to QSL being only an extension on Fabric API.&lt;/p&gt;
&lt;p&gt;No matter what happens, our first priority moving forward is to ensure that Quilt Loader users are able to play with their favorite mods on new versions as soon as possible.&lt;/p&gt;</content:encoded></item><item><title>Bringing Quilt into the non-obfuscated era</title><link>https://quiltmc.org/en/blog/2026-02-03-non-obfuscated-updates/</link><guid isPermaLink="true">https://quiltmc.org/en/blog/2026-02-03-non-obfuscated-updates/</guid><description>&lt;p&gt;With Mojang’s announcement that the future of Minecraft doesn’t include obfuscated code, we’re making some changes to help Quilt move into the new era of modding. Goodbye, Quilt Mappings.&lt;/p&gt;</description><pubDate>Tue, 03 Feb 2026 20:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2026-02-03-non-obfuscated-updates/mappings.png&quot; alt=&quot;a Minecraft map, marked with an x&quot;&gt;&lt;/p&gt;
&lt;p&gt;A bomb has been dropped on the modding community: In October last year, &lt;a href=&quot;https://www.minecraft.net/en-us/article/removing-obfuscation-in-java-edition&quot;&gt;Mojang announced&lt;/a&gt; that, beginning with the snapshots for Minecraft &lt;code&gt;26.1&lt;/code&gt;, Minecraft’s code will no longer be obfuscated. For those who don’t know what that means, for Minecraft’s whole lifetime its code has been “&lt;a href=&quot;https://en.wikipedia.org/wiki/Obfuscation_(software)&quot;&gt;obfuscated&lt;/a&gt;”, or scrambled to make it more difficult to read. From &lt;code&gt;26.1&lt;/code&gt; onwards, modders will have access to the complete, unscrambled code that Mojang developers do, which is a fundamental change for how mods are made. Until now, projects like &lt;a href=&quot;http://www.modcoderpack.com/&quot;&gt;Mod Coder Pack&lt;/a&gt; (MCP), &lt;a href=&quot;https://github.com/QuiltMC/quilt-mappings&quot;&gt;Quilt Mappings&lt;/a&gt; (QM), and &lt;a href=&quot;https://github.com/FabricMC/yarn&quot;&gt;Yarn&lt;/a&gt; have provided “mappings” to make the obfuscated code readable, and Mojang even offers a set of mappings themselves. However, now that the code isn’t obfuscated in the first place, mapping projects are no longer needed. Thus, it is with heavy hearts that we, the Quilt admin team, declare that Quilt Mappings will no longer be maintained for new Minecraft versions. But also YAYYYY more time for other projects! This post is an overview of the changes we’re planning to make to Quilt so that we can move into the non-obfuscated era with our characteristic poise and elegance.&lt;/p&gt;
&lt;h2 id=&quot;quilt-mappings&quot;&gt;Quilt Mappings&lt;/h2&gt;
&lt;p&gt;As we stated in the intro, QM will not be released for any future versions of Minecraft, although we will still accept contributions for older versions. This doesn’t mean that mapping projects as a whole are over, though! We &lt;em&gt;sort of&lt;/em&gt; lied when we said that the mappings are complete. They’re missing one important aspect of the code: the developer documentation. The &lt;a href=&quot;https://github.com/ParchmentMC/Parchment&quot;&gt;Parchment&lt;/a&gt; project intends to continue releasing documentation for newer versions, and you might just see a few of our team members helping out there.&lt;/p&gt;
&lt;p&gt;Those more familiar with mappings will know that we spend a lot of time building software and libraries to help us keep up with Minecraft’s constant updates, and the end of QM doesn’t mean the end of all that great work! Our technology is still going to be used in documenting Minecraft, legacy modding projects, and even mapping efforts outside of Minecraft, so we don’t intend to let QM’s software ecosystem die with it. Even beyond user numbers, the team is passionate about our software, and we want to keep building it. The primary project for the Mappings team will now be &lt;a href=&quot;https://github.com/QuiltMC/enigma&quot;&gt;Enigma&lt;/a&gt;, the program we used to make mappings for Minecraft. Enigma’s development has been going strong since Quilt was born, with our huge version &lt;code&gt;2.7&lt;/code&gt; having &lt;a href=&quot;https://quiltmc.org/en/changelog/enigma/2.7.0/&quot;&gt;just come out&lt;/a&gt; and the possibly even bigger &lt;code&gt;2.8&lt;/code&gt; &lt;a href=&quot;https://github.com/QuiltMC/enigma/tree/develop/2.8&quot;&gt;in development right now&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, the story isn’t quite so happy for the rest of our mappings tooling. Much of it is no longer worth maintaining in an un-obfuscated world, such as our version of &lt;a href=&quot;https://github.com/QuiltMC/unpick&quot;&gt;Unpick&lt;/a&gt; that was forked from &lt;a href=&quot;https://github.com/FabricMC/unpick&quot;&gt;Daomephsta and Fabric’s original&lt;/a&gt;. We’ll be archiving all of our smaller forked mappings libraries like Unpick, Stitch, Tiny Remapper, and more. Our original work, such as &lt;a href=&quot;https://github.com/QuiltMC/mappings-hasher/&quot;&gt;Hasher&lt;/a&gt; and &lt;a href=&quot;https://github.com/QuiltMC/javadoc-draftsman&quot;&gt;Javadoc Draftsman&lt;/a&gt;, will go into maintenance mode for the foreseeable future, receiving only important fixes. Our experimental, unfinished replacement for much of the Mappings tooling, &lt;a href=&quot;https://github.com/QuiltMC/quilt-mapping-tools&quot;&gt;Quilt Mapping Tools&lt;/a&gt;, will no longer see any new work from us either. For those who used the tools listed in this paragraph, this shouldn’t be a big surprise. None of these have received major updates in the last couple of years, and we’re largely just formalizing the status that these projects have been in for a long time.&lt;/p&gt;
&lt;h2 id=&quot;quilt-standard-libraries-and-other-apis&quot;&gt;Quilt Standard Libraries and other APIs&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/writing/blog/2026-02-03-non-obfuscated-updates/qsl.png&quot; alt=&quot;the QSL logo awash in flame&quot;&gt;&lt;/p&gt;
&lt;p&gt;Quilt maintains 3 different API mods for Minecraft: &lt;a href=&quot;https://github.com/QuiltMC/quilt-standard-libraries&quot;&gt;Quilt Standard Libraries&lt;/a&gt;, &lt;a href=&quot;https://github.com/QuiltMC/quilt-kotlin-libraries&quot;&gt;Quilt Kotlin Libraries&lt;/a&gt;, and &lt;a href=&quot;https://github.com/QuiltMC/quilted-fabric-api&quot;&gt;Quilted Fabric API&lt;/a&gt;. We (your hardworking admin board) have decided to officially retire all three of these libraries in Minecraft &lt;code&gt;26.1&lt;/code&gt;. However, they will still receive maintenance updates on older versions, and we are investigating porting some their innovations we made back to Fabric API so that they can be used by more modders. We have two main reasons to make this change. Recently, the work to maintain these libraries has largely fallen on one sole developer, Oro (everyone say thank you oro!), who has been unable to commit enough time to make sure that they are quickly brought to newer versions. Secondly, the design of QSL as incompatible with FAPI, which allowed us more space to innovate and make more powerful APIs, has proven to be extremely difficult to maintain long-term. Our compatibility layer between the two, QFAPI, is confusing for users and cumbersome for developers, leading to slow updates and users dropping off Quilt. This has been the state of Quilt’s libraries for long enough that we’re officially retiring them in order to make Quilt more user-friendly.&lt;/p&gt;
&lt;p&gt;We still believe that our libraries are great projects that succeeded in their goal to innovate and improve the modding ecosystem, and we’re happy with the work we did. Nonetheless, they have served their purpose, and we’re excited to focus on other aspects of Quilt.&lt;/p&gt;
&lt;h2 id=&quot;other-projects&quot;&gt;Other Projects&lt;/h2&gt;
&lt;p&gt;Several of our other projects are going to see some changes as well. We are officially retiring the &lt;a href=&quot;https://github.com/QuiltMC/chasm&quot;&gt;CHASM&lt;/a&gt; project, our concept for a more conflict-resistant system for modifying Java code. While it has seen a lot of progress in its implementation, and a prototype is working, enough of its use cases have been covered by an alternative project, &lt;a href=&quot;https://github.com/llamalad7/mixinextras&quot;&gt;MixinExtras&lt;/a&gt;, that we’ve decided to stop looking for a developer to finish the project. There were a few core flaws in its design (you can read &lt;a href=&quot;https://silverandro.dev/blog/a-shovel-will-only-get-you-so-deep&quot;&gt;this post&lt;/a&gt; by a former Quilt developer if you’d like to learn more!) that made completing the implementation extremely difficult, and we’d rather help to improve the existing tooling than continue with CHASM.&lt;/p&gt;
&lt;p&gt;Our &lt;a href=&quot;https://wiki.quiltmc.org/&quot;&gt;developer wiki&lt;/a&gt; is also going to see major changes. We originally envisioned a system where articles would be written with code from real, automatically tested projects, guaranteeing that the code was valid and up-to-date for the latest version of Minecraft. Now that we are no longer maintaining version-dependent modding APIs, the benefits of such a system are far more limited, so we plan to migrate to a simpler and more accessible wiki that’s better integrated with our main site, using more standard frameworks and less original code to simplify development. This new wiki will be the central location for all documentation on Quilt Config, Quilt Loader, Enigma, and more. Work hasn’t yet begun on this move, but contributions and ideas are always welcome!&lt;/p&gt;
&lt;p&gt;In terms of our community, we’ve been working on a refresh to the website to go along with this announcement. That new website is live now, including rewritten documentation, a new homepage, and more! We’ve been working on this in private for a while, and we’re excited for you to see it. We would also like to announce that our previous keyholder has stepped down from the role for personal reasons, and the admin board and community team have elected to retire the old version of the role and give keyholder duties to an Admin Board member instead. The new keyholder will be Rai, as you may have noticed from the little crown beside her name in our &lt;a href=&quot;https://discord.quiltmc.org/&quot;&gt;Discord server&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;quilt-loader&quot;&gt;Quilt Loader&lt;/h2&gt;
&lt;p&gt;Finally, let’s talk about Quilt’s flagship project, and one that is only going to be receiving more attention in the future. Our goal for Quilt Loader is to make it a modern, user-friendly loader that makes sense for users who have never played modded Minecraft before. Let’s talk about how we’re planning to do that! There are two key areas of friction for new players: updates and crashes.&lt;/p&gt;
&lt;p&gt;The first issue is updates. For a user, there is generally no reason to update their loader unless the game crashes. In that case, they have to decipher the error to figure out that an update is needed, and work out that in order to update they have to return to the installer and overwrite their current version. This means two things: most users aren’t getting access to our new features as we update Loader, and users are confused and frustrated when a crash forces them to update.&lt;/p&gt;
&lt;p&gt;Our solution is simple: implement an optional automatic update checker that will let users know when a stable version is out, and be able to update loader without interrupting your game launch or forcing you to interact with the installer. We’ve already laid much of the foundation for this feature, and we welcome any feedback you might have!&lt;/p&gt;
&lt;p&gt;The second issue is game crashes. For a lot of users, modded Minecraft is their first exposure to a program crash, and first time they see a stack trace. We want QLoader to help users understand the crash (something we’ve already put quite a bit of work into with solver improvements and GUI updates!), and in the future we want to allow the loader interface to help you fix crashes. We’ll be offering at least two solutions to common crashes in the UI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Offering stable or beta updates to loader when it or Fabric Loader is out-of-date. This will be simple once we get our automatic updating working!&lt;/li&gt;
&lt;li&gt;Creating overrides to fix dependency issues, making sure that overrides are obvious in the UI and logs to avoid users sending error reports for mods they’ve overridden.
We also have a couple more ambitious ideas, which may or may not end up in Quilt Loader. We want to make sure we get them right! Here are a few of them:&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/QuiltMC/quilt-loader/wiki/Mod-Loading-Behaviour#loading-files&quot;&gt;Disabling mods&lt;/a&gt; involved in the crash&lt;/li&gt;
&lt;li&gt;Offering updates to mods involved in a crash, and possibly dependencies (remember that a very large group of users are on the vanilla launcher, and there’s no &lt;a href=&quot;https://prismlauncher.org/&quot;&gt;Prism&lt;/a&gt; reminding them), with a quick one-time warning to ensure the user understands that they’re downloading unverified third-party software&lt;/li&gt;
&lt;li&gt;And more! These are just a few simple ideas, and there’s lots of potential for Loader to non-destructively make attempts to diagnose and fix crashes, and we’d love to hear more feedback.
Our goal isn’t to fix every crash automatically, but we want to simplify mod management for more knowledgeable users and help newer users learn to fix simple crashes in a more intuitive way than being expected to read pages of documentation. If we can fix just a few crashes using these methods, those are a few users who are having a way better experience playing modded Minecraft!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beyond this, we have a few long-awaited features we continue to work on for Loader, such as our Loader Plugins system for allowing developers more control over Loader’s behaviour (there are already some interesting plugins in the works, like &lt;a href=&quot;https://modrinth.com/mod/quilt-bisect&quot;&gt;Quilt Bisect&lt;/a&gt;!). Keep in mind that we’re volunteers, and we develop this project as a passion, not as a job. We won’t be committing to release dates for anything mentioned in this post, but we’re always working to get new features out for you, our beloved players and developers. See you soon!&lt;/p&gt;</content:encoded></item></channel></rss>