Julia follows semver (and its packages should too):
Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.
Version 1.0.0 defines the public API.
So should users (always) take 1.0 as a signal that code is “production-ready”? Or more importantly, that it isn’t (usually) if pre-1.0 (or pre-0.1.0?). Should we push for packages to be upgraded to 1.0 if we think they are?
In Julia with its package manager (i.e. for “reproducable science”), there’s not really a reason to avoid pre-1.0 packages, if you’re worried about API breakage you can just pin to a specific exact version. Later changes to not affect you, so nothing will actually change for the user.
Some very important Julia packages at pre-1.0 that I consider all production-ready (except maybe Flux):
- Pluto.jl
- CxxWrap.jl
- RCall.jl
- DataStructures.jl
- Flux.jl (not production ready? mostly still used for research?)
- MATLAB.jl
Of those the only package I’ve used directly is MATLAB.jl (and maybe DataStructures.jl or at least indirectly as most of us must have done), was very solid for me, while e.g. OctCall.jl for calling Octave, MATLAB’s clone, isn’t. At least I wouldn’t hesitate to use MATLAB.jl in production (at the time, I only used it to help me port some MATLAB code to Julia), and I may need to do that now. [Will also look into compiling MATLAB to C.]
Note, OctCall.jl isn’t yet registered, and that’s a huge signal not yet production-ready, while being registered, is for the benefit of (other) users.
Being registered, alone, isn’t a great indicator of anything, let alone being well-documented.
JuMP.jl at 10-years old hit 1.0 recently… I’m guessing production-ready for a lot longer.