Inform 7 extensions on github

I’m trying to get a quick understanding of how Inform 7 Extensions are available on the web app and through github.

For example, the Emily Short Anniversary Contest thread recently mentioned that Emily Short “Wrote 38 of the 132 Inform extensions listed at https://i7el.herokuapp.com/”.

I can see those 38 extensions under her author page. However I only see 9 listed on the i7/extensions repo. The data also doesn’t seem to be in the web app repo itself.

Where is the data that is backing the I7 Extensions Library coming from – e.g. where is it getting those other 29 extensions listed under Short?

1 Like

There are quite a few that come installed with Inform itself:

That still doesn’t account for the others. I expect that that comes from the fragmented nature of Inform’s extensions, which have had like 3 or 4 ‘official’ websites over time.

2 Likes

I don’t believe the GitHub repo was intended to contain all the official extensions. There’s an explanatory post here about which types of extensions can be found where (although the Inform7.com website has undergone changes since that post was written, and I don’t know if there are actually any extensions available there right now, so maybe disregard that part).

I believe the https://i7el.herokuapp.com/ website was intended to be more comprehensive, but it hasn’t been kept up to date.

I would check the Public Library if you are looking for the most “official” source of extensions currently available.

4 Likes

Thank you, that linked post-reply is very helpful.

  1. Is the Public Library site also what is directly backing the Extensions tab in the Inform 7 IDE?
  2. Does the Library have a license, or is it just controlled by the licenses of each individual extension?
  1. Yes, that is my understanding.
  2. From §27.1. in the “Writing with Inform” manual:
    “Writers who wish to make their extensions public on the Inform website should also be clear that by doing so, they are donating their work to the community on the basis of the broadest form of Creative Commons license: that is, they retain copyright and the right to be identified as the author (and as we shall see they are automatically credited in any work of IF which uses their extension), but are giving unlimited permission to use, circulate and republish their extensions in any form, even as part of commercial works (should that arise).”

I believe this applies to the extensions in the public library (even though it says “on the Inform website” and I’m not sure if the public library is technically part of the Inform website).

3 Likes

The https://i7el.herokuapp.com/ site is liable to go away any time now; it is using a server version that is being retired by Heroku and I am not going to be doing any updates to it. AFAIK there are no extensions that are only accessible on it.

2 Likes

I must note, that based on the timestamps on emshort.com and I7el.kerokuapp description, that probably the majority of those extensions aren’t up to date, being of 2015 vintage for 6L38, 6L02, 6G60, only “simple graphical window”, vintage 2018, being for the current 6M62…

Surely she has her reason for being not much active, so let’s find volunteer for mantaining these extensions, if they are not obsoleted in the meantime by other’s extension and/or I7 library.

Best regards from Italy,
dott. Piergiorgio.

1 Like

Some volunteer maintenance has been happening at the github repo, which is where this discussion started. https://github.com/i7/extensions/tree/master/Emily%20Short

I am hoping that we wind up with a coordinated, ongoing volunteer effort to maintain extensions, to go along with the open-source I7 release. (I also hope that’s coming soon…) I chatted a little bit with Graham about this last year, but I don’t know what his plans are.

2 Likes

@zarf

Currently that extensions github repo is organized by author at the top level. If I am understanding right, would it make sense to give it a top level hierarchy that distinguishes between the “public library” that appears directly in the Inform IDE and everything else (the current repo contents)?

Would it make sense to split it between

/public-library/
  /author
  /author
  /...
/other
  /author
  /author
  /...

If so, I’d be happy to put together some pull requests to mirror the Public Library into the github repo.

Optionally, could also layer past / outdated versions from the old heroku app into the commit history, superseded by the PL versions.

Does the Inform 7 extension format provide a method of recording which version of Inform it targeted (like “6L02”), or a minimum I7 version / maximum I7 version (if known)?

The old heroku app lists multiple versions of Basic Help Menu by Emily Short each with specific compatible versions.

1/140507 - 6L38, 6L02
1/101223 - 6G60

Where did that information come from? It doesn’t seem like it was in the .i7x files.

1 Like

No, and unfortunately not even the Standard Rules had updated version numbers (even though they were updated between releases!) For the Heroku app that was just me adding in manually the versions I knew the extensions could be used with.

Your best bet is just to go by date. If it’s dated to after an update of the core I7 compiler then it probably will support it.

2 Likes

Hmm. I see how if the dates were aligned to I7 compiler releases then you could infer a fair amount from it, hopefully.

Could the extension format add something in the future that would allow it to contain this information?

I’m thinking something very simple that could be both descriptive and prescriptive:

The minimum recommended Inform version is 6G60.
The maximum recommended Inform version is 6L02.

…and / or descriptive:

The target Inform version is 6L38.

…it could then potentially be parsed – for example, the Inform IDE “public library” interface having a way of choosing a latest version of an extension between multiple public versions, or downloading an appropriate version for an older IDE. Or giving a warning on including something out of scope, or chaining extensions out of scope. Or have a release tool add/suggest that the target version be included. But even if it wasn’t parsed by anything, it could be helpful just to be informative.

1 Like

I don’t think that information should be parsed out of the extension. That implies a mess of updating old extensions. If you ever get it wrong, you have to release a new version of the old version of the extension. You’re trying to invent a declaration which will be compatible with all older and newer versions of the compiler, which is pretty much a compatibility nightmare.

(Starting with the fact that all pre-2020 versions of Inform will not recognize those declarations, so how can you put them in at all?)

Putting that information in the extension is sensible – in comments! – but tools shouldn’t rely on it. Instead, there should be metadata in the extension collection database.

2 Likes

It would help though if extensions could more reliably specify their dependency on the Standard Rules/compiler features. If the version numbers were all semver and an extension could say “I need something compatible with version 2.1.5 of the standard rules” then the compiler would be able to easily detect potential problems. Now an extension might still work when the standard rules bump to semver major 3.0, but that’s something that requires manual investigation.

2 Likes

Metadata makes sense. Perhaps a standard simple text metadata file (.txt or .ini, etc) that can accompany an extension file?

Is it currently a requirement that an extension file name match its title? It seems like right now the public library unpublished older versions into an archive folder: /authorname/archive/extensionname_oldversionno.i7x but if you have distinguishing version information on multiple copies (as many as you want) then you can list them all together in an author folder but only offer the latest version for download from the Public Library – the file names can be informative or even structured but they don’t need to be as long as they are unique.

Common_Commands_Sidebar_1.i7x
Common_Commands_Sidebar_1.ini

Common_Commands_Sidebar_2_160404.i7x
Common_Commands_Sidebar_2_160404.ini

Common_Commands_Sidebar_2_161024.i7x
Common_Commands_Sidebar_2_161024.ini

Re:semver – Do the standard rules / compiler advance together? If they are released together from one repo then semver could be retroactively attached to specific commit numbers.

To date they have, and every new version has been incompatible with the previous version. So semver would always have been in whole numbers.

(This may change in the open-source era if people start doing bug fixes on released versions.)

Regarding max and version metadata for an IDE library – for example, the Processing IDE (PDE) accesses a central listing of contributed libraries and tools for that exist in multiple versions and have updates – but having varying compatibility with Processing 2, 3, 3.4 / 3.5 etc.

Contributions Manager (analogous to the Inform “Public Library” tab) consults a list of properties .txt files to build its listings and indicate which resources are available / recommended for a given version of the software.

So, for the Rosetta Examples for Processing library, there is a simple INI-style metadata file, rosetta_examples_p5.txt:

name=Rosetta Examples for P5
authors=[Jeremy Douglass](http://jeremydouglass.com)
url=https://github.com/jeremydouglass/rosetta_examples_p5
category=Other
sentence=Common coding tasks in Processing (Java mode) from the Rosetta Code chrestomathy website.
[...]
version=10
prettyVersion=v0.10
minVersion=0
maxVersion=0

and this txt file URL silently corresponds (same name, same path) to a library file with a different extension, rosetta_examples_p5.zip (the equivalent of the .i7x).

If the author doesn’t specify a max Processing version (typical), then it is 0 – if at some later point Processing 4 comes out and the example set doesn’t work anymore, that max can be added without changing the library release number.

Also note in this example, no min is specified – because it is an example set. Some of the material works with Processing 1, 2, and 3, some with 2 & 3, and some only with 3, so the responsibility is on the user. But most library authors do specify a min because they don’t want support requests from something that won’t work.