This Julep discusses support for "apps" in the Julia package manager. <span style="color:blue">Text in blue could potentially be left out from a first implementation.</span> In this Julep, an app is defined as a Julia package with a @main function, intended to be run by the user as appname args to app. It should feel opaque to the user that the app is written in Julia. It's assumed that Julia is installed and serves as the "driver" to start up the app. This type of app thus differs from:
PackageCompiler apps, which bundle the Julia runtime, libraries, and artifacts to be completely standalone.
Statically compiled Julia binaries (juliac/StaticCompiler) that run without a runtime. <span style="color:blue">It should however be possible to incorporate static apps into the system presented here as later work.</span>
JLL applications. <span style="color:blue">These are executables that are provided by JLLs. We also want to seamlessly incorporate these into the system so that one can add e.g. ImageMagick from a jll and use it as a normal executable.</span>
High-Level Notes
The entry point of an app can be one of the following:Package.main
<span style="color:blue">Package.SubModule.main</span>
<span style="color:blue">app/app.jl or app/App/app.jl with module app function @main ... end end in it.</span>This mimics how the code for an extension can exist in ext/Ext.jl or ext/Ext/Ext.jl.