Features CLI
A zero-config CLI tool for discovering and managing features in a feature-based architecture project by detecting README.md or README.mdx files in directories.
Getting Started
# or
Feature Detection
The CLI automatically detects features using two methods:
Method 1: Features folder (default)
Any directory that is a direct subfolder of a features directory is considered a feature.
Method 2: Feature flag in README
Any directory with a README.md or README.mdx file containing feature: true in the YAML frontmatter is considered a feature.
Both methods support:
- README formats: Both README.md and README.mdx files
- Metadata parsing: Extracts owner and metadata from YAML frontmatter
- Description extraction: Uses content after the first heading as feature description
- Nested features: Supports hierarchical feature organization (via
featuressubfolder or nested directories withfeature: true) - Documentation exclusion: Ignores README files in documentation directories (docs, docs, decisions, etc.)
README Format Examples
Standard feature (in features folder):
owner: Team Name
figma: https://www.figma.com/file/1234567890/Feature-Name?node-id=0%3A1
status: active
version: 1.0.0
tags: ["authentication", "security"]
This is the feature description that will be extracted by the CLI.
Explicit feature (anywhere with feature flag):
feature: true
owner: Team Name
status: active
This feature can be located anywhere in your codebase, not just in a features folder.
Commands and their descriptions are listed below:
| Command | Description |
|---|---|
--json |
Output features as JSON |
--flat |
Output features as a flat array instead of nested structure |
--description |
Include feature descriptions in the output. The description is automatically included in the json format |
--list-owners |
Display only unique list of owners |
--find-owner <path> |
Find the owner of a specific file or folder |
--check |
Run validation checks on features (e.g., duplicate names) |
--skip-changes |
Skip computing git commit history (faster for large repos) |
--serve |
Start an HTTP server to serve features and the web dashboard UI |
--serve --port 8080 |
Start an HTTP server on specified port |
--build |
Build a static version of the web dashboard UI |
--build-dir <path> |
Output directory for the static build (default: build) |
--coverage-dir <path> |
Specify a custom coverage directory (overrides automatic search) |
--generate-codeowners |
Generate or update a CODEOWNERS file with feature ownership information |
--project-dir <path> |
Project directory for CODEOWNERS generation and additional coverage search locations |
Coverage Support
The CLI automatically searches for coverage reports in multiple locations:
base_path/.coverageandbase_path/coverage(path provided as first argument)current_dir/.coverageandcurrent_dir/coverage(path the executable runs)project_dir/.coverageandproject_dir/coverage(if--project-diris provided)
Stops at the first directory containing coverage data. Use --coverage-dir to explicitly specify a coverage directory.
CODEOWNERS Generation
Generate or update a CODEOWNERS file based on feature ownership:
# Generate CODEOWNERS in current directory
# Generate CODEOWNERS in project directory with proper relative paths
# Can be combined with other commands
The generated CODEOWNERS file will have a managed section between markers:
# ==== GENERATED BY FEATURES-CLI ====
/src/features/feature-1 @team1
/src/features/feature-2 @team2
# ==== END SECTION GENERATED BY FEATURES-CLI ====
Any content outside these markers is preserved when regenerating.
Contributing
From the CLI directory:
# For the web dashboard
Deploy