- packages that have been published and certified:
- QuillenSuslin, a package by Brett Barwick and Branden Stone for computing a basis of a projective module over a polynomial ring, has been published.
- GraphicalModels, a package by Luis Garcia-Puente, Sonja Petrovic, Mike Stillman, and Seth Sullivant, for discrete and Gaussian graphical models, has been published.
- InvariantRing, a package by Thomas Hawes for constructing the invariant ring of a finite group, has been published.
- MonomialAlgebras, a package by David Eisenbud, Janko Boehm, and Max Nitsche for decomposing a monomial algebra as a module over a subalgebra, has been published.
- TorAlgebra, a package by Lars Winther Christensen and Oana Veliche for classification of codepth 3 local rings based on multiplication in homology, has been published, under its old name,
`CodepthThree`.

- new packages:
- Book3264Examples, a package by Charley Crissman containing Schubert2 code for some of the examples and exercises in the book '3264 and all that', by Eisenbud and Harris, has been added.
- EnumerationCurves, a package by Hiep Dang for enumeration of rational curves via torus actions, has been added.
- Divisor, a package by Karl Schwede and Zhaoning Yang for working with Weil divisors, has been added.
- EllipticCurves, a package by Alessandro Oneto and Stefano Marseglia for addition on elliptic curves and point counting, has been added.
- HighestWeights, a package by Federico Galetto for decomposing free resolutions and graded modules with a semisimple Lie group action, has been added.
- NumericalHilbert, a package by Robert Krone for numerically computing local dual spaces and Hilbert functions, has been added.
- MinimalPrimes, an experimental package by Frank Moore, Mike Stillman and Franziska Hinkelmann for finding the minimal primes of an ideal, has been added.
- Bertini, a package by Elizabeth Gross, Jose Israel Rodriguez, Dan Bates and Anton Leykin for providing an interface to Bertini, has been added.
- TorAlgebra, a package by Lars Winther Christensen and Oana Veliche for classification of codepth 3 local rings based on multiplication in homology, has been added, under its old name,
`CodepthThree`. - Permanents, a package by Tair Akhmejanov for computing the permanents of a matrix, has been added.

- improved packages:
- SchurRings, has been updated, with support for several groups of variables, documentation, working plethysm, and more. The old version is being kept as
`OldSchurRings`(missing documentation) as there are incompatible changes. Specifically, symmRing is now called symmetricRing, and has more variables (three sets, h, e, p) than the old version. Please use the new version, and if there is a problem that requires you to use the old version, please email Mike Stillman. - The packages Polyhedra and ToricVectorBundles now implement a canonical ordering for the rays in a fan. Formerly the rays came out in an unpredictable (but deterministic) order. Various tests in the latter package have been updated to take into account the new ordering. Users may find that their code will have to be modified slightly, by permuting lists of parameters (such as weights) corresponding to the rays.

- SchurRings, has been updated, with support for several groups of variables, documentation, working plethysm, and more. The old version is being kept as
- functionality added or improved:
- A new option, ExampleFiles, has been added to the documentation function document, which allows the package developer to specify that copies of certain auxiliary files should be visible in the current directory while example code is running.
- It is now possible to reduce each entry of a matrix
`f`modulo an ideal`I`by writing`f % I`. See Matrix % Ideal. - A task now has a serial number, see serialNumber.
- A new command line option,
`--no-randomize`, prevents the random number seed from being set to a value that depends on the time of day and process ID. - A new command line option,
`--no-time`, arranges for the function currentTime to return 0 always, for reproducility of results, as an aid in debugging. - A new function, submatrixByDegrees, allows the user to select a submatrix of a matrix by specifying intervals of acceptable column degrees or row degrees.
- New functions elapsedTime and elapsedTiming, analogous to time and timing, measure elapsed time instead of CPU time.
- A new command antipode has been added. This function implements the anti-isomorphism between left and right modules in skew commuting poly rings. It is used when transposing a matrix over a ring with skew commuting variables, basically, so that the transpose of a complex of matrices will still be a complex of matrices.
- Hash codes of matrices have been improved - they are now computed using the first two nonzero entries in each column, whereas before the entries were not examined, and thus they do a better job of distinguishing matrices that are different. A side effect is that hash tables whose keys involve matrices will be stored, printed, and converted to lists in a different order, which may affect some code.
- The default arithmetic for computing in finite fields ZZ/p nows uses the FLINT library (see ...). The modulus p can now be p <= 9223372036854775783, i.e. the largest prime less than 2^63. HOWEVER: factorization of polynomials over such rings can only be done for primes p < 2^31. TODO: CHECK THIS VALUE
- Incorporated fast linear algebra for dense (mutable) matrices over finite prime fields, using ffpack and flint
- Linear algebra for mutable matrices over arbitrary precision RR and CC approximate fields has been included. Functions which handle extended precision include determinant, rank, inverse, LUdecomposition, and solve. Functions SVD, eigenvalues, eigenvectors have not yet been extended
- Extensive changes to numerical algebraic geometry code in the engine
- The groebnerBasis function includes new experimental Groebner code, which is much faster in some cases.
- The { t Macaulay2/e} engine directory now compiles cleanly, with a few warning messages left.
- The overall structure of base rings in Macaulay2 has been revamped, to allow faster code. The downside is that because of the high use of templates, compile times have generally increased.
- Random number generation for finite fields has changed, so programs expecting a specific set of random numbers will change.
- If
`kk`is a finite field, e.g.,`ZZ/5[c]/(c^2+c+1)`it was possible (and still is) to write`map(ZZ[a], kk)`. It was never clear what this should return, as it is not a well-defined ring map. However, it now has different, still undefined, behavior.

- functionality changed:
- If debuggingMode is false when a package is loaded, it will remain false during the loading of the package, even if the DebuggingMode option of loadPackage or newPackage is set to true. This will help the user avoid entering the debugger while already in the debugger.
- The random number seed is now initialized to 0 with setRandomSeed when running examples (with installPackage) and when running tests (with check), to ensure predictability and uniformity of results.