An open API service indexing awesome lists of open source software.

https://github.com/gregorybchris/myxa

Compatibility-aware package manager
https://github.com/gregorybchris/myxa

compatibility dependency management manager package repository update upgrade

Last synced: 5 months ago
JSON representation

Compatibility-aware package manager

Awesome Lists containing this project

README

        


Myxa


Compatibility-aware package manager



## About

Myxa has two goals:

1. Enable package maintainers to safely publish packages without breaks
2. Enable package users to easily upgrade to the latest versions of packages without breaks

### How it works

Along with package dependencies, Myxa also tracks the type signatures of each function in a package. When a breaking change is detected in a type signature, `myxa publish` will require a major version bump.

For large packages, most of the time breaking changes only affect a small proportion of users. If a user depends on feature X in their project, but only feature Y breaks, then `myxa update` will safely auto-upgrade, even across major version boundaries.

> Note: Myxa compatibility checks are compile-time only. Runtime compatibility checks, as you might know, are _quite_ difficult.

## Installation

Install using [uv](https://docs.astral.sh/uv)

```bash
uv sync
```

## Usage

```bash
# Initialize a new package
mx init ""

# Show package info
mx info

# Show package info for a specific version
mx info --version

# Add a package dependency
mx add

# Add a package dependency with a specific version
mx add --version

# Remove a package dependency
mx remove

# Lock the package dependencies
mx lock

# Update all package dependencies to the highest compatible versions
mx update

# Check whether there are breaking changes
mx check

# Check whether there are breaking changes, comparing with a specific version
mx check --version

# Check for any changes in a package
mx diff

# Check for any changes, comparing with a specific version
mx diff --version

# Publish to the index
mx publish

# List all versions of all packages in the index
mx index

# List all packages in the index
mx index --no-versions

# List all versions of one package in the index
mx index --package
```

### Local Index

Myxa automatically creates a local package index file where published packages are stored. To keep your index file somewhere else you can use the `MYXA_INDEX` environment variable. The recommended filename is `index.json`.

```bash
export MYXA_INDEX="path/to/index.json"
```

## Unsupported features

### Plan to support

- Type references and recursive types
- Upgrade across major versions

### Want to support

- Tuples
- Optional function parameters
- Dev dependencies/groups/extras
- Specifying extra indexes in package metadata
- Integration with actual code
- Different upgrade behavior for libraries and applications
- Greater than or equal to constraints
- Upper bounds

### Will not support

- Semver patch versions

## Package name

Myxa is named after the slime mold _Myxogastria_, the Ancient Greek word μύξα (_myxa_), meaning "mucus".