-
Notifications
You must be signed in to change notification settings - Fork 19
Development Environment
Home>Moneydance>Development>Development Environment
You will need a Java Development Kit. Moneydance 2015 bundles the Java 1.8 runtime, and Moneydance 2019 bundles Java 11 runtime. Moneydance 2026 bundles Java 25 runtime.
TIK updates the bundled version of Java runtime being used with each build.
If you are developing extensions use the latest JDK available, but lock the target language level to 17 for maximum backwards compatibility.
Note: You can not use the JRE provided with Moneydance, you need to install the equivalent JDK.
You will need Gradle (wrapper) version 9 to build your extension (i.e. gradlew).
Later build of Moneydance have large sections of code converted to Kotlin. However, it still all runs on the JVM. You can write pure Java, pure Kotlin, or mixed Java/Kotlin extensions. You may need access to the Kotlin pluin (version 2.3.21), and you should lock your language and api targets t0 1.9. Will probably need access to the kotlin stdlib 1.9 jar. Again, all this is provided by the latest DevKit and Open Source repo.
Any IDE should work, though one built for Java will help, for example JetBrains IntelliJ IDEA.
Extensions are held in a zip file with a file extension of .mxt. Basically this is a Java jar file with the addition of a signature file. This signature is used by Moneydance to verify that an extension has been validated by InfiniteKind. The .mxt file is created along with the signature by running the Keyadmin application. The DevKit and Open Source repo bundled gradle.build script knows how to do this:
Refer: IK Development for more details
The Moneydance Open Source repository at https://github.com/TheInfiniteKind/moneydance_open and (GitHub repo) contains real, working extensions that you can clone, fork, and use as reference implementations or a starting point for your own extension. This open source repo is essentially a larger version of the DevKit:
This open source repo now stores the code for Mike Bray's extensions, along with the build scripts.
The information below is now outdated, but can be referred to for reference (as of August 2026)
#!Xml
<java newenvironment="true"
classpathref="classpath"
classname="com.moneydance.admin.KeyAdmin">
<arg value="signextjar"/>
<arg value="${privkeyfile}"/>
<arg value="${privkeyid}"/>
<arg value="loadsectrans"/>
<arg line="${dist}/loadsectrans.mxt"/>
</java>
Before you can compile your code you need to create the keys to be used by Keyadmin. You do this by running the build file with the target genkeys, i.e
#!cmd
ant genkeys
It will ask for a pass phrase and then generate the keys.
Every time you compile your extension you will need to enter the pass phrase. This has the disadvantage that you can not use Eclipse to compile the code. You will need to run this from a command line interface.
- Set up a short cut from your desktop that starts a Command Line on the src directory for your extensions
- run
#!cmd
ant extensionname
This will do a normal build of the java code and then run the Keyadmin app to add the signature file. It will ask you for the pass phrase.
The directory structure for extensions is:
#!cmd
Moneydance
-- src
----priv_key (generated)
----pub_key (generated)
----com
------moneydance
--------modules
----------features
------------extensionname
--------------java files (*.java)
----build
------moneydance
--------modules
----------features
------------extensionname
---------------classfiles (*.class)
--lib
----extadmin.jar
----moneydance-dev.jar
--dist
----extensionname.mxt
--bin
----com
------moneydance
--------modules
----------features
------------extensionname
--------------class files (*.class)
The package name of extensions is com.moneydance.modules.features.extensionname
The supplied build file uses the above structure and places the extension .mxt file in the dist directory.
You will need to change the file to include a target for your extension. It is supplied with the name 'myextension'. Change all instances of 'myextension' to the name of your extension. This name must match the directory name for the source which in turn must match the package name in your source files.
If you want the build file to move the created .mxt file directly to the Moneydance fmodules directory you can amend the build file.
Add the following to the top of the build file after the "optimize" line:
#!xml
<property name="install" value="C:\Users\Mike\.moneydance\fmodules"/>
Where the value points at your installation of Moneydance.
At the bottom of pair for your extension place the following just before the :
#!xml
<delete file="${dist}/extensionname.mxt" verbose="true" failonerror="false" />
<move file="./s-extensionname.mxt" tofile="${dist}/extensionname.mxt" verbose="true" failonerror="false" />
<copy file="${dist}/extensionname.mxt" tofile="${install}/extensionname.mxt"
Remember to change 'extensionname' to the name of your extension.
Using Eclipse you have a number of features available to you.
- Eclipse will compile as you go flagging errors and warnings. This can aid you creating clean code
- You can debug your extension at the source code level (see Debugging)
- You can interface it with GIT and bitbucket to provide version control
For Moneydance extensions you need to compile with ANT so the signature is added to the .mxt file. Even though Eclipse will compile as you go it does not add the signature and thus Moneydance will complain when it tries to load a unsigned .mxt file. Just before you are ready to test run the ANT build file.
The IDEA development environment has the same features as Eclipse plus a good interface to ANT. Add the ANT plugin to your environment (use File/Settings/Plugins) and then add your build.xml to the plugin.
You can use the same directory structure as Eclipse though IDEA will use a different directory for the compiled classes for its internal compiling.
Once you have created your project you will need to update the Project Structure (File/Project Structure).
-
Select Project and select the SDK to match the one supplied with Moneydance.
-
Set the language to SDK Default
-
Select Libraries and make 2 entries:
a. Create a library that points to the .jars required by your extension that are not supplied by Moneydance or the JDK
b. Create a library that points at the lib directory of the installation of Moneydance (e.g. c:\Program Files\Moneydance\lib)
-
Select Modules and add a 'Sources' entry that points at the source directory
-
There should be an entry under Dependencies for each library. Make sure they are selected
You should be able to Build your project.
Refer to the IK DevKit and Development guide. Use the bundled gradle wapper task(s)
When IDEA runs the ant build it will automatically sign your extension.