Latest version | 1.2.0 |
---|---|
Minimum Core | 0.6.5 |
Compatible Core | 0.7.0 |
Last updated | 4 years ago |
Created | 4 years ago |
Authors | |
Languages |
|
Systems | All systems |
Project source | Project URL |
The unofficial package manager CLI for FoundryVTT
This tool directly writes (and overrites) data in your Foundry Data folder. Please make a backup of your systems, modules, and worlds before using
FoundryVtt's packages have grown in size and complexity. There are currently "Systems", which define a playable set of rules for a tabletop game, and "Modules", which expand on either core Foundry functionality or a System. As a server owner, managing your installation can get out of hand due to a variety of reasons outlined (and resolved) below:
For Modules that extend a System, such as 13th Age Expanded (which, obviously, extends 13th Age), the Module can currently define an undocumented minimumSystemVersion
, but this does not install the System automatically when the Module is installed.
Given that 13th Age Expanded declares a dependency on Archmage of version 1.5.0
,
1.5.0
and then install 13th Age Expanded1.5.5
installed, FoundryGet will consider that dependency fulfilled, and only install 13th Age ExpandedThere have been a recent new type of Module that would be best called a "Library", such as the wonderful Settings Extender and Babele Modules.
Currently, if a System or Module relies on Settings Extender, they either have to trust it's installed or include a copy in their code.
Given that Module A depends on Settings Extender version 1.0.0
,
1.0.0
and then install Module A1.1.3
installed, FoundryGet will consider that dependency fulfilled, and only install Module ASome "Library" modules might depend on others, as is the case with Babele depending on Settings Extender
Given that Module B depends on Babele version 1.17.0
, and Babele depends on Settings Extender version 1.1.0
,
1.1.0
as per previous usecases1.17.0
as per previous usecasesThe previous Usecases get more powerful when you consider Systems / Modules that rely on the same dependency
Given the previous example modules,
1.0.0
1.17.0
which in turn depends on Settings Extender version 1.1.0
FoundryGet will detect this shared dependency, and since Settings Extender 1.1.0
fulfills the dependency of Module A on version 1.1.0
, FoundryGet will install one copy of version 1.1.0
Currently, if Module C depends on Method DoThing
in Library A version 1.0.0
and Module D depends on the renamed version of that method ExecuteThingAction
in Library A version 2.0.0
, Foundry will install both packages without complaint, and one or the other will be broken depending on if you have Library A version 1.0.0
or 2.0.0
installed.
FoundryGet will detect such invalid dependency chains before installation, and gracefully exit without installing a setup that would leave one of the Modules in a broken state.
Download a Release manually https://github.com/cswendrowski/foundryget/releases Or install as a Foundry package from https://raw.githubusercontent.com/cswendrowski/foundryget/master/module.json
Unless you want your calls to look like C:usersmedownloadsfoundrygetFoundryGet.exe -?
, register the appropriate build such as /modules/foundryget/windows/
as a PATH variable
Help
foundryget -?
Help
foundryget install -?
[As Module] Install
foundryget install https://raw.githubusercontent.com/cswendrowski/FoundryVTT-13th-Age-Expanded/master/module.json
[Downloaded] Install
foundryget install https://raw.githubusercontent.com/cswendrowski/FoundryVTT-13th-Age-Expanded/master/module.json -d "C:UsersMeAppDataLocalFoundryVTTData"
Help
foundryget update -?
[As Module] Update
foundryget update
[Downloaded] Update
foundryget update -d "C:UsersMeAppDataLocalFoundryVTTData"
version
field to a Semantic Version 2.0 compatible version, such as 1.0.0
1.0.0-beta5
, set a Foundry-compatible version such as beta1.0.0
to the version
field, and set the Semantic-compatible one to the new semanticVersion
field.dependencies
fieldYour final changes should look something like this:
"semanticVersion": "2.0.0",
"version": "2.0.0",
"dependencies": [
{
"name": "archmage",
"manifest": "https://gitlab.com/asacolips-projects/foundry-mods/archmage/-/raw/1.5.0/system.json",
"version": "1.5.0"
}
],
See a full example here: https://github.com/cswendrowski/FoundryVTT-13th-Age-Expanded/blob/master/module.json
Let's say you write a cool Logging module. It is invoked by SuperCoolLogger("this is my log")
. You release it as version 1.0.0
, and Module C and D both use it.
If you decide to rename your method to something less flashy such as EnhancedLogger("this is my log")
and push it as version 1.0.1
or 1.1.0
, you have broken the rules of SemVer. These rules are important because of tools like FoundryGet!
If Module C releases a version 2.0.0
that uses the new EnhancedLogger
and depends on version 1.1.0
, and Module D doesn't update and stays on SuperCoolLogger
, FoundryGet (like any SemVer-enabled tool), will look at 1.1.0
and install it as the correct version, update Module C to 2.0.0
, and break Module D in the progress if it's also installed. By releasing version 1.1.0
, you promised SemVer that you didn't break an API, and so FoundryGet believed you. Foundry is now in a broken state (this is no different than what happens under the current built-in package manager)
Given the same update, except you kept both methods in existance, then you have fullfilled your promise! 1.1.0
will work for both Module C version 2.0.0
calling EnhancedLogger
and Module D calling SuperCoolLogger
.
If you do the rename and release it as version 2.0.0
instead, FoundryGet will detect that Module C and D have incompatible dependencies, not update Module C to version 2.0.0
, and will gracefully exit without breaking the current Foundry install.
SemVer is a promise, and that promise lets tools be smart about version updates in a way they couldn't be otherwise.
Read more here: https://www.jvandemo.com/a-simple-guide-to-semantic-versioning/
To install this package, open your Foundry Setup screen and navigate to your Module tab and click the Install Module button.
From there, you can either search for the package unique name: foundryget or copy its manifest URL:
And paste it to the input box at the bottom of your window.
You can install this package directly to your Forge account.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Advertisement cookies are used to deliver visitors with customized advertisements based on the pages they visited before and analyze the effectiveness of the ad campaign.