{"id":44694620,"url":"https://github.com/srimel/mfer","last_synced_at":"2026-02-15T08:01:01.054Z","repository":{"id":307901290,"uuid":"1005960638","full_name":"srimel/mfer","owner":"srimel","description":"CLI tool designed to sensibly run micro-frontends from the terminal.","archived":false,"fork":false,"pushed_at":"2025-10-11T07:11:10.000Z","size":485,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-12T19:42:54.753Z","etag":null,"topics":["cli","cli-tool","micro-frontend","micro-frontends","microfrontend","microfrontends"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/mfer","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/srimel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-21T07:10:10.000Z","updated_at":"2025-10-11T07:11:00.000Z","dependencies_parsed_at":"2025-08-06T02:25:19.776Z","dependency_job_id":"c077d566-7de4-4d5f-8960-2713f6690066","html_url":"https://github.com/srimel/mfer","commit_stats":null,"previous_names":["srimel/mfer","srimel/run-mfs"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/srimel/mfer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srimel%2Fmfer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srimel%2Fmfer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srimel%2Fmfer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srimel%2Fmfer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/srimel","download_url":"https://codeload.github.com/srimel/mfer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srimel%2Fmfer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29473358,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T06:58:05.414Z","status":"ssl_error","status_checked_at":"2026-02-15T06:58:05.085Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","cli-tool","micro-frontend","micro-frontends","microfrontend","microfrontends"],"created_at":"2026-02-15T08:00:25.543Z","updated_at":"2026-02-15T08:01:01.048Z","avatar_url":"https://github.com/srimel.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mfer (Micro Frontend Runner)\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://img.shields.io/npm/v/mfer.svg)](https://www.npmjs.com/package/mfer)\n\nA powerful CLI tool designed to simplify the management and execution of multiple micro frontend applications. mfer helps developers run, update, and organize their micro frontend projects with minimal configuration and maximum efficiency.\n\n## 📋 Table of Contents\n\n- [🚀 Features](#-features)\n- [📦 Installation](#-installation)\n- [🛠️ Quick Start](#️-quick-start)\n- [📋 Commands](#-commands)\n- [⚙️ Configuration](#️-configuration)\n- [🎯 Use Cases](#-use-cases)\n- [🔧 Advanced Usage](#-advanced-usage)\n- [🛠️ Development](#️-development)\n- [🐛 Troubleshooting](#-troubleshooting)\n- [🤝 Contributing](#-contributing)\n- [📄 License](#-license)\n- [🙏 Acknowledgments](#-acknowledgments)\n\n## 🚀 Features\n\n- **Concurrent Execution**: Run multiple micro frontends simultaneously with organized output\n- **Group Management**: Organize micro frontends into logical groups for selective execution\n- **Git Integration**: Pull latest changes from all repositories with a single command\n- **Smart Configuration**: Interactive setup wizard with YAML-based configuration\n- **Cross-Platform**: Works on Windows, macOS, and Linux\n- **Graceful Shutdown**: Clean termination of all processes with Ctrl+C\n\n## 📦 Installation\n\n### Prerequisites\n\n- Node.js 18 or higher\n- Git (for repository management)\n\n### Install from npm\n\n```bash\nnpm install -g mfer\n```\n\n### Install from source\n\n```bash\ngit clone https://github.com/srimel/mfer.git\ncd mfer\nnpm install\nnpm run build\nnpm install -g .\n```\n\n## 🛠️ Quick Start\n\n### 1. Initialize Configuration\n\nStart by setting up your mfer configuration:\n\n```bash\nmfer init\n```\n\nThis interactive wizard will guide you through:\n\n- Setting up your GitHub username\n- Specifying the directory containing your micro frontends\n- Selecting which projects to include in your default group\n\n### 2. Run Your Micro Frontends\n\n```bash\n# Run all micro frontends\nmfer run\n\n# Run a specific group\nmfer run frontend\n\n# Run with a custom group name\nmfer run shared\n```\n\n### 3. Update Your Repositories\n\n```bash\n# Pull latest changes from all repositories\nmfer pull\n\n# Pull from a specific group\nmfer pull frontend\n```\n\n## 📋 Commands\n\n### Quick Reference\n\n- [`mfer init`](#mfer-init) - Interactive setup wizard\n- [`mfer run`](#mfer-run-group_name) - Run micro frontend applications\n- [`mfer pull`](#mfer-pull-group_name) - Pull latest changes from git repositories\n- [`mfer install`](#mfer-install-group_name) - Install dependencies for micro frontends\n- [`mfer clone`](#mfer-clone-group_name) - Clone repositories that don't exist locally\n- [`mfer lib`](#mfer-lib) - Manage internal npm packages\n- [`mfer config`](#mfer-config) - Manage configuration settings\n- [`mfer help`](#mfer-help) - Display help information\n\n### `mfer init`\n\nInteractive setup wizard to create your configuration file.\n\n**Options:**\n\n- `-f, --force`: Force re-initialization even if config exists\n\n**Example:**\n\n```bash\nmfer init --force\n```\n\n### `mfer run [group_name]`\n\nRun micro frontend applications concurrently.\n\n**Arguments:**\n\n- `group_name`: Name of the group to run (defaults to \"all\")\n\n**Options:**\n\n- `-c, --command \u003ccommand\u003e`: Custom command to run (default: npm start)\n- `-a, --async`: Run custom command concurrently instead of sequentially\n- `-s, --select`: Prompt to select which micro frontends to run\n\n**Examples:**\n\n```bash\nmfer run                    # Run all micro frontends with default command (npm start)\nmfer run frontend          # Run only frontend group with default command\nmfer run --command \"npm ci\" home    # Run custom command sequentially on home group\nmfer run -c \"yarn install\" shared  # Run yarn install sequentially on shared group\nmfer run --command \"npm ci\" --async home  # Run custom command concurrently on home group\nmfer run -c \"yarn install\" -a shared  # Run yarn install concurrently on shared group\nmfer run --command \"npm run build\" --select  # Select MFEs and run build command sequentially\n```\n\n### `mfer pull [group_name]`\n\nPull latest changes from git repositories.\n\n**Arguments:**\n\n- `group_name`: Name of the group to pull from (defaults to \"all\")\n\n**Options:**\n\n- `-s, --select`: Prompt to select which repositories to pull\n\n**Examples:**\n\n```bash\nmfer pull         # Pull from all repositories\nmfer pull shared  # Pull from shared components group only\nmfer pull --select # Select repositories to pull interactively\nmfer pull frontend --select # Select repositories from frontend group\n```\n\n### `mfer install [group_name]`\n\nInstall dependencies for all micro frontends in a group.\n\n**Arguments:**\n\n- `group_name`: Name of the group to install dependencies for (defaults to \"all\")\n\n**Options:**\n\n- `-s, --select`: Prompt to select which micro frontends to install\n\n**Examples:**\n\n```bash\nmfer install          # Install dependencies for all micro frontends\nmfer install frontend # Install dependencies for frontend group only\nmfer install --select # Select micro frontends to install interactively\nmfer install shared --select # Select micro frontends from shared group\n```\n\n### `mfer clone [group_name]`\n\nClone repositories that don't exist locally.\n\n**Arguments:**\n\n- `group_name`: Name of the group to clone repositories from (defaults to \"all\")\n\n**Example:**\n\n```bash\nmfer clone          # Clone all repositories\nmfer clone shared   # Clone repositories in shared group only\n```\n\n### `mfer config`\n\nManage your configuration settings.\n\n**Subcommands:**\n\n- `mfer config list`: Display current configuration\n- `mfer config edit`: Open configuration file in your default editor\n\n**Example:**\n\n```bash\nmfer config list    # Show current configuration\nmfer config edit    # Edit configuration in your editor\n```\n\n### `mfer help`\n\nDisplay help information for mfer commands.\n\n**Example:**\n\n```bash\nmfer help           # Show general help\nmfer help run       # Show help for run command\nmfer help config    # Show help for config command\n```\n\n### `mfer lib`\n\nManage internal npm packages and their distribution to micro frontends.\n\n**Subcommands:**\n\n- [`mfer lib build`](#mfer-lib-build-lib-name) - Build internal npm packages\n- [`mfer lib deploy`](#mfer-lib-deploy-lib-name) - Copy built libraries to micro frontends\n- [`mfer lib publish`](#mfer-lib-publish-lib-name) - Build and deploy libraries to micro frontends\n- [`mfer lib list`](#mfer-lib-list) - List configured libraries and their status\n- [`mfer lib pull`](#mfer-lib-pull-lib-name) - Pull latest changes from library git repositories\n- [`mfer lib install`](#mfer-lib-install-lib-name) - Install dependencies for libraries\n\n### `mfer lib build [lib-name]`\n\nBuild internal npm packages.\n\n**Arguments:**\n\n- `lib-name`: Name of the library to build (builds all if not specified)\n\n**Options:**\n\n- `-s, --select`: Prompt to select which libraries to build\n\n**Examples:**\n\n```bash\nmfer lib build                    # Build all libraries\nmfer lib build my-shared-utils    # Build specific library\nmfer lib build --select           # Select libraries to build interactively\n```\n\n### `mfer lib deploy [lib-name]`\n\nCopy built libraries to micro frontends.\n\n**Arguments:**\n\n- `lib-name`: Name of the library to deploy (deploys all if not specified)\n\n**Options:**\n\n- `-s, --select`: Prompt to select which libraries to deploy\n\n**Examples:**\n\n```bash\nmfer lib deploy                    # Deploy all libraries\nmfer lib deploy my-shared-utils    # Deploy specific library\nmfer lib deploy --select           # Select libraries to deploy interactively\n```\n\n### `mfer lib publish [lib-name]`\n\nBuild and deploy libraries to micro frontends.\n\n**Arguments:**\n\n- `lib-name`: Name of the library to publish (publishes all if not specified)\n\n**Options:**\n\n- `-s, --select`: Prompt to select which libraries to publish\n\n**Examples:**\n\n```bash\nmfer lib publish                    # Publish all libraries\nmfer lib publish my-shared-utils    # Publish specific library\nmfer lib publish --select           # Select libraries to publish interactively\n```\n\n### `mfer lib list`\n\nList configured libraries and their status.\n\n**Example:**\n\n```bash\nmfer lib list    # Show all configured libraries and their build status\n```\n\n### `mfer lib pull [lib-name]`\n\nPull latest changes from library git repositories.\n\n**Arguments:**\n\n- `lib-name`: Name of the library to pull from (pulls all if not specified)\n\n**Options:**\n\n- `-s, --select`: Prompt to select which libraries to pull\n\n**Examples:**\n\n```bash\nmfer lib pull                    # Pull from all libraries\nmfer lib pull my-shared-utils    # Pull from specific library only\nmfer lib pull --select           # Select libraries to pull interactively\nmfer lib pull my-design-system --select # Select libraries from specific library\n```\n\n### `mfer lib install [lib-name]`\n\nInstall dependencies for libraries.\n\n**Arguments:**\n\n- `lib-name`: Name of the library to install dependencies for (installs all if not specified)\n\n**Options:**\n\n- `-s, --select`: Prompt to select which libraries to install\n\n**Examples:**\n\n```bash\nmfer lib install                    # Install dependencies for all libraries\nmfer lib install my-shared-utils    # Install dependencies for specific library only\nmfer lib install --select           # Select libraries to install interactively\nmfer lib install my-design-system --select # Select libraries from specific library\n```\n\n## ⚙️ Configuration\n\nmfer uses a YAML configuration file located at `~/.mfer/config.yaml`. Here's an example structure:\n\n```yaml\nbase_github_url: \"https://github.com/your-username\"\nmfe_directory: \"/path/to/your/micro-frontends\"\nlib_directory: \"/path/to/your/internal-libs\"\nlibs:\n  - my-shared-utils\n  - my-design-system\n  - my-common-components\ngroups:\n  all:\n    - my-main-app\n    - my-admin-panel\n    - my-shared-components\n  main:\n    - my-main-app\n    - my-shared-components\n  admin:\n    - my-admin-panel\n    - my-shared-components\n```\n\n### Configuration Options\n\n- **`base_github_url`**: Your GitHub base URL for repository operations\n- **`mfe_directory`**: Path to the directory containing all your micro frontend projects\n- **`lib_directory`**: Path to the directory containing your internal npm packages (optional)\n- **`libs`**: List of internal npm package names to manage (optional)\n- **`groups`**: Named collections of micro frontend projects\n  - **`all`**: Default group containing all projects (required)\n  - **Custom groups**: Any additional groups you want to create\n\n### Editing Configuration\n\nYou can edit your configuration in several ways:\n\n1. **Interactive editor** (recommended):\n\n   ```bash\n   mfer config edit\n   ```\n\n2. **Direct file editing**:\n\n   ```bash\n   # On macOS/Linux\n   nano ~/.mfer/config.yaml\n\n   # On Windows\n   notepad %USERPROFILE%\\.mfer\\config.yaml\n   ```\n\n## 🎯 Use Cases\n\n### Development Workflow\n\n```bash\n# Start your day\nmfer pull          # Get latest changes\nmfer run main      # Start main application\n\n# Later, switch to admin panel work\nmfer run admin     # Start admin panel\n```\n\n### Project Organization\n\nOrganize your micro frontends into logical groups:\n\n```yaml\ngroups:\n  all:\n    - main-app\n    - admin-panel\n    - user-dashboard\n    - shared-components\n    - design-system\n  core:\n    - main-app\n    - shared-components\n    - design-system\n  admin:\n    - admin-panel\n    - user-dashboard\n    - shared-components\n  ui:\n    - shared-components\n    - design-system\n```\n\n### Team Collaboration\n\n- Share configuration files with your team\n- Standardize development environment setup\n- Ensure everyone runs the same services\n\n## 🔧 Advanced Usage\n\n### Custom Start Commands\n\nBy default, mfer runs `npm start` in each project directory.\nYou can currently only customize this by modifying the run command in the source code.\n\nAdding configurable custom start commands is something I plan on adding in the near future.\nI also welcome anyone to open a PR for that!\n\n### Environment Variables\n\nmfer respects your existing environment setup and will use the same Node.js and npm versions you have configured.\n\n### Process Management\n\n- All processes are managed concurrently with organized output\n- Use Ctrl+C to gracefully shut down all running services\n- Failed processes are reported with detailed error information\n\n## 🛠️ Development\n\n### Local Development Setup\n\nFor contributing to mfer or setting up a local development environment:\n\n```bash\ngit clone https://github.com/srimel/mfer.git\ncd mfer\nnpm install\nnpm run build\nnpm install -g .\n```\n\n### Testing with Playground\n\nThe project includes a comprehensive playground for testing mfer commands with sample micro frontends. The playground contains:\n\n- **libs/common-utils**: A shared utility library\n- **frontends/mfe1, mfe2, mfe3**: Three React micro frontends with different themes\n- Complete setup instructions and testing scenarios\n\n📖 **[View detailed local development guide →](./docs/local-development.md)**\n\n## 🐛 Troubleshooting\n\n### Common Issues\n\n**\"No configuration file detected\"**\n\n```bash\n# Run the initialization wizard\nmfer init\n```\n\n**\"Group not found\"**\n\n```bash\n# Check available groups\nmfer config list\n\n# Edit configuration to add missing group\nmfer config edit\n```\n\n**\"Directory does not exist\"**\n\n- Ensure the `mfe_directory` path in your configuration is correct\n- Use absolute paths for better reliability\n- Check that the directory exists and is accessible\n\n**\"Not a git repository\"**\n\n- Ensure all projects in your configuration are valid git repositories\n- Run `mfer clone` to clone missing repositories\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\nBuilt with:\n\n- [Commander.js](https://github.com/tj/commander.js) - CLI framework\n- [Inquirer](https://github.com/SBoudrias/Inquirer.js) - Interactive prompts\n- [Concurrently](https://github.com/open-cli-tools/concurrently) - Process management\n- [Chalk](https://github.com/chalk/chalk) - Terminal styling\n- [YAML](https://github.com/eemeli/yaml) - Configuration parsing\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrimel%2Fmfer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsrimel%2Fmfer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrimel%2Fmfer/lists"}