Changelog#
All notable changes to this project are documented in this file. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]#
[0.3.6] - 2026-11-04#
Changed#
The project moved to the ModsmithMC organization, as ModsmithMC/modsmith-python, and its documentation to modsmithmc.org/modsmith-python. Old addresses lead to the new ones. The default user agent names the new repository.
The documentation shares its look with the rest of modsmithmc.org.
[0.3.5] - 2026-11-03#
Added#
Platform.latest_releasereturns a project’s newest release for a game version and loader in one call, falling back from Quilt to Fabric.Platform.searchtakessort:relevance,downloads,popularity,newestorupdated, the same on both platforms.limitmay exceed what a platform serves at once; the extra pages are read for you.Projectgainsauthor,categories,updated,followsandgame_versions, filled the same way on both platforms.Platform.authorsreturns the people behind a project, the owner first. It fills the gap left by Modrinth project lookups, which name no author.Platform.get_projectslooks up many projects at once.Instance.plan,Instance.plan_updatesandInstance.adoptuse it, so they need far fewer requests.Release.versionholds the version label its author gave, andPlatform.changelogreturns what a release changed as plain text, converted from HTML on CurseForge.modsmith.loaders.versionslists a loader’s versions for a Minecraft version, newest first and marked stable or not, the same way for every loader.modsmith.loaders.recommendedreturns the one to install by default. Loaders that implementLoader.availabletake part.Modpack.install_gameinstalls what a pack runs on, its mod loader or plain Minecraft, and returns the version id for a launcher profile.Instance.removetakesdry_run, to show what a removal would take away, dependencies and kept player changes included, before doing it.modsmith.loaders.detectfinds the mod loader an installed version starts, from its version JSON alone, so versions the official launcher or a loader’s installer set up can be recognised. Loaders that implementLoader.from_versiontake part.
Changed#
Modpack.loader_kind,Modpack.loader_versionandModpack.loaderare None for a pack that needs no mod loader.Modpack.loader_kinduses the name platforms and instances use, such asfabricfor a pack that saysfabric-loader.
Removed#
Instance.open. UseInstance(path).modsmith.java.platform_keyandmodsmith.java.official_runtime_dirsare no longer part of the public API.InstallProfile,InstallerJar,LibraryandProcessorare no longer exported frommodsmith.loaders.Launcher.profile_files,Profile.from_dictandProcessorLoader.fetch_installerare now private.
Fixed#
loaders.versions("forge", ...)lists nothing for Minecraft before 1.13, since those installers are not supported, instead of versions that then fail to install.A dependency whose project has only alpha or beta releases, such as a new library mod, gets its newest one even with
release_only, instead of making the release that needs it impossible to install.MissingDependency.projectnames the project of a dependency that still cannot be met.CurseForge searches return the most popular matches first. Before, they came back in no useful order, so searching for
jeidid not find JEI.CurseForge releases list only game versions in
game_versions, and their loaders inloaders, as Modrinth releases do. Before,game_versionsalso held labels such asClientandFabric, andloaderswas empty.CurseForge.get_projectfinds a slug even when it belongs to another kind of project than the one asked for.Packs that declare no mod loader can be read and installed. Before, they were rejected, although the formats allow them.
[0.3.0] - 2026-11-03#
Added#
Instance.planandInstance.addinstall single mods, resource packs and shader packs, with their dependencies, next to a pack or without one.Instance.plan_updates,Instance.removeandInstance.pinupdate and remove them, andremovealso takes dependencies nothing else needs.Instance.createstarts an instance that does not come from a pack.Instance.disableandInstance.enableswitch files off and on with the.disabledsuffix. Syncs and updates keep disabled files disabled.Instance.contentslists mods, resource packs and shader packs, with where each came from, andInstance.adopttakes over files the player added.modsmith.metadatareads what mod jars and packs declare about themselves.Project.foldernames the folder each kind of project goes in..mrpackentries hosted on Modrinth carry aFileRef, andresolve_dependenciesaccepts one as installed.
Changed#
modsmith.instancesis now a package, andInstanceStatehas new fields. The Minecraft version comes first,pack_name,pack_version,loader_kindandloader_versioncan be None, andloader_kinduses the name platforms use, such asfabricrather thanfabric-loader. State files from 0.2 still load.CurseForge projects report the type CurseForge gives them, rather than the type that was asked for.
[0.2.0] - 2026-11-03#
Added#
Release.dependencies,Platform.get_releaseandmodsmith.platforms.resolve_dependenciesfor working out which mods a mod needs.Platform.identifyfinds the releases that files came from, by their contents.LockedError. Installs now use file locks, so several processes can work safely: a second sync of one instance fails at once, and installs that share a game directory or cache wait for each other.
Fixed#
Resolving a CurseForge modpack no longer fails when CurseForge knows none of its files. They stay unresolved, as unknown files already did.
[0.1.1] - 2026-11-03#
Fixed#
The Documentation link on PyPI points to the new site, https://modsmith.meneither.site/.
Changed#
Project links and the default user agent use the
PaPa-jun/Modsmithrepository name.
[0.1.0] - 2026-11-03#
Added#
modsmith.platforms: search and fetch from Modrinth and CurseForge.modsmith.packs: read mrpack and CurseForge modpacks without network access.modsmith.loaders: install Forge, NeoForge, Fabric and Quilt.modsmith.instances:Instance.diff()andInstance.sync()for installing and updating game directories while keeping user changes.modsmith.minecraft,modsmith.java,modsmith.launcherandmodsmith.net.Instance.syncstages new files and rolls back if it cannot finish, so a failed update leaves the instance as it was.Platform.iter_releasesreads releases page by page, so finding the latest one takes a single request.Modpack overrides are streamed, so large packs no longer load into memory.
Instanceremembers file hashes, so a sync with nothing to do is faster.Loader.is_installedworks offline for the built-in loaders.Download progress counts skipped and resumed files, and reaches the total.
Forge and NeoForge installs prefer newer Java runtimes, which fixes old versions on Windows and Apple Silicon.
Requests respect
Retry-After, and downloads useIf-Rangeto resume.
Changed#
The project was renamed from CurseCraft and rebuilt as a developer toolkit.