Author: Milos Minic
Version: 0.1.0
License: MIT (or your preferred license)
UNIdeps is a secure, automated tool designed to detect, manage, and install dependencies across multiple languages and package managers within a single repository or monorepo. It simplifies the setup process for developers by providing a single command to handle everything from Python and Node.js to Rust and System dependencies.
UNIdeps does NOT:
- Install language runtimes (Node, Python, Java, etc.)
- Replace native package managers
- Modify system dependencies without explicit opt-in
- Automatically fix broken projects
- Developers onboarding large or polyglot repositories
- Teams maintaining monorepos
- CI pipelines requiring reproducible setup
- 🔎 Automatic Detection: Recursively scans your repository to identify projects and their respective languages (Python, JavaScript/TypeScript, Rust, Go, Ruby).
- 📦 Smart Package Management: Automatically selects the correct package manager (
npm,yarn,pnpm,pip,poetry,pipenv,cargo,go,bundler,brew). - 🛡️ Secure & Isolated:
- Respects lock files (
package-lock.json,yarn.lock,poetry.lock, etc.) to ensure reproducible builds. - Python Safety: Automatically detects and uses local virtual environments (
.venv,venv,env) to prevent polluting your global system packages. - Warns you if no isolation is detected before running potentially invasive commands.
- Respects lock files (
- ⚡ Monorepo Ready: Handles multiple projects nested deep within your directory structure.
- 🔧 Configurable: Override defaults or force specific package managers via a simple
.unideps.yamlconfiguration file. - ⚗️ Dry Run: Simulate installation to see exactly what commands will be run without making changes.
UNIdeps installs dependencies:
- From repository root outward (recursively scanning)
- One project at a time (sequential)
- Always respects lockfiles when present
You can install UNIdeps directly from source:
# Clone the repository
git clone https://github.com/yourusername/unideps.git
cd unideps
# Install in editable mode (recommended for development)
pip install -e .Navigate to your project root and run:
unideps install--config, -c PATH: Specify a custom path to a configuration file.--verbose, -v: Enable detailed debug logging.--dry-run: Simulate actions without executing them.--allow-system: Allow installation of system packages (e.g. Homebrew).
Example:
unideps install --dry-run --verboseReal Example Repo Layout:
repo/
├─ backend/
│ └─ pyproject.toml
├─ frontend/
│ └─ package.json
└─ unideps install
You can create a .unideps.yaml file in your project root to customize behavior.
Example .unideps.yaml:
projects:
- path: .
manager: poetry
- path: frontend
manager: pnpm
args:
- --frozen-lockfileUNIdeps is designed with safety as a priority:
- No Magic Sudo: UNIdeps will never attempt to escalate privileges (sudo) without your explicit action.
- Environment Isolation: For Python projects, it actively looks for virtual environments (
.venv,venv) to install packages into, ensuring your system Python remains untouched. - Lockfile Integrity: It always prioritizes existing lock files to guarantee that the exact versions specified by your team are installed.
- System Package Opt-In: Installation of system-level packages (like via Brew) requires explicit opt-in via
--allow-system.
| Language | Detected Files | Package Manager |
|---|---|---|
| Node.js | package.json, package-lock.json |
npm |
yarn.lock |
yarn |
|
pnpm-lock.yaml |
pnpm |
|
| Python | requirements.txt |
pip |
poetry.lock, pyproject.toml |
poetry |
|
Pipfile, Pipfile.lock |
pipenv |
|
| Rust | Cargo.toml |
cargo |
| Go | go.mod |
go |
| Ruby | Gemfile |
bundle |
| System | Brewfile |
brew |
UNIdeps simplifies polyglot repo setup without requiring containers or OS-level tools. It orchestrates native package managers safely and predictably.
Contributions are welcome! Please feel free to submit a Pull Request.
Author: Milos Minic
Contact: minicm034@gmail.com