docs: prepare Pakker documentation

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I03df3787081bde6ebf0366a24320307a6a6a6964
This commit is contained in:
raf 2026-01-29 21:13:14 +03:00
commit 5a0a5cedeb
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
4 changed files with 2285 additions and 0 deletions

455
docs/README.md Normal file
View file

@ -0,0 +1,455 @@
# Pakker
A fast, reliable multiplatform modpack manager for Minecraft, written in Rust.
## Overview
Pakker is a command-line tool for managing Minecraft modpacks across multiple
platforms including CurseForge, Modrinth, and GitHub. It provides a streamlined
workflow for creating, maintaining, and distributing modpacks with support for
automated dependency resolution, version management, and multi-platform exports.
## Key Features
### Multi-Platform Support
- **CurseForge**, **Modrinth**, and **GitHub** integration
- Unified project management across all platforms
- Platform-specific filtering and optimizations
- Automatic platform-specific manifest generation
### Intelligent Project Management
- **Dependency Resolution** - Automatically resolve and manage project
dependencies
- **Version Management** - Update strategies (latest, specific version, pinned)
- **Project Inspection** - Detailed project information with dependency trees
- **Fuzzy Matching** - Typo-tolerant project searches with suggestions
### Flexible Export System
- **Profile-Based Exports** - Customize exports for different platforms and use
cases
- **Platform Filtering** - Automatically exclude projects not available on
target platform
- **Override Management** - Separate override directories for client/server
configurations
- **Non-Interactive Mode** - Full CI/CD support with scriptable commands
### Advanced Configuration
- **Profile-Specific Settings** - Override paths, filtering rules, and export
behavior per profile
- **Project-Level Customization** - Per-project export settings, aliases, and
properties
- **Side Detection** - Automatic client/server/both classification
- **Redistributable Control** - Manage non-redistributable mod inclusion per
profile
## Installation
### From Source
```bash
git clone https://github.com/yourusername/pakker
cd pakker
cargo build --release
```
The binary will be available at `target/release/pakker`.
### Prerequisites
- Rust 1.70 or later
- Git (for remote repository features)
## Quick Start
### Initialize a New Modpack
```bash
# Create a new modpack for Fabric 1.20.1
pakker init -m 1.20.1 -l fabric
# Or for Forge
pakker init -m 1.20.1 -l forge
```
### Add Mods
```bash
# Interactive mode - search and select
pakker add sodium
# Non-interactive with platform specification
pakker add-prj --mr sodium --yes
# Add with specific properties
pakker add-prj --cf jei --side both --yes
```
### Inspect Projects
```bash
# View project details
pakker inspect sodium
# Multiple projects with dependency trees
pakker inspect sodium lithium phosphor
# View all projects
pakker ls
```
### Fetch Mod Files
```bash
# Download all mod files
pakker fetch
# Or use sync to update and fetch
pakker sync
```
### Export Modpack
```bash
# Export for CurseForge
pakker export --profile curseforge
# Export for Modrinth
pakker export --profile modrinth
# Export server pack
pakker export --profile serverpack
```
## Project Structure
```
my-modpack/
├── pakku.json # Modpack configuration
├── pakku-lock.json # Lockfile with resolved versions
├── mods/ # Downloaded mod files
├── overrides/ # Files to include in all exports
├── server-overrides/ # Server-specific files
└── client-overrides/ # Client-specific files
```
## Configuration Example
### Basic Configuration (`pakku.json`)
```json
{
"name": "My Awesome Modpack",
"version": "1.0.0",
"description": "A performance-focused modpack",
"author": "YourName",
"overrides": ["overrides"],
"serverOverrides": ["server-overrides"],
"clientOverrides": ["client-overrides"]
}
```
### With Export Profiles
```json
{
"name": "Multi-Platform Pack",
"version": "1.0.0",
"overrides": ["overrides"],
"exportProfiles": {
"curseforge": {
"filterPlatform": "curseforge",
"includeNonRedistributable": false,
"overrides": ["overrides", "curseforge-specific"]
},
"modrinth": {
"filterPlatform": "modrinth",
"includeNonRedistributable": true
},
"serverpack": {
"includeClientOnly": false,
"serverOverrides": ["server-config"]
}
}
}
```
## Common Workflows
### Development Workflow
```bash
# Initialize project
pakker init -m 1.20.1 -l fabric
# Add core mods
pakker add-prj --mr fabric-api --yes
pakker add-prj --mr sodium --yes
pakker add-prj --mr lithium --yes
# Configure and test
pakker fetch
# ... test in game ...
# Add more mods
pakker add create
# Check status
pakker status
# Export for testing
pakker export --profile modrinth
```
### CI/CD Pipeline
```bash
# Non-interactive project addition
pakker add-prj --mr fabric-api --yes --no-deps
pakker add-prj --cf jei --yes
# Update to latest versions
pakker update --yes
# Fetch all files
pakker fetch
# Export for all platforms
pakker export --profile curseforge -o dist/curseforge.zip
pakker export --profile modrinth -o dist/modrinth.mrpack
pakker export --profile serverpack -o dist/server.zip
```
### Multi-Platform Release
```bash
# Add projects from multiple platforms
pakker add-prj --mr sodium --cf sodium --yes
pakker add-prj --mr lithium --cf lithium --yes
# Configure CurseForge export (no non-redistributable)
# Configure Modrinth export (allow all)
# (in pakku.json - see Export Profiles documentation)
# Export for both
pakker export --profile curseforge -o releases/curseforge-pack.zip
pakker export --profile modrinth -o releases/modrinth-pack.mrpack
```
## Documentation
- **[Commands Reference](./COMMANDS.md)** - Complete command documentation
- **[Export Profiles](./EXPORT_PROFILES.md)** - Profile configuration guide
- **[Migration Guide](./MIGRATION.md)** - Migrating from Pakku
- **[Examples](../examples/)** - Configuration examples
## Command Overview
| Command | Description |
| ------------- | ------------------------------------------------------ |
| `init` | Initialize a new modpack project |
| `import` | Import an existing modpack |
| `add` | Add projects interactively |
| `add-prj` | Add projects non-interactively with explicit platforms |
| `rm` | Remove projects |
| `update` | Update projects to newer versions |
| `ls` | List all projects in modpack |
| `inspect` | View detailed project information |
| `fetch` | Download all project files |
| `sync` | Update and fetch in one command |
| `export` | Export modpack for distribution |
| `status` | Check for available updates |
| `set` | Modify project properties |
| `link` | Link related projects |
| `diff` | Show differences with remote |
| `credentials` | Manage API credentials |
| `cfg` | Configure modpack properties |
See [COMMANDS.md](./COMMANDS.md) for detailed usage.
## Features in Detail
### Dependency Resolution
Pakker automatically resolves and manages dependencies:
```bash
pakker add sodium
# Automatically adds fabric-api as a dependency
```
Dependencies are tracked in `pakku-lock.json` and can be inspected:
```bash
pakker inspect sodium
# Shows:
# Dependencies: fabric-api
```
### Project Side Detection
Projects are automatically classified as client-only, server-only, or both:
- **Client-only**: Shaders, client performance mods, minimap mods
- **Server-only**: Server management mods, world generation mods
- **Both**: Most gameplay mods, APIs, libraries
Override this with:
```bash
pakker set sodium --side client
```
### Version Management
Control how projects are updated:
```bash
# Pin to specific version
pakker set sodium --strategy specific --version 0.5.0
# Always use latest
pakker set lithium --strategy latest
# Manual updates only
pakker set fabric-api --strategy pinned
```
### Export Profiles
Customize export behavior per platform:
- **Override directories** - Different overrides per export
- **Platform filtering** - Exclude unavailable mods
- **Redistributable control** - Manage non-redistributable content
- **Client/server filtering** - Remove client-only mods from server packs
See [EXPORT_PROFILES.md](./EXPORT_PROFILES.md) for complete documentation.
### Remote Repositories
Sync modpack configuration with Git repositories:
```bash
# Add remote
pakker remote add origin https://github.com/user/modpack.git
# Pull updates
pakker remote-update
# Configuration is automatically synced
```
### Credentials Management
Store platform API credentials securely:
```bash
# Set credentials
pakker credentials set --curseforge YOUR_CF_KEY
pakker credentials set --modrinth YOUR_MR_TOKEN
# Credentials are used automatically for:
# - Private mods
# - Rate limit increases
# - Authenticated downloads
```
## Platform Compatibility
### CurseForge
- Full project search and metadata
- Automatic manifest generation
- Non-redistributable mod detection
- Curse modpack import support
### Modrinth
- Complete Modrinth API integration
- .mrpack format import/export
- Environment metadata support
- Full modpack search
### GitHub
- GitHub Releases integration
- Direct JAR downloads
- Version tag support
## Advanced Usage
### Fuzzy Project Search
Don't remember exact names? Pakker helps:
```bash
pakker add sodum
# Suggested: Did you mean "sodium"?
```
### Batch Operations
Add multiple projects efficiently:
```bash
pakker add-prj --mr sodium --yes
pakker add-prj --mr lithium --yes
pakker add-prj --mr phosphor --yes
```
Or use a script:
```bash
#!/bin/bash
mods=("sodium" "lithium" "phosphor" "iris")
for mod in "${mods[@]}"; do
pakker add-prj --mr "$mod" --yes
done
```
### Inspect Dependency Trees
Visualize complex dependency relationships:
```bash
pakker inspect create
# Shows:
# create v0.5.1
# ├── flywheel v0.6.10
# │ └── forge-api v1.20.1
# └── registrate v1.3.3
```
### Custom Export Profiles
Create specialized export configurations:
```json
{
"exportProfiles": {
"production": {
"filterPlatform": "curseforge",
"includeNonRedistributable": false,
"overrides": ["overrides", "prod-config"]
},
"development": {
"includeNonRedistributable": true,
"overrides": ["overrides", "dev-config"]
},
"client": {
"includeClientOnly": true,
"overrides": ["overrides", "client-extras"]
}
}
}
```
## Acknowledgments
Pakker is inspired by [Pakku](https://github.com/juraj-hrivnak/Pakku), bringing
similar functionality with improved performance and additional features through
Rust implementation.