From J Wiki
Jump to navigation Jump to search

This is a proposal for github-based addons to be introduced in J807. Comments may be added here or addressed to the general forum.


Up to now, the sole source for all addons is an SVN repo hosted by Jsoftware. This was appropriate when SVN was the most popular version control system and few people had their own personal repos. Now git is far more popular and it is easy to set up personal repos, e.g. in github. We plan to move from SVN to github, and will support any github repo, so that anyone can make J source readily available without having to go through Jsoftware.

There will be an official list of packages maintained by Jsoftware that will be built automatically and can be installed via the Package Manager. The current set of addons will form the initial list. Any change to the github source will trigger the build, as done now with the SVN source. For these packages, the end user should have exactly the same experience as before.

Other unofficial packages can be installed and used from the command line, see below.

A wiki page will list the official packages, and unofficial packages may also be included.

Only github will be supported initially, but other repo hosts may be added later on.


1. The current addons SVN will be made read-only, and all addons migrated to separate repos on the Jsoftware github account. Change histories will be preserved for each repo. On request, some repos can be transferred to personal github accounts.

2. The same will be done for the public SVN, which is currently the source for some of the larger addons.

3. An addon is described by a manifest.ijs script, with minor changes to the present definition:

  • FOLDER is a new requirement, and will be a two-level directory where the addon will be installed. This should be in one of the existing folders, e.g. net/myserver, or a folder named with the github account and project, i.e. myname/myproject.
  • RELEASE has a slightly different definition than before. If empty or not given, then the addon will be available for all currently supported releases. Otherwise, it is the release after which the addon is supported. So RELEASE=:'j806' means the addon is supported for j806 and thereafter.
  • unofficial packages require only definitions for FOLDER and for distributed files. Other definitions can be included as appropriate.

Note that a valid manifest script is required for an addon to be installed.

4. The minimum release supported will be j804. In theory we could continue building addons for earlier releases, but it should be better that users upgrade their J system. In future, we will support the current and beta releases, and two earlier releases.

Unofficial Packages

The new system allows a new way of distributing J source, which in many cases should be more convenient than creating an official package, or cut and pasting code into a forum email or wiki page.

For example, suppose you have a folder of scripts for Rosetta code problems, and want to distribute a new script for solving Life. You should first have set up a github repo for this. Then you can add the new script, update the manifest, and commit the changes. Others can access the script like:

   install 'github:myname/rosetta'
   load 'myname/rosetta/life'