I am a physics major. I focus on theoretical and mathematical physics. After spending some time with Mathematica I found that it is not straightforward to create separate files for logically distinct computations and then join them together to create a package.

Of course, looking at some of the already available packages bundled with some release of Mathematica and reading some docs, I was able to get a sense of the structure of the package directory that allows Mathematica to parse it correctly (such as a Kernel folder that contains the init.m file for pre-loading external packages/contexts, Documentation folder containing docs for the same, and a PacletInfo.m file for enabling resource distribution as paclet).

However, the following is still not clear to me:

  • How can one write several $.m$ files and connect them appropriately to create a single package?
  • What is the best way to define notations that may be as reliably used as any other built-in notation like that for integral or summation? In theoretical physics, succinct notation is of tremendous benefit in condensing information. I am aware of the Notations package, but I find it really unreliable.
  • How can one implement the package as a paclet and host it online for free distribution?
  • Is there really extensive documentation, with Wolfram style documentation, tutorials, guides and links?
  • How can one make front-end items like palettes, stylesheets suited to the computations the package does?
  • What debugging tools are available for really long code?
  • What options are there for fast and reliable version control like git and integration with Github and the likes?
  • What is the common workflow behind a package creation, development, distribution and maintenance?

There are questions similar to this one already:

This question might fail to be pointed enough for a typical Mathematica SE post but I have tried my best.


closed as too broad by m_goldberg, Henrik Schumacher, MarcoB, José Antonio Díaz Navas, Coolwater Apr 28 '18 at 15:06

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 4
    $\begingroup$ As you mentioned yourself, this question is fantastically broad. Each one of your bullet points have been discussed on this site multiple times, in extensive discussions. In fact, each bullet point alone would make for too broad a question. An appropriate answer would be multiple books long. $\endgroup$ – MarcoB Apr 27 '18 at 15:52
  • 1
    $\begingroup$ @MarcoB This post can be used as a place to keep collecting relevant resources, guides, examples and no exhaustive answer is immediately warranted. I have come across such posts in Mathematica like one by J.M. on list of some of the best online resources on Mathematica. So I thought this question might fall into such a category. $\endgroup$ – Subho Apr 27 '18 at 15:58
  • 3
    $\begingroup$ To the people who vote/voted to close as too broad — the questions asked are fairly specific. (And I would add, each answer can address just one or a few of them...) $\endgroup$ – Anton Antonov Apr 27 '18 at 16:20
  • 1
    $\begingroup$ I did not vote to close, but I think that you really should break this down into parts. For instance, debugging doesn't really fit with the rest of the question (and IMO isn't affected by the length of the source files). "Paclets" refer primarily to the packaging and distribution mechanism. The basic package structure has not changed in the past 6 years. Source files still need to be written in the same way. $\endgroup$ – Szabolcs Apr 27 '18 at 19:53
  • 3
    $\begingroup$ If this topic survives then I don't think it makes sense to answer those problems here. It would be more useful to convert and polish your list, then adding links to existing topics and newly created ones. $\endgroup$ – Kuba Apr 27 '18 at 20:33