lectern 0.0.2

Lightning-fast PHP Composer alternative written in Rust
Documentation
# Lectern
Lectern is an async and concurrent rewrite of PHP's Composer package manager in Rust. Built with lots of help from ChatGPT-5 and Claude Sonnet 4[.5].

## Recent Improvements
- **Optimized outdated command** with better caching and increased concurrency (50x parallelism)
- 🚀 **HTTP connection pooling** with persistent connections and HTTP/2 multiplexing
- 📦 **New commands added**: create-project, dump-autoload, run-script, diagnose, clear-cache, depends, prohibits, browse, suggests, fund
- 🔧 **Modular codebase** with better organized command structure
- 💾 **Improved caching** with multi-layered in-memory and disk caching

## Todo
Lectern is not a complete replacement for Composer just yet!
Some things I haven't been able to test (as AI wrote that code),
or aren't of high priority.
- Composer compatible plugin system
- Testing of private packages and git repositories
- Implement remaining Composer commands (config, global, archive)
- Further optimize dependency resolver with constraint caching

## Benchmarks

Lectern significantly outperforms Composer across all common operations. Our benchmarks use [hyperfine](https://github.com/sharkdp/hyperfine) for accurate performance measurements with automatic cache warm-up and multiple test runs.

**Performance Highlights:**
- 🚀 **Install**: ~21x faster
-**Update**: ~17x faster
- 🔍 **Outdated**: ~152x faster
- 📦 **Require**: ~18x faster
-**Show**: ~24x faster

### Running Benchmarks

To run the benchmarks yourself:

```bash
./bench.sh
```

This will:
1. Build Lectern in release mode
2. Run comprehensive benchmarks comparing Lectern vs Composer
3. Generate a detailed report in `BENCHMARK.md`

**Requirements:**
- [hyperfine]https://github.com/sharkdp/hyperfine - Install via `cargo install hyperfine` or your package manager
- Composer installed and available in PATH

### Detailed Results

See [BENCHMARK.md](BENCHMARK.md) for the complete benchmark report with detailed timing information and statistical analysis.

## Cache location
- Lectern uses a global user cache directory by default. It will use `$XDG_CACHE_HOME/lectern` when the XDG environment is set, otherwise `~/.cache/lectern`.
- To clear the cache manually, remove that directory (for example `rm -rf ~/.cache/lectern`).

## Publishing (CI)
- A GitHub Actions workflow has been added to publish the crate to crates.io when a GitHub release is published: `.github/workflows/publish.yml`.
- You must add a repository secret named `CRATES_IO_TOKEN` (your crates.io API token) for publishing to work. The workflow uses this secret to run `cargo publish`.

## Commands

### `lectern install`
Installs the dependencies listed in the `composer.json` file. Equivalent to `composer install`.

### `lectern update`
Updates the dependencies to the latest versions allowed by the `composer.json` file. Equivalent to `composer update`.

### `lectern check-outdated`
Checks for outdated dependencies and displays the current and latest versions.

### `lectern search <package>`
Searches for a package on Packagist and displays relevant results.

### `lectern require <package>`
Adds a new dependency to the `composer.json` file and installs it.

### `lectern remove <package>`
Removes a dependency from the `composer.json` file and uninstalls it.

### `lectern show <package>`
Displays detailed information about a specific package.

### `lectern autoload`
Shows the autoloader setup.

### `lectern init`
Initializes a new project with a `composer.json` file.

### `lectern status`
Lists installed packages and their statuses.

### `lectern licenses`
Displays the licenses of installed dependencies.

### `lectern validate`
Validates the `composer.json` file for correctness.

### `lectern create-project <package> [directory]`
Creates a new project from a package (similar to `composer create-project`).

### `lectern dump-autoload`
Regenerates the autoloader files.

### `lectern run-script <script>`
Runs a script defined in `composer.json`.

### `lectern diagnose`
Diagnoses the system to identify common problems.

### `lectern clear-cache [type]`
Clears Lectern's cache (types: all, repo, files).

### `lectern depends <package>`
Shows which packages depend on a given package (similar to `composer why`).

### `lectern prohibits <package>`
Shows which packages prevent installing a given package (similar to `composer why-not`).

### `lectern browse <package>`
Opens the package repository URL in your browser.

### `lectern suggests`
Shows all suggested packages from installed dependencies.

### `lectern fund`
Shows funding information for installed packages.