| Crates.io | feluda |
| lib.rs | feluda |
| version | 1.11.1 |
| created_at | 2025-01-14 22:16:29.206878+00 |
| updated_at | 2026-01-25 14:51:50.161661+00 |
| description | A CLI tool to check dependency licenses. |
| homepage | https://github.com/anistark/feluda |
| repository | https://github.com/anistark/feluda |
| max_upload_size | |
| id | 1516789 |
| size | 900,224 |
π Feluda is a Rust-based command-line tool that analyzes the dependencies of a project, notes down their licenses, and flags any permissions that restrict personal or commercial usage or are incompatible with your project's license.
π It's still highly experimental, but fast iterating. Welcoming contributors and support to help bring out this project even better!
Feluda supports analyzing dependencies across multiple languages simultaneously.
feluda
You can also filter the analysis to a specific language using the --language flag.
If you already had it, make sure it's up-to-date and update if needed. (Optional) Set rust path if not set already.
cargo install feluda
Feluda is available as a DEB package for Debian-based systems.
.deb file from GitHub Releases# Install the downloaded DEB package
sudo dpkg -i feluda_*.deb
# If there are dependency issues, fix them
sudo apt install -f
Feluda is available as an RPM package for Red Hat-based systems.
.rpm file from GitHub Releases# Install the downloaded RPM package
sudo rpm -ivh feluda_*.rpm
# Or using dnf (Fedora/newer RHEL)
sudo dnf install feluda_*.rpm
# Or using yum (older RHEL/CentOS)
sudo yum install feluda_*.rpm
feluda is available in the Homebrew. You can install it using brew:
brew install feluda
feluda is available in the AUR. You can install it using an AUR helper (e.g. paru):
paru -S feluda
On NetBSD a package is available from the official repositories. To install it, simply run:
pkgin install feluda
Track releases on github releases or via release feed.
Note: This might have experimental features which might not work as intended.
First, clone the repository:
git clone https://github.com/anistark/feluda.git
cd feluda
Then, build the project using Cargo:
cargo build --release
Finally, to make feluda available globally, move the binary to a directory in your PATH. For example:
sudo mv target/release/feluda /usr/local/bin/
Feluda provides license analysis by default, with an additional command for generating compliance files. Analyze your project's dependencies and their licenses:
# Basic usage
feluda
# Specify a path to your project directory
feluda --path /path/to/project/
# Check with specific language
feluda --language {rust|node|go|python|c|cpp|r}
# Skip local file checks and force network lookup only
feluda --no-local
# Filter by OSI approval status
feluda --osi approved # Show only OSI approved licenses
feluda --osi not-approved # Show only non-OSI approved licenses
feluda --osi unknown # Show licenses with unknown OSI status
By default, Feluda checks local files first for license information before making network requests:
LICENSE files in local node_modules (npm, pnpm, yarn, bun)Cargo.toml manifests for license fieldUse --no-local to skip local checks and force network-only license lookup.
Generate compliance files for legal requirements:
# Interactive file generation
feluda generate
# Generate for specific language and license
feluda generate --language rust --project-license MIT
# Generate for specific path
feluda generate --path /path/to/project/
Generate Software Bill of Materials (SBOM) for your project:
# Generate all supported SBOM formats (SPDX + CycloneDX)
feluda sbom
# Generate SPDX format SBOM only
feluda sbom spdx
# Generate SPDX format SBOM to file
feluda sbom spdx --output sbom.json
# Generate CycloneDX format SBOM only
feluda sbom cyclonedx
# Generate CycloneDX format SBOM to file
feluda sbom cyclonedx --output sbom.json
# Generate all formats with custom output
feluda sbom --output sbom-output
Supported SBOM Formats:
What's Included in SBOM:
Use Cases:
Validate SBOM files to ensure they conform to the SPDX or CycloneDX specifications:
# Validate an SBOM file
feluda sbom validate spdx.json
# Validate and save the report to a file
feluda sbom validate spdx.json --output validation-report.txt
# Validate and output report in JSON format
feluda sbom validate spdx.json --json
# Validate and save JSON report to file
feluda sbom validate spdx.json --json --output validation-report.json
Feluda caches GitHub license data to improve performance on repeated runs:
# View cache status (size, age, health)
feluda cache
# Clear the cache
feluda cache --clear
How Caching Works:
.feluda/cache/github_licenses.jsonFeluda uses the GitHub API to fetch license information. Unauthenticated requests are limited to 60 requests/hour, which may be insufficient for large projects or frequent scans.
Increase rate limits by providing a GitHub personal access token:
# Via command-line flag
feluda --github-token <your_token>
# Or via environment variable (recommended for CI/CD)
export GITHUB_TOKEN=<your_token>
feluda
Authenticated requests get 5,000 requests/hour. No special scopes are required for the tokenβpublic repository access is sufficient.
feluda --repo <repository_url> [--ssh-key <key_path>] [--ssh-passphrase <passphrase>] [--token <https_token>]
<repository_url>: The URL of the Git repository to clone (e.g., git@github.com:user/repo.git or https://github.com/user/repo.git).
--ssh-key <key_path>: (Optional) Path to a private SSH key for authentication.
--ssh-passphrase <passphrase>: (Optional) Passphrase for the SSH key.
--token <https_token>: (Optional) HTTPS token for authenticating with private repositories.
If you're using Feluda, feel free to grab a Scanned with Feluda badge for your project:
[](https://github.com/anistark/feluda)
Replace the repo name and username. Once you've the Feluda GitHub Action setup, this badge will be automatically updated.
Feluda can generate essential compliance files required for commercial software distribution and open source projects.
A NOTICE file is a concise summary document that provides attribution for third-party components:
A THIRD_PARTY_LICENSES file provides comprehensive license documentation:
Legal Protection: Many open source licenses require attribution when redistributing code. These files ensure compliance and protect your organization from legal issues.
Transparency: Shows exactly what third-party code is included in your application, building trust with users and stakeholders.
Commercial Readiness: Essential for commercial software, enterprise deployments, and app store submissions.
Audit Preparation: Makes license audits faster and easier by providing all necessary documentation in standard formats.
--json flag for JSON output.feluda --json
Sample Output for a sample cargo.toml file containing serde and tokio dependencies:
[
{
"name": "serde",
"version": "1.0.151",
"license": "MIT",
"is_restrictive": false,
"compatibility": "Compatible",
"osi_status": "Approved"
},
{
"name": "tokio",
"version": "1.0.2",
"license": "MIT",
"is_restrictive": false,
"compatibility": "Compatible",
"osi_status": "Approved"
}
]
Use the --yaml flag for YAML output
feluda --yaml
Sample Output for a sample cargo.toml file containing serde and tokio dependencies:
- name: serde
version: 1.0.151
license: MIT
is_restrictive: false
compatibility: Compatible
osi_status: Approved
- name: tokio
version: 1.0.2
license: MIT
is_restrictive: false
compatibility: Compatible
osi_status: Approved
For a short summary, in case you don't want all that output covering your screen:
feluda --gist
For detailed information about each dependency:
feluda --verbose
The verbose mode displays a table with an additional "OSI Status" column showing whether each license is approved by the Open Source Initiative (OSI).
Feluda integrates with the Open Source Initiative (OSI) to provide license approval status information. This feature helps you identify whether the licenses used by your dependencies are officially approved by the OSI.
approved: License is officially approved by the OSIunknown: License status with OSI is unknown or the license is not OSI approvedFilter dependencies by their OSI approval status:
# Show only OSI approved licenses
feluda --osi approved --verbose
# Show only non-approved or unknown OSI status licenses
feluda --osi not-approved --verbose
# Show licenses with unknown OSI status
feluda --osi unknown --verbose
# Combine with JSON output
feluda --osi approved --json
Note: OSI status information is only displayed in --verbose mode, --gui mode, or when using structured output formats (JSON/YAML) to keep the default output clean.
Feluda can check if dependency licenses are compatible with your project's license:
feluda --project-license MIT
You can also filter for incompatible licenses only:
feluda --incompatible
And fail CI builds if incompatible licenses are found:
feluda --fail-on-incompatible
In case you need to see only the restrictive dependencies:
feluda --restrictive
We've an awesome β¨ TUI mode available to browse through the dependencies in a visually appealing way as well:
feluda --gui
Feluda provides several options for CI integration:
--ci-format <github|jenkins>: Generate output compatible with the specified CI system--fail-on-restrictive: Make the CI build fail when restrictive licenses are found--fail-on-incompatible: Make the CI build fail when incompatible licenses are found--osi <approved|not-approved|unknown>: Filter by OSI license approval status--output-file <path>: Write the output to a file instead of stdoutFeluda can be easily integrated into your CI/CD pipelines with built-in support for GitHub Actions and Jenkins.
To use Feluda with GitHub Actions, simply use the published action. For detailed documentation, see the GitHub Action README.
name: License Check
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
license-check:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Scan licenses
uses: anistark/feluda@v1
with:
fail-on-restrictive: true
fail-on-incompatible: true
Advanced usage with compliance files:
- name: Scan licenses
uses: anistark/feluda@v1
with:
fail-on-restrictive: true
project-license: 'MIT'
update-badge: true
- name: Generate compliance files
run: |
echo "1" | feluda generate # Auto-select NOTICE file
echo "2" | feluda generate # Auto-select THIRD_PARTY_LICENSES file
- name: Generate SBOM
run: |
feluda sbom spdx --output sbom.spdx.json
feluda sbom cyclonedx --output sbom.cyclonedx.json
- name: Validate SBOM files
run: |
feluda sbom validate sbom.spdx.json --output sbom-spdx-validation.txt
feluda sbom validate sbom.cyclonedx.json --output sbom-cyclonedx-validation.txt
- name: Upload compliance artifacts
uses: actions/upload-artifact@v4
with:
name: license-compliance
path: |
NOTICE
THIRD_PARTY_LICENSES.md
sbom.spdx.json
sbom.cyclonedx.json
sbom-spdx-validation.txt
sbom-cyclonedx-validation.txt
To use Feluda with Jenkins, see the CI examples directory for a sample Jenkinsfile that demonstrates:
For more CI/CD integration examples, visit the examples/ci directory.
Checkout contributing guidelines if you are looking to contribute to this project.
Currently, using choosealicense license directory for source of truth.
Feluda allows you to customize which licenses are considered restrictive and which licenses to ignore from analysis. This can be done in three ways, listed in order of precedence (highest to lowest):
.feluda.toml configuration fileBy default, Feluda considers the following licenses as restrictive:
Create a .feluda.toml file in your project root to customize restrictive licenses and ignore licenses:
[licenses]
# Override the default list of restrictive licenses
restrictive = [
"GPL-3.0", # GNU General Public License v3.0
"AGPL-3.0", # GNU Affero General Public License v3.0
"Custom-1.0", # Your custom license identifier
]
# Licenses to ignore from analysis
ignore = [
"MIT", # MIT License
"Apache-2.0", # Apache License 2.0
]
The ignore section allows you to exclude specific licenses from analysis. This is useful when:
Ignored licenses will be completely filtered out from the analysis results and won't appear in any reports.
[licenses]
ignore = [
"MIT",
"Apache-2.0",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
]
The [dependencies] section allows you to exclude entire dependencies from license scanning, regardless of their license. This is useful when:
Ignored dependencies will be completely filtered out during the scanning phase and won't appear in any reports.
[[dependencies.ignore]]
name = "github.com/anistark/wasmrun"
version = "v1.0.0"
reason = "This is within the same repo as the project, hence it shares the same license."
[[dependencies.ignore]]
name = "internal-library"
version = "" # Leave empty to ignore all versions of this dependency
reason = "We have a written acknowledgment from the author that we may use their code under our license."
[[dependencies.ignore]]
name = "dev-only-package"
version = "" # Ignore all versions
reason = "This package is only used for development and testing, not distributed."
Note: The version field is optional:
"v1.0.0"), only that version will be ignoredreason field documents why the dependency is being ignored for auditing purposesYou can also override the configuration using environment variables:
# Override restrictive licenses list
export FELUDA_LICENSES_RESTRICTIVE='["GPL-3.0","AGPL-3.0","Custom-1.0"]'
# Override ignore licenses list
export FELUDA_LICENSES_IGNORE='["MIT","Apache-2.0","BSD-3-Clause"]'
The environment variables take precedence over both the configuration file and default values.
Feluda validates your configuration and will warn you if:
License Configuration:
restrictive and ignore lists (the license will be ignored)Dependency Configuration:
Feluda uses a comprehensive license compatibility matrix to determine whether dependency licenses are compatible with your project's license. This matrix is maintained in an external TOML configuration file for easy updates and maintenance.
When you use the --project-license flag or Feluda auto-detects your project license, it checks each dependency's license against a compatibility matrix to determine:
The license compatibility rules are stored in:
config/license_compatibility.toml
This file defines which dependency licenses are compatible with each project license type. For example:
[MIT]
compatible_with = [
"MIT",
"BSD-2-Clause",
"BSD-3-Clause",
"Apache-2.0",
"ISC",
# ... more permissive licenses
]
[GPL-3.0]
compatible_with = [
"MIT",
"BSD-2-Clause",
"Apache-2.0",
"LGPL-2.1",
"LGPL-3.0",
"GPL-2.0",
"GPL-3.0",
# ... GPL-compatible licenses
]
The matrix currently supports compatibility checking for:
Advanced users can customize compatibility rules by:
.feluda/license_compatibility.toml in your home directoryconfig/license_compatibility.toml takes precedenceImportant: Modifying compatibility rules requires legal expertise. Consult legal counsel before making changes that could affect your project's compliance.
Feluda is provided as a helpful tool for license compliance analysis. However, it is not a substitute for legal advice, and users are responsible for their own compliance decisions:
Important Points:
Feluda is in active development. While we strive to provide accurate information, use at your own risk.
Happy coding with Feluda! π