Are some packages "official", in some sense?

I am delivering Julia code to a customer. Can I be “sure” that some packages will be available for them to download by simply running a little program I give them, which just runs the appropriate Pkg.add() commands?

To be specific, I mean the packages Distributions, Roots and SpecialFunctions. I am running Julia 1.0.

I am currently describing them as “third party packages”, but they appear to be more than that; they appear to be quasi-official, in some sense. Is there any term which distinguishes those packages from a random bit of software I might write and put on Github?

Not in any legal sense, since it is depends on a whole chain of services provided by third parties (Github, package maintainers).

But in a practical sense, repositories usually remain available, and for registered packages there are mirrors like

in case something would disappear. Note that you would have to modify your install script though.

In practice, the opposite (packages being abandonned but available) is a much bigger concern.

By bundling a Manifest.toml and using Pkg.resolve(), you can test and replicate a specific set of versions. This should be very robust.

1 Like

You might also like to consider the list of packages in JuliaPro ( AFAIK a package being there is not official in any strong sense but it might still reassure your client that it’s “standard” in some way. (Distributions and Roots are in the list, not specialfuns)


(Distributions and Roots are in the list, not specialfuns)

I am kind of surprised that SpecialFunctions is not there, because at least some of them used to be part of Julia 0.x. But it is no big deal in my case, because I only need if for lfactorial (i.e. log factorial), and I can write my own log-factorial function easily enough.

These packages definitely aren’t going anywhere :smiley:. If your customer wants an officially supported set of Julia packages, Julia Computing does offer support and is willing to add packages that customers need to the JuliaPro package set (that’s how most of the packages got there in the first place—some customer needed them). But I don’t think you need to worry about these particular packages.


As an aside, you should probably provide them with Project.toml/Manifest.toml files, and use Pkg.instantiate() instead, which will ensure they get the correct versions, and deal with problems if packages are renamed, etc.

While the packages might not go anywhere, they could change their interface (e.g. functions could get renamed, etc.), so you would want to ensure you get a version that matches the behaviour you want.