Changes
Changes Details
- 2026-09-26 : boot messages about maven demoted to debug (from warnings)
Releases, updates and thoughts from the Nuts project
2026-09-26 : ADDED :: now 'nuts exec --java-version=current any-app' runs any-app with current java version insterad of the inferred one from pom.xml of any-app
2026-09-26 : CHANGED :: from now on x.y.z in nuts api will require x.y.t.w for post 1.0 version, so 1.0.3 is a valid runtime for 1.0.1 api
2026-09-26 : CHANGED :: replaced ---m2 with --maven-local (so --maven-local=false will disable local m2 folder)
2026-09-26 : FIXED :: fixed settings.xml support in boot and runtime
2026-09-20 : ADDED :: added support for --force option than defaults to enable --yes when no confirmation
2026-09-20 : FIXED :: fixed -N option handling
2026-09-06 : CHANGED :: NExec::which now returns if the app is not available (best guess)
2026-09-06 : CHANGED :: NWebCli renamed to NHttpClient
2026-09-04 : CHANGED :: @NApp is no more mandatory, when not found, no more exception is thrown.
2026-09-04 : ADDED :: added support for search cross environment handling in NSearch
2026-09-03 : CHANGED :: new NRetry etc. are AutoClosable, use try-with-resources if you need to close them
2026-09-03 : PERF :: fixed issue when bootstrapping spring boot app with no fatjar
2026-09-01 : ADDED :: support javadoc generation in the website
2026-09-01 : ADDED :: support for parallel processing (@OussemaBenAmeur)
2026-09-01 : NEW_CONTRIB :: new first time contributor @OussemaBenAmeur
2026-09-01 : FIXED :: now --theme accepts correctly a path to a theme file
2026-09-01 : ADDED :: added DEB Packages support
2026-08-28 : RENAMED :: ExecutionEngine renamed to RuntimeDistribution
2026-08-27 : ADDED :: added oracle,graalvm,corretto,zulu provisioning;
2026-08-25 : PERF :: faster bootstrap
2026-08-25 : FIXED :: fixed support for Windows 11
2026-08-24 : REMOVED :: removed NCmdLineRunner,NCmdLineArgProcessor, now only support plain while or matcher in cmdline
2026-08-24 : REMOVED :: removed NCmdline::forEachPeek
2026-08-24 : ADDED :: added @NAppComplete and split run vs complete execution
2026-08-23 : ADDED :: changed NTableModel to support per cell customization
2026-07-25 : ADDED :: added "mem://" support in path, now you can create in memory folders and files!
2026-07-24 : ADDED :: changed NClassLoader to be more coherent alongside with NClasspathBuilder
2026-07-24 : ADDED :: added NClasspathBuilder to help build classpath from both NId and NPath
2026-07-21 : CHANGED :: renamed NExec.addCommand->command
2026-07-21 : CHANGED :: renamed NDigest.source->source
2026-07-21 : CHANGED :: renamed NMsFormatType->NMsgType
2026-07-21 : ADDED :: NMsg.ofCustom(...) to support message template extensions implementing NMsgCustomFormatter
2026-07-21 : ADDED :: NMsg.ofS(...) to support sql templates (both ':param' and '?' styles)
2026-06-14 : ADDED :: added naru syntax coloring
2026-06-14 : ADDED :: added python syntax coloring
2026-06-14 : ADDED :: added javascript syntax coloring
2026-06-14 : ADDED :: added rust syntax coloring
2026-06-14 : ADDED :: added typescript syntax coloring
2026-06-14 : ADDED :: added markdown syntax coloring
2026-06-14 : ADDED :: added yaml syntax coloring
We are excited to announce the release of Nuts v0.8.9.0! This version is now available across multiple channels to suit your workflow.
curl -s https://thevpc.net/nuts/install-stable.sh | bash
You can now pull the latest version directly into your Java projects:
<dependency>
<groupId>net.thevpc.nuts</groupId>
<artifactId>nuts</artifactId>
<version>0.8.9</version>
</dependency>
<dependency>
<groupId>net.thevpc.nuts</groupId>
<artifactId>nuts-impl</artifactId>
<version>0.8.9.0</version>
</dependency>
The source code and release assets are available on our GitHub Releases page: π View GitHub Release
Download the standalone applications and installers for your operating system.
Full App
nuts-app-full-0.8.9.0.jarInstaller
RPM Packages
Full App
nuts-app-full-linux64-rpm-0.8.9.0.rpmInstaller
nuts-installer-linux64-rpm-0.8.9.0.rpm
Full App
nuts-app-full-linux64-bin-0.8.9.0.zipInstaller
nuts-installer-linux64-bin-0.8.9.0.zip
Full App
nuts-app-full-linux64-with-java-0.8.9.0.zip
Installer nuts-installer-linux64-with-java-0.8.9.0.zip
ZIP Archives (Bundled with Java)
Full App
nuts-app-full-windows64-with-java-0.8.9.0.zipInstaller
nuts-installer-windows64-with-java-0.8.9.0.zip
ZIP Archives
Full App
nuts-app-full-mac64-0.8.9.0.zipInstaller
nuts-installer-mac64-0.8.9.0.zip
π SHA256 Checksums
nuts-app-full-0.8.9.0.jar.sha256 nuts-installer-0.8.9.0.jar.sha256
nuts-app-full-linux64-bin-0.8.9.0.zip.sha256 nuts-app-full-linux64-rpm-0.8.9.0.rpm.sha256 nuts-app-full-linux64-with-java-0.8.9.0.zip.sha256 nuts-installer-linux64-bin-0.8.9.0.zip.sha256 nuts-installer-linux64-rpm-0.8.9.0.rpm.sha256 nuts-installer-linux64-with-java-0.8.9.0.zip.sha256
nuts-app-full-windows64-with-java-0.8.9.0.zip.sha256 nuts-installer-windows64-with-java-0.8.9.0.zip.sha256
nuts-app-full-mac64-0.8.9.0.zip.sha256 nuts-installer-mac64-0.8.9.0.zip.sha256
Today marks the release of v0.8.9.0 RC1. This version represents a major shiftβit is the final "pre-1.0" major version, solidifying nuts as both a robust package manager and a powerful application framework.
Iβll be dogfooding this release for a few more days to ensure total stability before the final rollout. Here is whatβs new in this milestone: π Key Highlights
Weβve overhauled the security layer to meet modern standards:
Nuts is now the definitive home for TSON. The parser has been rebuilt for the "Fail-Never" philosophy:
Beyond the JVM, nuts is becoming a universal tool for your environment:
The full, exhaustive list of features and bug fixes will be revealed in the final Release Notes. For now, grab the RC1, try the native image, and let us know your feedback.
Happy Hacking!
Version 0.8.9 is a major milestone in our development cycle. As part of our commitment to quality, we treat our odd-numbered releases (5, 7, 9) as our most stable and polished versions.
Beyond pure Java, Nuts now supports portable installations for:
Runtimes: JDK/JRE (nuts settings add java --download -version=25 --jdk)
Servers: Tomcat, PostgreSQL
IDE: Netbeans
Cloud & Containers: Improved "Nuts-native" detection for Docker and Kubernetes environments to simplify configuration-free deployments.
Tooling Support: We've added native syntax highlighting support for TSON and NTF. You can now enjoy a first-class editing experience in: IntelliJ IDEA, VS Code, and Notepad++ , Vim / Vi, Kate, GEdit, and jEdit
Gradle Integration: A new dedicated Gradle Dependency Solver to bridge the gap between Nuts and the Gradle ecosystem.
2025-06-11 : PUBLISH :: version 0.8.9 published
2025-06-09 : ADDED :: fixed support for installing postgres
2025-05-07 : ADDED :: fixed support for mvn netbeans
2025-04-20 : ADDED :: added nuts-compression to support tar/tgz/txz formats
2025-02-13 : ADDED :: better support of path store types
2025-02-11 : ADDED :: added better support for expression parsing in NExpr with customizable defaults
2025-01-11 : ADDED :: added NFragmentElement : a better way to support documents roots and fluid embeddings
2025-01-07 : ADDED :: added NSecureToken : a better way to support external Vaults
2025-02-06 : ADDED :: added NSecureString : a better way to support destroyable secrets
2025-01-16 : ADDED :: added user documentation for NTF (documentation/specifications/ntf.md)
2025-01-16 : ADDED :: implemented TSON v2.0, reimplemented from scratch TSON parser and LEXER, dropped javacc support
2025-01-16 : ADDED :: implemented TSON v2.0, added user documentation for TSON (documentation/specifications/tson.md)
2025-01-16 : CHANGED :: implemented TSON v2.0, nuts becomes the reference implementation of TSON, the TSON github repo sources are obsolete
2025-01-16 : ADDED :: implemented TSON v2.0, removed support for regex (could simply use strings). removed because in introduces conflicts with expressions
2025-01-16 : REMOVED :: implemented TSON v2.0, removed support for regex (could simply use strings). removed because in introduces conflicts with expressions
2025-01-16 : REMOVED :: implemented TSON v2.0, removed support for Matrices (now matrices are simple arrays of arrays)
2025-01-16 : ADDED :: implemented TSON v2.0, added valid support of unsigned numbers (with u format aka 10_u8)
2025-01-16 : ADDED :: implemented TSON v2.0, added valid support of signed numbers (with s format aka 10_s8)
2025-01-16 : ADDED :: implemented TSON v2.0, added valid support of special numbers like 0NaN
2025-01-16 : ADDED :: implemented TSON v2.0, added valid support of ordered list (starts with hash '#')
2025-01-16 : ADDED :: implemented TSON v2.0, added valid support of unordered list (starts with dot '.')
2025-01-16 : ADDED :: implemented TSON v2.0, added valid support of expressions
2025-01-01 : ADDED :: added better support of copy in NReflectMapper
2025-12-27 : TODO :: Added support to download JDK/JRE from nuts nuts settings add java --download -version=25 --jdk
2025-12-27 : TODO :: Fixed Progress display (now backed to terminal and not PrintStream)
2025-12-27 : TODO :: Fixed Progress displaying invalid percentile
2025-12-26 : TODO :: Added cache to Exec to store command classpath, no need to rebuild classpath
2025-12-26 : FIXED :: Fixed Gradle Dependency Solver
2025-12-26 : FIXED :: Better perf : added parallel dependency resolution
2025-12-26 : ADDED :: Better perf : added parallel dependency resolution
2025-12-25 : ADDED :: Better perf : implemented faster bean factory resolution : no more create instances for scoring
2025-12-20 : ADDED :: added NEnv and merge it with older NExecTargetInfo (that is now removed)
2025-12-20 : CHANGED :: better support for kubernetes (now auto detected)
2025-12-20 : CHANGED :: better support for ssh (now auto detected)
2025-12-20 : CHANGED :: better support for docker (now auto detected)
2025-12-19 : CHANGED :: renamed NExecCmd to NExec (simpler are more coherent with the rest), same for other Cmd - 2025-12-12 : ADDED :: added NSysEditorSupportCmd to support customizing common editor syntax highlighting (including but not limited to : vim, intellij, kate, vscode, gedit, jEdit, notepad++)
2025-12-07 : FIXED :: faster ssh connexions with pooling
2025-12-01 : CHANGED :: renamed NStableValue to NOnceValue
2025-11-30 : ADDED :: added NPath::getInfo, listInfos that return a full NPathInfo for performance
2025-11-30 : FIXED :: Better support for ssh for remote Windows machines
2025-11-30 : FIXED :: Better support for ssh for remote linux/posix machines
2025-11-30 : ADDED :: Added support for binary ssh (ssh://myuser@myserver?use=bin vs ssh://myuser@myserver?use=jcsh vs ssh://myuser@myserver?use=portable)
2025-11-30 : ADDED :: added NPath::getTargetType, NPath::getTargetPath to describe the pointed path for a link
2025-11-29 : CHANGED :: changed NPath::permissions -> NPath::getPermissions ; NPath::lastAccess -> NPath::getLastAccessInstant ; NPath::lastAccess -> NPath::getLastAccessInstant; NPath::getGroup -> NPath::getGroup; NPath::type -> NPath::getType ; NPath::creationTime -> NPath::getCreationInstant
2025-11-28 : CHANGED :: changed NPathSPI::contentLength -> NPathSPI::getContentLength; NPathSPI::type -> NPathSPI::getType ; NPathSPI::contentLength -> NPathSPI::getContentLength
2025-11-27 : ADDED :: added NMsgIntent::DISPOSE
2025-11-26 : ADDED :: added NExecCmd::get/setRawCommand to enable complex commands
2025-11-25 : ADDED :: added NConnectionString::normalize
2025-11-24 : ADDED :: added NConnectionStringBuilder::setNormalized, getQueryParam, getQueryParams
2025-11-23 : CHANGED :: changed NExecTargetCommandContext.getTarget() -> NExecTargetCommandContext.getConnectionString()
2025-11-22 : CHANGED :: changed NWorkspace::getProperty(String) return type from NLiteral to Object
2025-11-21 : ADDED :: added NWorkspace::getProperty(Class), getOrComputeProperty(...)
2025-11-20 : CHANGED :: renamed NConnexionString to NConnectionString
nuts v0.8.8 is out.
View Official releases here : Starred releases are most stable ones.
2025-11-19 nuts 0.8.8.0 released download nuts-0.8.8.jar
nuts v0.8.7 is out.
View Official releases here : Starred releases are most stable ones.
2025-11-07 nuts 0.8.7.0 released download nuts-0.8.7.jar
View Official releases here :
<DATE_TO_DO> nuts 0.8.7.0 released download nuts-0.8.6.jar
2025-07-01 support for color names in ntf in tge form of ##:red:something## and something
View Official releases here :
2025-01-03 nuts 0.8.5.0 released download nuts-0.8.5.jar
ADDED: added new tool ndoc and nsite-lib (the related library) to generate statically html websites...
2024-09-06 started new version
nuts v0.8.5 is starting development phase. Many promising features to work on
nuts v0.8.4 is out. It's been a while. What's new? lots of things. but not only :
View Official releases here : Starred releases are most stable ones.
2024-04-25 nuts 0.8.4.0 released download nuts-0.8.6.jar
WARNING : api API has evolved with incompatibilities with previous versions
We are thrilled to announce v0.8.3 release of #nuts, the open source #java package manager intended to be #devops friendly. Look at this location (at github repo) for a small intro
View Official releases here : Starred releases are most stable ones.
2022-02-01 nuts 0.8.3.1 released nuts-runtime-0.8.3.1.jar
FIXED : runtime Fixed problem with dependency resolution whit maven's "import" scope
FIXED : Changed $ by $@- FIXED : Fixed NAF support in ncode
2021-01-05 nuts 0.8.3.0 (*) released download nuts-0.8.3.jar
WARNING : api API has evolved with incompatibilities with previous versions
ADDED : runtime now search --dry displays the search query plan
ADDED : api added command "settings install-log" to display installation logs
ADDED : api added NutsExpr to help parsing simple expressions (used or will be used in almost all commands)
CHANGED : api Simplified API
ADDED : api added NutsDescriptorFlag to match multiple descriptor info such as app, executable etc.
ADDED : api added NutsIOCopyAction.setSource(byte[]) and NutsIOHashAction.setSource(byte[])
ADDED : api removed NutsId.compatFilter and NutsVersion.compatFilter and replaced by compatNewer/compatOlder
ADDED : api replaced string messages with NutsMessage in NutsLogger
ADDED : api removed 'NutsInput' and 'NutsOutput'
ADDED : api removed 'NutsCommandlineFamily' and replaced by 'NutsShellFamily'
ADDED : api added 'NutsBootTerminal' to help nuts bootstrap using custom stdin/out end err
CHANGED : api added 'NutsHomeLocation' to replace compound key NutsOSFamily and NutsStoreLocation
ADDED : api added 'NutsPath.isDirectory' and 'NutsPath.isRegularFile'
CHANGED : api removed commandline options '-C' and '--no-color', you can use '--!color' instead
CHANGED : api removed commandline options '--no-switch' and '--no-progress', you can use '--!switch' and '--!progress' instead
CHANGED : api NutsResultList renamed to NutsStream and revamped with handy stream features and added ws.util.streamOf(...)
CHANGED : api ws.io.expandPath replaced by NutsPath.builder.setExpanded(true)
REMOVED : api removed deprecated ClassifierMapping
REMOVED : api removed NutsTokenFilter (little to no interest)
REMOVED : api removed deprecated feature inheritedLog
ADDED : api NutsVal, a simple wrapper for strings and objects with helpful converters used in args, env, options and properties.
CHANGED : api changed descriptor to add maven profiles support, mainly added platform for dependency and added os/platform etc to property
ADDED : api added NutsShellFamily to support bash, csh, and other shell families
ADDED : pom add Manifest Entry 'Automatic-Module-Name' in all projects to support j9+ module technology
FIXED : impl NutsFormat now creates any missing parent folder when calling print(Path/File) or println(Path/File)
View Official releases here : Starred releases are most stable ones.
2021-09-04 nuts 0.8.2.0 (*) released download nuts-0.8.2.jar
View Official releases here : Starred releases are most stable ones.
2021-08-24 nuts 0.8.1.0 (*) released download nuts-0.8.1.jar
ADDED: api added static methods of() in interfaces to simplify instantiation
ADDED: api parseLenient to all NutsEnum classes
CHANGED: nadmin removed nadmin and merged into runtime (tight coupling!!)
REMOVED: api removed session.formatObject() as the session is now propagated silently
CHANGED: api removed NutsApplicationLifeCycle and replaced with NutsApplication (an interface instead of a class)
ADDED : api added support for parsing pom.xml (MAVEN) along with .nuts (nuts descriptors)- ADDED : api added io killProcess support
CHANGED: api added path API, implemented via nlib-ssh to add ssh support for paths
CHANGED: all remove dependencies, runtime has no dependencies, and others have the bare minimum
CHANGED: api session is from now on mandatory to perform any operation. A simple way to make it simple to use is to get a "session aware" workspace with session.getWorkspace()
ADDED : api added support for Yaml with minimal implementation
ADDED : api element now supports complex keys in Map Entries (Objects)
ADDED : api cmdline added support for History and implemented in JLine extension
ADDED : api cmdline added support for readline syntax coloring (using jline)
ADDED : api cmdline added --locale option to support multi languages. The option is reflected to Session as well
ADDED : api cmdline added ---key=value options to support extra properties
ADDED : api cmdline added -S short option, equivalent to --standalone
ADDED : api cmdline added NutsFormattedMessage to support formatted messages in a uniform manner (C-style, positional)
CHANGED: api cmdline both list and tree dependencies are now accessible as NutsDependencies
ADDED : runtime added support to community maven repositories : jcenter, jboss, spring, clojars, atlassian, atlassian-snapshot, google, oracle to use the repository you can add it as a permanent repository or temporary. here are some examples:
FIXED : runtime extension support (for JLine)
ADDED : runtime added minimal implementation for YAM
ADDED : runtime added fast implementation for JSON and removed gson dependency
CHANGED: runtime revamped Nuts Text Format to support simplified syntax but more verbose styles. Now supports #), ##), ###) and so on as Title Nodes. It supports as well the common markdown 'code' format with anti-quotes such as code goes here...
Other supported examples are: some command...
error message...
someKeyword
CHANGED: runtime help files now have extensions ".ntf" (for nuts text format) instead of ".help"
ADDED : njob added --help sub-command
FIXED : nsh fixed multiple inconsistencies and implemented a brand new parser
REMOVED: docusaurus-to-ascidoctor tool fully removed as replaced by a more mature ndocusaurus
REMOVED: ndi, removed project, merged into nadmin
REMOVED: nded, removed project, temporarily code added to nadmin, needs to be refactored
ADDED : ntalk-agent new modules nlib-talk-agent (library) and ntalk-agent (application using the library) that enable client to client communication. nlib-talk-agent is a broker that helps communication between nuts components with minimum overhead. nlib-talk-agent enables one workspace to talk with any other workspace without having to create one server socket for each workspace. It also enables singleton per location implementation
View Official releases here : Starred releases are most stable ones.
2020-11-08? nuts 0.8.0.0 (*) released download nuts-0.8.0.jar
WARNING: this is a major version, API has evolved with multiple incompatibilities with previous versions
CHANGED: -Z will update .bashrc file and switch back to default workspace
ADDED : nuts commandline argument --N (--expire) to force reloading invoked artifacts (expire fetched jars). a related NSession.expireTime is introduced to force reinstall of any launched application and it dependencies, example: -N ndi
ADDED : 'switch' command in ndi to support switching from one workspace to another. example : switch -w other-workspace -a 0.8.0
View Official releases here : Starred releases are most stable ones.
WARNING: this version is not deployed to maven-central
2020-09-23 nuts 0.7.2.0 (*) released download nuts-0.7.2.jar
RENAMED: feenoo renamed to ncode*- ADDED : Docusaurus Website
WARNING: this version is not deployed to maven-central
2020-09-14 nuts 0.7.1.0 (*) released download nuts-0.7.1.jar
WARNING: this version is not deployed to maven-central
2020-07-26 nuts 0.7.0.0 (*) released download nuts-0.7.0.jar
View Official releases here : Starred releases are most stable ones.
WARNING: this version is not deployed to maven-central
2020-01-15 nuts 0.6.0.0 (*) released download nuts-0.6.0.jar
CHANGED : alias files have extension changed form .njc to .cmd-alias.json
WARNING: this version is not deployed to maven-central
2019-09-02 nuts 0.5.8.0 (*) released download nuts-0.5.8.jar## nuts 0.5.7.0 WARNING: this version is not deployed to maven-central
2019-07-23 nuts 0.5.7.0 (*) released download nuts-0.5.7.jar## nuts 0.5.6.0 WARNING: this version is not deployed to maven-central
2019-06-23 nuts 0.5.6.0 released download nuts-0.5.6.jar## nuts 0.5.5.0 WARNING: this version is not deployed to maven-central
2019-06-08 nuts 0.5.5.0 released download nuts-0.5.5.jar## nuts 0.5.4.0 Change Log WARNING: this version is not deployed to maven-central
2019-04-21 nuts 0.5.4.0 (*) released download nuts-0.5.4.jar## nuts 0.5.3.0 Change Log WARNING: this version is not deployed to maven-central
2019-01-05 nuts 0.5.3.0 released download nuts-0.5.3.jar## nuts 0.5.2.0 Change Log WARNING: this version is not deployed to maven-central
2018-12-28 nuts 0.5.2.0 released download nuts-0.5.2.jar ## nuts 0.5.1.0 Change Log WARNING: this version is not deployed to maven-central
2018-12-18 nuts 0.5.1.0 released download nuts-0.5.1.jar## nuts 0.5.0.0 Change Log WARNING: this version is not deployed to maven-central
2018-11-25 nuts 0.5.0.0 released download nuts-0.5.0.jar
Is there any package manager for Java(TM) applications2? You can google for it and you will find that many have queried this on blogs and forums. In most cases responses point to maven and gradle, the tremendous build tools. However, both maven and gradle are build tools, while helping build packages they lack of deployment features. They bundle every dependency in every package (think of wars, ears and standalone jars). They do not handle installation or upgrading.
Apache ivy, as well, while competing with maven build tool does not provide more than transitive dependency management. The main idea behind a package manager is the automation of installation, update, configuration and removal of programs or libraries in a coherent manner with the help of a database that manages binaries and metadata. maven, to consider one, sticks to the build process, an goes no further.
You may also ask, "Why ever, do we need a package manager for Java(TM) applications". Okkay, let's take some example of Java(TM) applications. How can we install apache netbeans IDE ? The proper way is to browse to the editor's website, select the proper mirror if applicable, download the archive, uncompress it, chmod the main binary (i'm a linux guy) and adjust PATH environment variable to point to this binary; Quite a pain. What do we do to update it now? Hopefully, the IDE has a solid plugin architecture and an in-app update/upgrade tool that will help the process (in a gui manner of course). The same applies to eclipse and apache tomcat with the exception that apache tomcat does not even bundle an in-app update tool. The same applies too when dealing with other operating systems (Windows, MacOS, ...). Managing Java(TM) applications is far from helpful.
Furthermore, as Java(TM) applications are (usually) not bundled in OS-aware installers, you will end up with a spaguetty home directory with applications installed all over your partitions, which - simply - does not mix up with all the work
OS-developers have done to separate logs from data, from temporary files, from binaries, etc. Each application will handle it's files in a very specific manner that would make it hard to manage own's disk (automatic archive/backup/restore) or roaming applications across machines, etc.
Moreover, in a world of containers and devops, deployments of Java(TM) applications need to be automatable and reproducible with the highest level of simplicity, configurability and integrability. Installing tomcat on a custom port should not not be as painful as using a custom Docker image or a complicated Dockerfile or even a custom apache tomcat bundle.
When we recall that Java(TM) is the one language that has the more versatile number of libraries, frameworks and tools, I find it annoying not to have a decent package manager to make the leap and provide facilities I find prime in other
languages and platforms (pip/python, npm/nodejs/javascript) and most of linux distribution (zypper/opensuse, dnf/redhat apt-get/debian/ubuntu)
Hence I'm introducing here a humble attempt to provide a tiny (300ko) yet powerful package manager for Java(TM) applications (but not only) that should handle jar files seamlessly (with little or no modification) and that comes with a set of portable tools that makes this management at a higher level. I'm not talking about redefining the wheel. I'm aware that many tools such as maven, are already very good at what they do, I just needed to make the leap for deployments. You will be able to deploy your applications without bundling all of their dependencies : nuts will take care of that.
So you'd still be maven, yet you gonna be nuts.
nuts is actually :
nuts calculates transitive dependencies of an application to resolve other packages to download at install or update/upgrade time. So typically, deployed applications should no more bundle their dependencies within the deployed archive. Thus we avoid the annoying fat jars (using maven plugins like 'maven-assembly-plugin' and 'maven-shade-plugin') and lib folders (using 'maven-dependency-plugin'). It will also reuse dependencies and packages across multiple installed applications and hence save disk space, and network bandwidth.
All what nuts needs is a descriptor file withing the jar file that defines the immediate dependencies. It then calculates all transitive dependencies automatically. And guess what, all maven built jars already contain that descriptor : the pom.xml file. So basically all maven applications are already nuts aware applications.
nuts uses this dependency resolution to help install, update, remove and search for applications. To be able to use an application, it has to be installed and configured with all of its dependencies. This is the main goal of nuts. When we ask to install tomcat, for instance, it will search for the best version in registered repositories, download it, and configure it to be ready for execution. The best version is not always the the latest one. Actually it would be the latest valid one, thus the latest one that matches some constraints. Constraints include the version of the running java (tomcat 8 works on java 7 but not 6 for instance), the running operating system (windows, linux, ... to help selecting the proper binaries), may be the hardware architecture or even the operating distribution (for linux based systems). Constraints will filter the search result to include the best, the most accurate version to install. Installation also would configure the installed application and even may run another artifact to help this configuration.
nuts also handles search for newer versions and update the installed application at request. Updating a software does not necessarily delete the older version. Both version can coexist and It's up to the user the decide whether or not to retain both versions. Indeed, one of the key features of nuts is the ability to install and hence run multiple versions of the same software in parallel. You would never see an error message telling you can't install that software because a dependency of It's installed with different version. All software and all libraries can coexist peacefully.
Software artifacts are stored in repositories. nuts can handle multiple repositories, remote and local ones. Installed software are stored in special local repositories. Supported repositories include maven repositories and github repositories. Actually a fresh installation of nuts is configured with maven central repository so that, you already have access to thousands of installable artifacts.
At some point, you may need to uninstall an artifact and that's to undo the artifact installation. Installation will help you choose between uninstalling binaries only and keeping data/config files or remove permanently all of the artifact files. In all ways, uninstalling will not affect other artifacts that use the same dependencies if ever.
nuts is intended to be used either by human users or by robots and other applications. It comes with portable, feature rich toolset, a versatile library and a handy parsable result.
nuts is mainly a commandline program that helps installing, uninstalling, searching, updating and running artifacts. To help desktop integration, nuts installs by default a set of other companion tools such as nsh (a portable bash-compatible implementation), and nadmin (an administration tool for nuts to configure users, authorizations, repositories, create scripts,...);
nsh brings the bash facilities to all environments (windows included) in a very portable manner. Besides it integrates well with the installed nuts version. Several common commands are ported to nsh such as cat,head, and ssh, as well as core features like pipes, redirection and scripts.
nadmin is intended for configuring nuts workspaces, managing repositories and users. It helps also configuring sub commands and aliases to make nuts usage even easier.
One of the key features of nuts is the ability to support multiple isolated workspaces, each managing it's own repositories, applications and libraries; each defining it's sandbox security constraints. Thus non-root installation is made easy while it remains possible to overlap between workspaces by sharing repositories. Roaming is also supported, so that a workspaces can be copied/moved across machines.
nuts can also be embedded as a library in you application. This enables you to wire classes on the fly by its network dependency-aware classloading mechanisms. The library allows as well building solid and well integrated applications, mainly console applications. Indeed, nuts comes with rich outputs that support automatic formatting to json, xml, table, tree and plain texts. It handles standard File Systems layouts; XDG Base Directory Specification is implemented for linux and MacOS. A compatible one is also implemented in Windows systems. And of course, it helps seamlessly install, update and remove events.
In every palace you will find the wizard and the fool, the maven and the nuts; There's no exception in the java kingdom! If you do prefer acronyms here is another reason : nuts stands for Network Updatable Things Services. It should be able to facilitate things deployment and update over the wire where things resolve here to any piece of software depending (or not) on other piece of software.
This is the first version of the Nuts website.