How to make an open-source license report and NOTICE file for your app
UpdatedShort answer
List every dependency with its license, flag the ones that need a closer look (GPL, AGPL, LGPL, MPL, unknown or missing), and collect each license text into one NOTICE file. Free tools do this one ecosystem at a time: license-checker-rseidelsohn for npm, pip-licenses for Python and LicensePlist for Swift packages.
The free ways
Free, for npm: license-checker-rseidelsohn
license-checker-rseidelsohn is a free, maintained fork of the older license-checker. It reads the packages installed in node_modules, so run npm install first.
- In Terminal, go to the project folder (where package.json is).
- Print a summary of the licenses in use with the first line below.
- Write every package and its license to a CSV file with the second line, and copy every package's license file into a folder with the third.
- Add
--productionto any of them to leave out dev dependencies, which usually don't ship with the app.
npx license-checker-rseidelsohn --summary
npx license-checker-rseidelsohn --csv --out licenses.csv
npx license-checker-rseidelsohn --files license-files
Free, for Python: pip-licenses
pip-licenses lists the packages installed in a Python environment. Install it in the project's virtual environment so it sees the same packages.
- Activate the project's virtual environment, then run
pip install pip-licenses. - List each package with its license with
pip-licenses --from=mixed --format=markdown. - Collect the license texts with
pip-licenses --format=plain-vertical --with-license-file --no-license-pathand paste them into your NOTICE file.
Free, for Swift packages: LicensePlist
LicensePlist makes an acknowledgements list from Swift Package Manager, CocoaPods and Carthage files, mostly for an iOS app's Settings bundle. Install it with Homebrew.
- Install it with
brew install licenseplist. - In the folder with your .xcodeproj, run
license-plist --markdown-path Acknowledgements.mdto get a Markdown list with every license text. - Check the list against Package.resolved: packages it couldn't find a license for need a look by hand.
LicensePlist looks up license texts through the GitHub API, so it needs the network and can hit GitHub's rate limit; its --package-sources-path option reads checked-out sources instead.
Where the free ways stop
- Each tool covers one ecosystem with its own output, so a project with Swift packages, npm and Python means three lists merged by hand.
- They report what the package metadata says. A license field that disagrees with the LICENSE file, a custom license or a missing one still needs someone to read it.
- None of them explain what a flag means for you: AGPL for a network service, LGPL linking, MPL's file-level copyleft.
- There's no client-ready report, and the NOTICE file is put together by hand.
How NoticeDesk does it

NoticeDesk is a Mac app we make: open-source license reports and NOTICE files, made offline.
- Drop the project folder on NoticeDesk. It reads Package.resolved (also inside Xcode projects and workspaces), package-lock.json, and Python requirements files, poetry.lock or a virtual environment, offline.
- Each dependency's license is identified from SPDX expressions, common names, Python classifiers and the license text itself.
- GPL, AGPL, LGPL, MPL and EPL licenses, unknown and missing licenses, and metadata that disagrees with the license file are flagged, each with a plain-language note. The free version scans one ecosystem at a time.
- Pro scans every ecosystem at once and exports a PDF report for your client, a NOTICE.txt with every license text, and CSV or JSON.


Free to use without a key: scan one ecosystem at a time and see every dependency with its license, flags and notes on screen.
$29 one-time for Pro, no subscription. Buy a license key to unlock Pro: every ecosystem in one scan, and the PDF license report, NOTICE.txt, CSV and JSON exports.
macOS 14 Sonoma or later. Apple silicon and Intel.
Questions
What is a NOTICE file?
A plain text file shipped with your product that lists the open-source components it includes, with their copyright lines and license texts. Licenses such as MIT, BSD and Apache 2.0 ask for that notice to travel with copies of the software, and Apache 2.0 also asks you to pass on a project's own NOTICE file.
Do dev dependencies count?
Usually not for what you ship: test and build tools don't end up in the app. Check anyway, because some build steps copy code into the output (bundlers do). When unsure, include them in the report and mark them.
Is a copyleft license a problem?
It depends on how the code is used and shipped. The GPL generally asks you to share the source of a combined work you distribute, the AGPL extends that to software offered over a network, and the LGPL and MPL are narrower. A flag is a reason to look closer, not a verdict, and neither the free tools nor NoticeDesk give legal advice.
Does NoticeDesk upload my project?
No. It only reads files on your Mac and never writes into the project. Its only network requests are the license check and the update check.