Mathematica "prelude"

There are several configuration files that you can use to load functionality at startup. They have the form

($BaseDirectory | $UserBaseDirectory)/(Kernel | FrontEnd)/init.m

where

$BaseDirectory 

is for every user on the system and

$UserBaseDirectory

is for you along and Kernel or FrontEnd specifies what you are configuring. In fact, a lot of the settings under the Preferences menu automatically write to $UserBaseDirectory/FrontEnd/init.m.

In your case, you are looking to add to $UserBaseDirctory/Kernel/init.m.


With $UserBaseDirectory/Kernel/init.m the most obvious place to put code which should be autoloaded has been mentioned.

But I think it might be worth mentioning that there is also the Autoload directory within $UserBaseDirectory where you can put any package file or package directory and those will automatically be loaded at startup. For the purpose mentioned I think that might be an even better place (after having the code set up as a proper package of course...).


Note that init.m files and Autoload packages are loaded during kernel initialization when certain functions, such as Throw/Catch, cannot be safely evaluated. A lot of complex functionality depends on these, and is therefore unsafe to use in init files. It is generally best to limit initialization files to issuing definitions and basic operations.


The initialization is done in this order:

  • load paclet manager
  • load $BaseDirectory/Kernel/init.m
  • load $UserBaseDirectory/Kernel/init.m
  • load files passed with the -initfile command line option
  • load Autoload packages

The loading is triggered in SystemFiles/Kernel/SystemResources/$SystemID/sysinit.m, which you can examine for more information on the initialization process. Some documentation is here.

Subkernels used by the parallel tools are launched with -noinit, so they don't load the standard Kernel/init.m files. They do load Autoload packages.