Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## [Unreleased]

---

## [0.5.0] - 2026-03-01 *(Initial Beta)*

### Added
- **Bidirectional edge access** — `in_edges`, `in_degree`, `find_in_edge`, `contains_in_edge` CPOs
- `bidirectional_adjacency_list` concept
Expand Down
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<table><tr>
<td><img src="docs/assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td><img src="docs/assets/logo_text.svg" width="400" alt="graph-v3 logo"></td>
<td>

# graph-v3

**A modern C++20 graph library — header-only, descriptor-based, works with your graphs.**
**A modern C++20 graph library — generic, header-only, works with your graphs**

</td>
</tr></table>
Expand All @@ -20,7 +20,8 @@
## Highlights

- **Header-only** — drop into any CMake project; no compiled components
- **Works with your containers** — `std::vector<std::vector<int>>` or `std::map<int, std::vector<int>>` are valid graphs out of the box
- **Generic** - Enabled by the use of descriptors.
- **Works with your graphs** — Bring your own graph. `std::vector<std::vector<int>>` and `std::map<int, std::list<std::pair<int,double>>>` are also valid graphs out of the box.
- **13 algorithms** — Dijkstra, Bellman-Ford, BFS, DFS, topological sort, connected components, articulation points, biconnected components, MST, triangle counting, MIS, label propagation, Jaccard coefficient
- **7 lazy views** — vertexlist, edgelist, incidence, neighbors, BFS, DFS, topological sort — all composable with range adaptors
- **Bidirectional edge access** — `in_edges`, `in_degree`, reverse BFS/DFS/topological sort via `in_edge_accessor`
Expand Down Expand Up @@ -108,7 +109,7 @@ Both share a common descriptor system and customization-point interface.
| Compiler | Version | Platform | Status |
|----------|---------|----------|--------|
| GCC | 13 + | Linux | Tested |
| Clang | 10 + | Linux, macOS | Tested |
| Clang | 18 + | Linux, macOS | Tested |
| MSVC | 2022 + | Windows | Tested |

Requires **CMake 3.20+** and a **C++20**-capable toolchain.
Expand Down Expand Up @@ -172,6 +173,7 @@ The full documentation hub is at [docs/index.md](docs/index.md).
Quick links:

- [Getting Started](docs/index.md#users)
- [C++ Standardization](docs/standardization.md) — ISO C++ papers and proposal status
- [Migration from graph-v2](docs/migration-from-v2.md)
- [FAQ](docs/FAQ.md)
- [Implementation Matrix](docs/status/implementation_matrix.md)
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.0
0.5.0
7 changes: 7 additions & 0 deletions docs/FAQ.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
<table><tr>
<td><img src="assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Frequently Asked Questions

</td>
</tr></table>

> [← Back to Documentation Index](index.md)

---
Expand Down
69 changes: 69 additions & 0 deletions docs/assets/logo_text.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 9 additions & 1 deletion docs/contributing/algorithm-template.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Algorithm Documentation Template

This template provides a standardized format for documenting graph algorithms in the graph-v3 library. Follow this structure to ensure consistency and completeness across all algorithm documentation.

> This template provides a standardized format for documenting graph algorithms in the graph-v3 library. Follow this structure to ensure consistency and completeness across all algorithm documentation.

</td>
</tr></table>

## Algorithm Name

Expand Down
6 changes: 6 additions & 0 deletions docs/contributing/architecture.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Architecture Guide

> How graph-v3 is structured, and the design principles behind it.

</td>
</tr></table>
---

## Directory Structure
Expand Down
10 changes: 9 additions & 1 deletion docs/contributing/coding-guidelines.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Coding Guidelines

These requirements apply to every graph-related component, including implementations, views, algorithms, and the data model.

> These requirements apply to every graph-related component, including implementations, views, algorithms, and the data model.

</td>
</tr></table>

## Core Architectural Commitments
1. The interface MUST be able to adapt to existing graph data structures.
Expand Down
7 changes: 7 additions & 0 deletions docs/contributing/cpo-implementation.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# CPO Implementation Guide

> How Customization Point Objects work in graph-v3, how to implement new ones, and how to test them.

</td>
</tr></table>

**References:**
- [Adjacency List Interface](../reference/adjacency-list-interface.md) — GCI spec for adjacency lists
- [Edge List Interface](../reference/edge-list-interface.md) — GCI spec for edge lists
Expand Down
10 changes: 9 additions & 1 deletion docs/contributing/cpo-order.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Graph CPO Implementation Order

This document specifies the correct implementation order for CPOs in `graph_cpo.hpp`, matching the reference implementation structure.

> This document specifies the correct implementation order for CPOs in `graph_cpo.hpp`, matching the reference implementation structure.

</td>
</tr></table>

## CPO Implementation Order

Expand Down
7 changes: 7 additions & 0 deletions docs/contributing/view-chaining.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# View Chaining — How It Works

</td>
</tr></table>

## Overview

Graph views in graph-v3 support **full C++20 range chaining with `std::views`**, including
Expand Down
9 changes: 8 additions & 1 deletion docs/contributing/view-template.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# View Documentation Template

This template provides a standardized format for documenting graph views in the graph-v3 library. Follow this structure to ensure consistency and completeness across all view documentation.

> This template provides a standardized format for documenting graph views in the graph-v3 library. Follow this structure to ensure consistency and completeness across all view documentation.

</td>
</tr></table>
## View Name

### Brief Description
Expand Down
12 changes: 10 additions & 2 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
<table><tr>
<td><img src="assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Getting Started

> [← Back to Documentation Index](index.md)

This guide walks you through installing graph-v3, building your first graph,
> This guide walks you through installing graph-v3, building your first graph,
running an algorithm, and working with edge lists.

</td>
</tr></table>

> [← Back to Documentation Index](index.md)

---

## 1. Requirements
Expand Down
8 changes: 4 additions & 4 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

</td>
</tr></table>

---

## For Users
Expand All @@ -17,9 +16,9 @@
- [Adjacency Lists](user-guide/adjacency-lists.md) — range-of-ranges model, concepts, CPOs
- [Edge Lists](user-guide/edge-lists.md) — flat sourced-edge model, concepts, patterns
- [Containers](user-guide/containers.md) — `dynamic_graph`, `compressed_graph`, `undirected_adjacency_list`, 27 trait combinations
- [Views](user-guide/views.md) — lazy traversal views (BFS, DFS, topological sort, etc.)
- [Views](user-guide/views.md) — lazy traversal views (breadth-first search, depth-first search, topological sort, etc.)
- [Bidirectional Access](user-guide/bidirectional-access.md) — incoming edges, reverse traversal, `in_edge_accessor`
- [Algorithms](user-guide/algorithms.md) — Dijkstra, Bellman-Ford, MST, connected components, and more
- [Algorithms](user-guide/algorithms.md) — Dijkstra and Bellman-Ford shortest-paths, minimal spanning tree, connected components, and more

## Reference

Expand All @@ -45,6 +44,7 @@
## Other

- [FAQ](FAQ.md) — common questions and answers
- [Migration from v2](migration-from-v2.md) — what changed from graph-v2 and how to migrate
- [Status & Metrics](status/metrics.md) — canonical counts and implementation matrix
- [Code Coverage](status/coverage.md) — line and function coverage report (95.8% lines, 92.0% functions)
- [C++ Standardization](standardization.md) — ISO C++ proposal papers (P3126–P3131, P3337) and participation
- [Migration from v2](migration-from-v2.md) — what changed from graph-v2 and how to migrate
7 changes: 7 additions & 0 deletions docs/migration-from-v2.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
<table><tr>
<td><img src="assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Migrating from graph-v2 to graph-v3

</td>
</tr></table>

> [← Back to Documentation Index](index.md)

## Overview
Expand Down
12 changes: 10 additions & 2 deletions docs/reference/adjacency-list-interface.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Adjacency List Interface Reference

> [← Back to Documentation Index](../index.md) · [User Guide: Adjacency Lists](../user-guide/adjacency-lists.md)

This is the formal **Graph Container Interface (GCI)** specification for
> This is the formal **Graph Container Interface (GCI)** specification for
adjacency lists, derived from P1709/D3130.

</td>
</tr></table>

> [← Back to Documentation Index](../index.md) · [User Guide: Adjacency Lists](../user-guide/adjacency-lists.md)

---

## Concepts
Expand Down
12 changes: 10 additions & 2 deletions docs/reference/algorithm-complexity.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Algorithm Complexity Cheat Sheet

> [← Back to Documentation Index](../index.md) · [User Guide: Algorithms](../user-guide/algorithms.md)

Quick-reference for time complexity, space complexity, required concepts, and
> Quick-reference for time complexity, space complexity, required concepts, and
headers for every algorithm in graph-v3.

</td>
</tr></table>

> [← Back to Documentation Index](../index.md) · [User Guide: Algorithms](../user-guide/algorithms.md)

---

## Shortest Paths
Expand Down
12 changes: 10 additions & 2 deletions docs/reference/concepts.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# Concepts Reference

> [← Back to Documentation Index](../index.md) · [CPO Reference](cpo-reference.md)

All graph concepts live in `namespace graph::adj_list` (adjacency lists) or
> All graph concepts live in `namespace graph::adj_list` (adjacency lists) or
`namespace graph::edge_list` (edge lists) and are re-exported into
`namespace graph` via `<graph/graph.hpp>`.

</td>
</tr></table>

> [← Back to Documentation Index](../index.md) · [CPO Reference](cpo-reference.md)

---

## Adjacency List Concepts
Expand Down
8 changes: 8 additions & 0 deletions docs/reference/cpo-reference.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
<table><tr>
<td><img src="../assets/logo.svg" width="120" alt="graph-v3 logo"></td>
<td>

# CPO Reference

</td>
</tr></table>

> [← Back to Documentation Index](../index.md) · [CPO Implementation Guide](../contributing/cpo-implementation.md)


**Customization Point Objects (CPOs)** are the primary API for querying graph
structure. Each CPO resolves at compile time via a three-step priority:
1. Member function on the graph/edge type
Expand Down
Loading
Loading