Software Project File System Standards

This is the aggregation of common file and folder structures in software projects. Specific Standard

Every project should have a POM at its root folder, even if such a project does not use Maven. By defining a Maven multi project module, this can be used to import many of such projects into an IDE (i.e. Eclipse and Intellij) with one import command.

Files and Folders at ./*

Files and folders at the top level should represent an entry point to the project. The number of files and folders at the top level should be minimized, in order to have an easy overview at the entry level.

A readme describing the project and linking to other documents is such file. Files specifying the project type are another type of these files (i.e. Makefile, pom.xml etc.). These are used to import the project and to do tasks related to the project like compiling the software.

Try to minimize the number of non-hidden files and folders, in order to provide a good starting point and overview of the project without overwhelming the visitor.


Keep a Changelog is a site describing a standard how changes to the project based on versioning can be documented. Its source code can be found on Github. If the project uses Semantic Versioning, it may make sense to use the chapters Major Changes, Minor Changes and Patches for each release.

Files at ./LICENSE.* and .src/license/**

Contains licensing information. For the most part it contains copies of licenses.

Files at ./README.*

Contains the initial description of the project.

Files at ./.*

Contains meta data like IDE configuration files or version control data.

Files at ./bin/*

The files are located at ./bin/*. Contains executable programs regarding tasks of the project. It is preferred, if the scripts are written in such a way, that the current folder is located at the project's root folder. Such commands are called project commands.

Files at .src/doc/*

Contains projects documentation.

Files at src/doc/task and src/doc/task/*

Contains task of the projects that are relevant.

Files at ./lib/*

Contains dependencies of the project.

Files at ./projects/*

Contains folders with subproject. Prefer to not use recursive projects.

Files at ./src/*

Contains the source code of the project.

Files at ./target/*

Contain results of the build and test system. Also contains the results of executing other project tasks.