- 1. Version solving
 - 2. Using the pubgrub crate
 - 2.1. Basic example with OfflineDependencyProvider
 - 2.2. Implementing a dependency provider
 - 2.3. Caching dependencies
 - 2.4. Strategical decision making in a DependencyProvider
 - 2.5. Solution and error reporting
 - 2.6. Writing your own error reporting logic
 
- 3. Advanced usage and limitations
 - 3.1. Optional dependencies
 - 3.2. Allowing multiple versions of a package
 - 3.3. Public and Private packages
 - 3.4. Pre-release versions
 
- 4. Internals of the PubGrub algorithm
 - 4.1. Overview of the algorithm
 - 4.2. Terms
 - 4.3. Incompatibilities
 - 4.4. Partial solution
 - 4.5. Conflict resolution
 - 4.6. Building a report tree
 
- 5. Testing and benchmarking
 - 5.1. Property testing
 - 5.2. Comparison with a SAT solver
 - 5.3. Benchmarking
 
- 6. How can I contribute? Here are some ideas