Contribution Guide

May 25, 2026 ยท View on GitHub

  • Last updated: 2026-05-25

Welcome! Thank you for contributing to Dn-FamiTracker. The following serves as a guide to those who want to get started.


Dependencies and building

To edit and/or build the source, you may use Visual Studio 2022, or alternatively, any IDE that supports CMake. You will need the following dependencies:

  • HTML Help Workshop to build the manual.
    • Note that HTML Help Workshop is no longer supported and thus no longer available to download on Microsoft's website.
    • Link to archived download.
  • Pandoc, for markdown document conversion.
    • Currently used for templated pages for the HTMLHelp manual.
  • CC65 build tools
    • Used for NSF driver compiling.
    • Make sure ld65 and ca65 is available in environment path.
  • For miscellaneous custom build scripts:
  • For any IDE that supports building via CMake:
    • CMake version 3.16+
    • The latest MSVC build tools
      • may be installed by VS Installer or by other sources
    • Windows 11 SDK (10.0.26100.0)
      • may be installed through VS Installer or by other sources
    • These dependencies can be installed through the Visual Studio Installer:
      • C++ MFC for latest v143 build tools (x86 & x64)
      • C++ ATL for latest v143 build tools (x86 & x64)
  • For Visual Studio 2022:
    • Windows Universal CRT SDK
    • The Desktop development with C++ workload, including:
      • MSVC v143 - VS 2022 C++ x64/x86 build tools (latest version)
      • C++ CMake tools for Windows
      • C++ AddressSanitizer
      • C++ ATL for latest v143 build tools (x86 & x64)
      • C++ MFC for latest v143 build tools (x86 & x64)
      • Windows 11 SDK (10.0.26100.0)
  • Alternatively, you can install the components mentioned via the provided .vsconfig file.

Code guidelines and formatting

  • The code mostly follows Unix style (LF) line endings and TAB indentation format.
    • Remove trailing whitespace whenever you edit nearby lines.
  • Document Dn-FamiTracker code behavior as much as possible whenever you are learning about them, this may be useful to other contributors.
    • There is not much documentation regarding the FamiTracker source code, so you might need to do some code reading first before you implement or modify a component.
  • FamiTracker (and most of its forks) is an MFC application with project files made in Visual Studio. Dn-FamiTracker supports being built by Visual Studio and CMake, so if you have implemented a change, be sure to update the CMake files as required.
  • If implementing a new feature that affects tracker behavior (such as effects, UI), please update documentation in Dn-help and other areas of the tracker.
  • If implementing a new feature that affects file formats (such as envelopes, new data format storage), please increment the respective file block version.
    • if this necessitates a new file block, please increment the module file version.
  • When making changes to a file, be sure to update the copyright year:
Dn-FamiTracker - NES/Famicom sound tracker
Copyright (C) 2020-<CURRENT_YEAR> D.P.C.M.
FamiTracker Copyright (C) 2005-2020 Jonathan Liss
0CC-FamiTracker Copyright (C) 2014-2018 HertzDevil

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see https://www.gnu.org/licenses/.

Git guidelines

  • Write pull requests that passes CI builds and tests.
  • Make sure to adhere to the pull request template message guidelines.
  • Base your pull request on the main branch.
  • If a merge conflict happens due to not being updated in a long time, resolve merge conflicts and rebase your pull request to the latest compatible version of the main branch.
  • Be sure to update Dn-help on your pull request as needed.
    • Create a corresponding pull request on Dn-help that links to your main pull request.
    • Then once the PR in Dn-help is merged, update the submodule to point to the main branch

File extension case sensitivity

  • When committing changes, file extension case must be the same as the original file!
    • This might result in merge conflicts, because Git is case sensitive, but in Windows systems, the file system is case insensitive by default.
  • Additionally, case sensitivity in Windows can be enabled through WSL, but it must only be enabled to resolve merge conflicts regarding file extension case sensitivity.
    • If case sensitivity is left enabled, Visual Studio throws a lot of errors due to the way IntelliSense capitalizes paths internally.

For D.P.C.M. maintainers

  • Do not push directly to the main branch.
    • Sometimes, a main branch push is unavoidable when adding a patch fix, this is fine if it's only one or two commits.
    • But as much as possible, push your changes to a branch first before writing a pull request.

Branch categories

  • These branches are designated to be of reoccurring use for the following:
    • app-emu-module-nsf_driver-dev
      • This branch is for modifying the application itself, such as the NSF driver, the module format, loading and saving code, emulator core, audio drivers, etc.
    • docs-license-ver-meta-dev
      • This branch is for meta related development, such as documentation, updating icons and logos, updating version info and license year text, etc.
    • ci-dev
      • This branch is for continuous integration development, such as GitHub Actions and AppVeyor.
      • You will most likely force push this branch to hell and back, so be sure to do it on your own fork repo.
  • Other branches may be made for more niche/specific modifications and fixes.
  • If your pull request touches two or more of these categories, it's fine but please keep it minimal.
    • Otherwise, create a new branch.