Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UNIdeps: A Safe, Deterministic Dependency Installer for Polyglot Repositories

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.


❌ Non-Goals

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

👥 Who is UNIdeps for?

  • Developers onboarding large or polyglot repositories
  • Teams maintaining monorepos
  • CI pipelines requiring reproducible setup

🚀 Features

  • 🔎 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.
  • ⚡ Monorepo Ready: Handles multiple projects nested deep within your directory structure.
  • 🔧 Configurable: Override defaults or force specific package managers via a simple .unideps.yaml configuration file.
  • ⚗️ Dry Run: Simulate installation to see exactly what commands will be run without making changes.

🔄 Execution Order

UNIdeps installs dependencies:

  1. From repository root outward (recursively scanning)
  2. One project at a time (sequential)
  3. Always respects lockfiles when present

🛠️ Installation

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 .

📖 Usage

Navigate to your project root and run:

unideps install

Options

  • --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 --verbose

Real Example Repo Layout:

repo/
├─ backend/
│  └─ pyproject.toml
├─ frontend/
│  └─ package.json
└─ unideps install

⚙️ Configuration

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-lockfile

🔒 Safety & Trust

UNIdeps is designed with safety as a priority:

  1. No Magic Sudo: UNIdeps will never attempt to escalate privileges (sudo) without your explicit action.
  2. Environment Isolation: For Python projects, it actively looks for virtual environments (.venv, venv) to install packages into, ensuring your system Python remains untouched.
  3. Lockfile Integrity: It always prioritizes existing lock files to guarantee that the exact versions specified by your team are installed.
  4. System Package Opt-In: Installation of system-level packages (like via Brew) requires explicit opt-in via --allow-system.

🏗️ Supported Project Types

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

Why UNIdeps?

UNIdeps simplifies polyglot repo setup without requiring containers or OS-level tools. It orchestrates native package managers safely and predictably.


🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Author: Milos Minic
Contact: minicm034@gmail.com

About

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.

Resources

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages