When you start writing the code for your package, you will find that there isn’t really any form of enforced project structure. A clear project structure that keeps things nice and organised is usually the best way to go, especially important if other people need to read through your code.\n\nThe project structure I use is:\n\n* **build:** any builds and log files\n* **reports:** any test result files\n* **release:** to store your package for download\n* **scripts:** for use by yourself or CI to build, run tests etc.\n* **src**: the source code of the package itself\n\nFrom Unity, select to create a new project, where you will enter its name and choose the src folder from above as the project location. Doing this will create a folder within the source directory that contains the Unity project. Alongside these files you will want to put a Unity project .gitignore, such as the one I propose below.\n\n[Prepare Your Unity Project For Git](https://medium.com/andrew-lord/prepare-your-unity-project-for-git-7670f79064e9)\n\nAt the root you can add a very simple .gitignore so that the builds and tests results aren’t committed to Git.\n\n build/\n reports/\n\nMoving onto the Unity project itself, you will have an Assets folder to contain all of your project’s assets, such as source files, images and materials. To ease the process of exporting the package later I like to have one folder within here for the package sources and another with a .UnitTests suffix for all the unit tests. Any scenes (for testing the build) or other files are kept within Assets but out of the package sources folder, so that you can export everything in there to make your package.\n\nFor example, for MySuperLibrary I would have:\n\n* **Assets/MySuperLibrary/:** Package sources\n* **Assets/MySuperLibrary.UnitTests/:** Unit test sources\n* **build.scene:** scene file to test the build\n\nThat’s about it, be sure to let me know if you can think of any improvements to the structure. Enjoy!