Why ...
=======

... use ``pnpm``?
-----------------

``pnpm`` uses a cache and is more efficient than ``npm``.

... use ``github``?
-------------------

It is pretty ubiquitous and virtually a standard for managing Foundry modules.

... use ``zx`` for scripting?
-----------------------------

We have ``nodejs`` installed so may as well stick with javascript. It is also more platform independent.

... use ``vite``?
-----------------

It provides nice tools (like an |HMR| development server) out of the box.

... use ``vitest``?
-------------------

Clean, simple, flexible, and ties in to ``vite`` ecosystem.

... use ``docker``?
-------------------

For ancillary tooling it provides a neat way to isolate from the host (so we can provide neat features without needing to have you install a load of stuff). It also provides a nicely isolated environment for running development Foundry VTT servers, which can also be used in more advances scenarios in ``.github/wormflows``.

... document with Sphinx?
-------------------------

This is just my taste. I like the power and simplicity of ReStructured Text (more that Markdown but shallower learning curve than, for example, LaTeX). I also like the flexible output method from Sphinx. (See :ref:`replacing sphinx`)

... all the ``svelte`` stuff?
-----------------------------

This module template assumes you will be using `svelte <https://svelte.dev>`_ for any UI (rather than the Foundry Handlebars). :program:`Svelte` is (|IMHO|) a more powerful, more reactive, yet simpler, UI framework. It plays nicely with ``vite`` and together they produce small modules. One can use a complete library, such as `TyphonJS <https://github.com/typhonjs-fvtt-lib>`_ (which attempts to replicate the Foundry API UI as Svelte components), or simply wrap standard Svelte by extending `ApplicationV2 <https://foundryvtt.com/api/v12/classes/foundry.applications.api.ApplicationV2.html>`_. Which is better depends on your objectives.

