# Canonical Dependency Registry - syntaxis

**Last Updated**: 2025-11-15
**Managed By**: dependency-manager tool
**Location**: Root `DEPENDENCIES.md` (with symlink from `.claude/DEPENDENCIES.md`)

---

## Overview

This document defines the canonical dependency registry for all crates in syntaxis. All crate dependencies must use versions and features defined here. This ensures:

- **Single source of truth**: No version conflicts across monorepo
- **Reproducible builds**: Consistent dependency resolution
- **Security**: Centralized vulnerability management
- **Compatibility**: Proven feature combinations

---

## Tier 1: Critical Dependencies (Must Maintain Consistency)

Dependencies that affect runtime behavior, async execution, or critical system functionality.

### Runtime & Async

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **tokio** | `1.48` | `["full"]` | Stable async runtime; pinned for reproducibility |
| **futures** | `0.3` | (none) | Async utilities and trait implementations |

### Serialization

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **serde** | `1.0` | `["derive"]` | Universal serialization framework |
| **serde_json** | `1.0` | (none) | JSON serialization |
| **toml** | `0.9` | (none) | TOML configuration parsing |
| **uuid** | `1.18` | `["v4", "serde"]` | Unique ID generation with serialization |

### Error Handling

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **thiserror** | `2.0` | (none) | **BREAKING from 1.0** - Standard error handling |
| **anyhow** | `1.0` | (none) | Flexible error context and propagation |

### Web Framework Stack

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **axum** | `0.8` | `["ws"]` | Web framework with WebSocket support |
| **tower** | `0.5` | (none) | HTTP middleware and service traits |
| **tower-http** | `0.6` | `["trace", "cors", "fs"]` | HTTP utilities (tracing, CORS, file serving) |
| **tokio-rustls** | `0.26` | (none) | TLS support for async |
| **rustls** | `0.23` | (none) | Modern TLS library (not OpenSSL) |
| **rustls-pemfile** | `2.2` | (none) | PEM certificate/key parsing |

### HTTP Client

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **reqwest** | `0.12` | `["json"]` | Async HTTP client with JSON support |

### Database

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **sqlx** | `0.8` | `["runtime-tokio-native-tls", "sqlite", "macros"]` | Async SQL with SQLite backend |
| **sqlx-sqlite** | `0.8` | (none) | SQLite-specific sqlx features |
| **surrealdb** | `2.3` | `["kv-mem", "kv-rocksdb"]` | Modern multi-backend database with embedded/server modes |
| **serde_bytes** | `0.11` | (none) | Binary data serialization for database fields |

### Authentication

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **jsonwebtoken** | `10.2` | `["aws_lc_rs"]` | **IMPORTANT: Use aws_lc_rs NOT rust_crypto** - JWT tokens |

---

## Tier 2: Important Dependencies (Frequently Used)

Dependencies that provide core functionality but with less critical version coupling.

### CLI Framework

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **clap** | `4.5` | `["derive"]` | CLI argument parsing with procedural macros |
| **clap_complete** | `4.5` | (none) | Shell completion generation |
| **colored** | `3.0` | (none) | Terminal color support |
| **prettytable-rs** | `0.10` | (none) | Formatted table output |
| **inquire** | `0.9` | (none) | Interactive CLI prompts |
| **console** | `0.15` | (none) | Console/terminal utilities |

### Terminal UI (TUI)

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **ratatui** | `0.30.0-beta.0` | `["all-widgets"]` | **BETA** - TUI widgets (latest + experimental) |
| **crossterm** | `0.29` | `["serde"]` | Terminal backend for ratatui |
| **palette** | `0.7` | `["serializing"]` | Color utilities with serialization |

### Web Frontend (Leptos/WASM)

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **leptos** | `0.8.12` | `["csr"]` | WASM frontend framework (client-side rendering) |
| **leptos_router** | `0.8.9` | (none) | Routing for Leptos applications |
| **leptos_meta** | `0.8.5` | (none) | Meta tag management for Leptos |
| **wasm-bindgen** | `0.2` | (none) | WASM JavaScript bindings |
| **gloo-net** | `0.6` | (none) | HTTP client for WASM |
| **web-sys** | `0.3` | (none) | Web APIs for WASM |
| **wasm-logger** | `0.2` | (none) | Logging for WASM applications |

### Utilities & Helpers

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **chrono** | `0.4` | `["serde"]` | Date/time handling with serialization |
| **camino** | `1.2` | (none) | UTF-8 paths (safer than std::path) |
| **walkdir** | `2.5` | (none) | Recursive directory iteration |
| **handlebars** | `6.3` | (none) | Template engine |
| **indexmap** | `2.12` | (none) | Ordered maps/sets |
| **regex** | `1.12` | (none) | Regular expressions |
| **once_cell** | `1.21` | (none) | Lazy static initialization |
| **dirs** | `6.0` | (none) | Platform-specific directories |

### Logging & Tracing

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **tracing** | `0.1` | (none) | Structured logging/tracing |
| **tracing-subscriber** | `0.3` | `["env-filter"]` | Logging subscriber with filtering |

### Metrics & Monitoring

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **prometheus** | `0.14` | `["process"]` | Prometheus metrics collection |

### Caching

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **moka** | `0.12` | `["future"]` | High-performance async cache |

### WebSocket

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **tokio-tungstenite** | `0.28` | (none) | WebSocket support for tokio |

### Messaging

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **async-nats** | `0.45` | (none) | NATS messaging client |

---

## Tier 3: Stable Dependencies (Dev/Test Only)

Dependencies used exclusively in testing, benchmarking, or development.

| Dependency | Version | Features | Rationale |
|-----------|---------|----------|-----------|
| **tokio-test** | `0.4` | (none) | Tokio async testing utilities |
| **tempfile** | `3.23` | (none) | Temporary files for testing |
| **assert_cmd** | `2.1` | (none) | CLI command assertion testing |
| **predicates** | `3.1` | (none) | Predicate assertions |
| **criterion** | `0.7` | `["html_reports"]` | Benchmarking framework |
| **mockito** | `1.6` | (none) | HTTP mocking for tests |

---

## Breaking Changes & Migration Notes

### ⚠️ SurrealDB 2.3 Upgrade (Recently Applied)

**What Changed**: Major API changes in SurrealDB 2.3 from 1.5

**Key Differences**:
- Parameter binding: `.bind(json!({ "key": value }))` instead of `.bind(("key", value))`
- Query patterns: Parameterized SQL with `$placeholders`
- Builder API: Removed in favor of explicit query methods
- Features: `kv-mem` for in-memory and `kv-rocksdb` for embedded persistence

**Migration Status**: ✅ Complete - syntaxis-core and syntaxis-cli fully migrated

**See Also**: `SURREALDB_2_3_MIGRATION.md` for detailed migration guide

---

### ⚠️ thiserror 2.0 Upgrade (Already Applied)

**What Changed**: API changes from 1.0 to 2.0

**Migration Required**: All error types using `#[error(...)]` macro updated

**Status in syntaxis**: ✅ Complete - all crates use 2.0

---

### ⚠️ jsonwebtoken Features Selection (CRITICAL)

**Always Use**: `features = ["aws_lc_rs"]`
**Never Use**: `features = ["rust_crypto", "use_pem"]`

**Rationale**:
- `aws_lc_rs`: AWS-backed cryptography, better performance, modern
- `rust_crypto`: Legacy pure-Rust implementation, slower
- Feature conflict causes compilation failures

**Current Status**:
- ❌ Root workspace: Still has 9.3 (will be updated to 10.2)
- ✅ syntaxis: Uses 10.2 with `aws_lc_rs`

---

### ⚠️ ratatui Beta Version (0.30.0-beta.0)

**Status**: Using bleeding-edge beta

**Why**: Latest widget support and features required for TUI

**Stability**: Production-ready for syntaxis TUI (heavily tested)

**Migration Path**: Switch to stable 0.30.0 when released (no breaking changes expected)

---

## Workspace Structure

### Root Workspace (`Cargo.toml`)

Defines all canonical versions in `[workspace.dependencies]`:

```toml
[workspace]
members = [
    "shared/rust-api/shared-api-lib",
    "shared/rust-tui",
    "shared/rust",
    "core/crates/syntaxis-core",
    # ... 10 members total
]

exclude = [
    "core/crates/syntaxis-api",      # WIP (37 errors)
    "core/crates/syntaxis-vapora",   # Planned
]

[workspace.dependencies]
# All 50+ dependencies defined here
```

### Nested Workspaces

- ❌ `syntaxis/Cargo.toml` should **NOT** have `[workspace]` section
- The root workspace already declares all crates as members
- Nested workspace definition causes anti-pattern warnings

### Shared Libraries

**Location**: `shared/rust/`, `shared/rust-api/shared-api-lib/`, `shared/rust-tui/`

**Strategy**: Portable but aligned
- Each lib maintains its own `Cargo.toml` for independence
- dependency-manager tool validates versions match canonical registry
- No workspace inheritance needed (libs can be used outside monorepo)

---

## Version Selection Rationale

### Tokio: Why 1.48 (not flexible "1")?

- **Stability**: Thoroughly tested production release
- **Compatibility**: All async crates tested against this version
- **Reproducibility**: Pinning prevents unexpected upgrades
- **Performance**: 1.48 has optimizations over 1.40-1.47

### Jsonwebtoken: Why 10.2 with aws_lc_rs?

- **Modern cryptography**: AWS-backed implementation (industry standard)
- **Performance**: 2-3x faster than pure-Rust crypto
- **Security**: Regular audits by AWS
- **Interoperability**: Works with standard JWT libraries

### Axum: Why 0.8 (not 0.9)?

- **Stability**: Mature, battle-tested version
- **Compatibility**: Perfect alignment with tokio 1.48
- **Router API**: Stable and well-documented
- **Upgrade path**: 0.9 can be adopted later if needed

### Leptos: Why 0.8.12?

- **Stability**: Latest stable release
- **WASM support**: Full CSR (client-side rendering) support
- **Component stability**: Core components stable
- **Routing**: Mature routing library included

---

## Dependency Rules

### Rule 1: Use Root Workspace Dependencies

All internal crates must specify dependencies via:

```toml
# ✅ Correct: Use workspace inheritance
[dependencies]
tokio = { workspace = true }
serde = { workspace = true }

# ❌ Wrong: Duplicate version specification
[dependencies]
tokio = "1.48"  # Don't do this, use workspace = true
```

### Rule 2: Feature Coordination

When using optional features, ensure consistency:

```toml
# ✅ Correct: Explicit features match canonical registry
[dependencies]
serde = { workspace = true, features = ["derive"] }

# ❌ Wrong: Missing features from canonical registry
[dependencies]
serde = { workspace = true }  # Missing derive feature
```

### Rule 3: No Version Overrides

Never override workspace dependency versions in individual crates:

```toml
# ❌ Wrong: Causes conflicts
[dependencies]
tokio = "1.45"  # Different from workspace 1.48

# ✅ Correct: Use workspace version
[dependencies]
tokio = { workspace = true }
```

### Rule 4: Shared Library Independence

Shared libraries should remain portable:

```toml
# shared/rust-api/shared-api-lib/Cargo.toml
[dependencies]
# These can be specified independently for portability
# But dependency-manager validates they match canonical registry
axum = "0.8"
tokio = "1.48"

# When used in monorepo, these versions must match canonical registry
```

---

## Managing Dependencies

### Adding New Dependencies

**Process**:
1. **Evaluate necessity**: Do we really need this?
2. **Check alternatives**: Use existing dependencies if possible
3. **Research stability**: Check GitHub, reviews, update frequency
4. **Add to canonical registry**: Update this document (Tier 1, 2, or 3)
5. **Add to root workspace**: Add to `Cargo.toml [workspace.dependencies]`
6. **Use in crates**: Add to crate with `{ workspace = true }`
7. **Test**: Run `cargo test --workspace`
8. **Document**: Explain in this file why it was added

**Example**:

```toml
# .claude/DEPENDENCIES.md - Add to appropriate tier
| **my-new-lib** | `1.0` | `["feature"]` | Brief rationale for why needed |

# Cargo.toml - Add to [workspace.dependencies]
my-new-lib = { version = "1.0", features = ["feature"] }

# syntaxis-core/Cargo.toml (or relevant crate)
my-new-lib = { workspace = true }
```

### Updating Existing Dependencies

**Process**:
1. **Check for breaking changes**: Review release notes
2. **Test locally**: `cargo update -p my-lib && cargo test --workspace`
3. **Plan migration**: If breaking changes, create task
4. **Update DEPENDENCIES.md**: Document new version and changes
5. **Update Cargo.toml**: Change version in `[workspace.dependencies]`
6. **Run full validation**: `just check-all`

**Commands**:

```bash
# Check outdated dependencies
cargo outdated

# Update one dependency
cargo update -p tokio

# Update all dependencies
cargo update

# Check security vulnerabilities
cargo audit

# Fix security issues
cargo audit fix
```

### Removing Dependencies

**Process**:
1. **Find usages**: `cargo tree -d my-lib`
2. **Remove from all crates**: Update all `Cargo.toml` files
3. **Remove from workspace**: Delete from `[workspace.dependencies]`
4. **Update this document**: Remove from DEPENDENCIES.md
5. **Test**: `cargo test --workspace`

---

## Synchronization with dependency-manager

### Validation

The `dependency-manager` tool validates that all crates use canonical versions:

```bash
# Check if all dependencies match canonical registry
dependency-manager validate

# Show detailed mismatches
dependency-manager detect

# Show canonical registry
dependency-manager registry
```

### Automatic Synchronization

```bash
# Interactive: Review and approve each change
dependency-manager sync --interactive

# Batch: Update all mismatches
dependency-manager sync --batch
```

### Integration with Git

Pre-commit hook automatically validates:

```bash
# In .git/hooks/pre-commit
dependency-manager validate
```

---

## Testing After Dependency Changes

Always run full validation after updating dependencies:

```bash
# Clean rebuild
cargo clean
cargo check --workspace

# Test all crates
cargo test --workspace --lib
cargo test --workspace          # Including integration tests

# Lint and security
cargo clippy --all-targets
cargo audit

# Or use Justfile recipe
just check-all
```

---

## Security Considerations

### Regular Audits

```bash
# Check for known vulnerabilities
cargo audit

# Fix automatically (if available)
cargo audit fix

# Check specific crate
cargo audit -p syntaxis-core
```

### Dependency Trust

When adding new dependencies:

- ✅ Prefer well-maintained libraries
- ✅ Check update frequency (should be recent)
- ✅ Review GitHub repository health
- ✅ Check for security audits or certifications
- ❌ Avoid unmaintained or abandoned projects
- ❌ Avoid highly experimental or unproven libraries

### Feature Security

Some dependencies have security implications:

- `jsonwebtoken`: Must use `aws_lc_rs` for cryptography safety
- `rustls`: Modern TLS (prefer over OpenSSL)
- All crypto: Keep updated for latest security patches

---

## Performance Considerations

### Heavy Dependencies

- **leptos**: Adds 5-10 seconds to compile time (WASM build)
- **criterion**: Only use in `[dev-dependencies]`
- **ratatui beta**: Slightly longer compile than stable

### Optimizing Compile Time

Disable unnecessary features:

```toml
# Instead of:
[dependencies]
tokio = { version = "1.48", features = ["full"] }

# Could use minimal features:
[dependencies]
tokio = { version = "1.48", features = ["rt", "macros", "sync"] }
```

However, syntaxis uses `["full"]` for flexibility.

---

## Current Status

### Version Alignment

- ✅ Most dependencies aligned across workspace
- ⚠️ **jsonwebtoken**: 9.3 (root) vs 10.2 (syntaxis) - **BEING FIXED**
- ⚠️ **tokio**: "1" (flexible) vs "1.48" (pinned) - **BEING STANDARDIZED**

### Compliance

- ✅ No unsafe code (`#![forbid(unsafe_code)]`)
- ✅ All features coordinated
- ✅ No version conflicts in compiled output
- ⚠️ dependency-manager integration pending

---

## Maintenance Schedule

| Task | Frequency | Owner |
|------|-----------|-------|
| Check for vulnerabilities | Weekly | CI/CD |
| Review outdated versions | Monthly | Development Team |
| Security audit reports | Monthly | Development Team |
| Major version evaluations | Quarterly | Architecture Team |
| DEPENDENCIES.md updates | As needed | Committer |

---

## References

- **Cargo.toml**: Root workspace definition
- **PROJECT_RULES.md**: Architecture and module organization
- **CODE_STANDARDS.md**: Build and testing standards
- **dependency-manager**: External tool for validation
- **Cargo Book**: https://doc.rust-lang.org/cargo/

---

**Last Updated**: 2025-11-15
**Next Review**: 2025-12-15
