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
ld65andca65is 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
mainbranch. - 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
mainbranch. - 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
mainbranch.- Sometimes, a
mainbranch 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.
- Sometimes, a
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.