name: update-libsignal description: Update libsignal native library version. Use when checking for updates, upgrading libsignal, bumping version, or updating native dependencies.
Update libsignal Version
Guide for updating the libsignal native library version in this project.
Review Automated PR (Most Common)
When the CI creates an automated PR for libsignal update, follow these steps:
Step 1: Analyze Release Notes
# Fetch and read release notes
gh api repos/signalapp/libsignal/releases/tags/vX.Y.Z --jq '.body'
Look for:
- Breaking changes (API removals, signature changes)
- New features (new APIs exposed)
- Security fixes
Step 2: Check Why Codegen Failed (if applicable)
# Check if Rust code compiles
make rust-check
Common issues:
- Removed traits (e.g.,
OrdforPublicKey) - Changed function signatures
- Renamed types
Step 3: Fix Rust Code (if needed)
If make rust-check fails, fix the errors in rust/src/api/:
- Update code to match new libsignal API
- Add workarounds for removed functionality
Step 4: Regenerate FRB Bindings
make codegen
Step 5: Run Tests
make test
Step 6: Run Analysis
make analyze
Step 7: Update CHANGELOG.md
Verify AI-generated entry is accurate. Update if needed:
- Fix incorrect descriptions
- Add details about breaking changes and workarounds
- Ensure
libsignal_frbversion is mentioned in Highlights
Step 8: Bump libsignal_frb Version
Edit rust/Cargo.toml:
version = "X.Y.Z" # Bump patch for deps, minor for new features
Update CHANGELOG.md Highlights:
- **libsignal vX.Y.Z** — description
- **libsignal_frb vX.Y.Z** — Rust FFI bindings
Step 9: Sync Cargo.lock
make rust-check
Step 10: Commit Changes
git add rust/Cargo.toml rust/Cargo.lock rust/src/api/ lib/src/rust/ CHANGELOG.md
git commit -m "fix: adapt for libsignal vX.Y.Z breaking changes"
Checklist Summary
- Read release notes for breaking changes
- Fix Rust compilation errors (if any)
-
make codegen— regenerate FRB bindings -
make test— all tests pass -
make analyze— no issues - CHANGELOG.md — accurate description
-
rust/Cargo.toml— bumplibsignal_frbversion -
make rust-check— sync Cargo.lock - Commit all changes
Quick Update (Automatic)
# Check for updates
make check-new-libsignal-version
# Check and apply updates automatically
make check-new-libsignal-version ARGS="--update"
This will:
- Check GitHub for latest libsignal release
- Update
rust/Cargo.tomlwith new libsignal dependency tags - Show next steps for completing the update
Manual Update Process
Step 1: Check Current Version
Check rust/Cargo.toml:
[dependencies]
libsignal-protocol = { git = "https://github.com/signalapp/libsignal", tag = "v0.87.1" }
Step 2: Update Version
Edit rust/Cargo.toml and update the tag for all three libsignal crates:
libsignal-protocollibsignal-coresignal-crypto
Step 3: Update Cargo.lock
make rust-update
Step 4: Regenerate FRB Bindings (if API changed)
make codegen
Step 5: Run Tests
make test
Step 6: Commit Changes
git add rust/Cargo.toml rust/Cargo.lock
git commit -m "chore(deps): update libsignal to vX.Y.Z"
git push
Check Options
# Just check (no changes)
make check-new-libsignal-version
# Check and update
make check-new-libsignal-version ARGS="--update"
# Update to specific version
make check-new-libsignal-version ARGS="--update --version v0.87.0"
# Force update even if versions match
make check-new-libsignal-version ARGS="--update --force"
# JSON output for CI
make check-new-libsignal-version ARGS="--json"
Version Locations
Files automatically updated by make check-new-libsignal-version ARGS="--update":
| File | What | Description |
|---|---|---|
rust/Cargo.toml |
libsignal-* tags | Native library dependency version |
README.md |
Badge | Version badge in header |
CLAUDE.md |
Example | Code example in documentation |
Files that need manual update:
| File | What | Description |
|---|---|---|
rust/Cargo.toml |
version |
Rust crate version (bump patch for deps update) |
rust/Cargo.lock |
Dependencies | Run make rust-update after changing Cargo.toml |
CHANGELOG.md |
Entry | Document the libsignal version change |
Breaking Changes to Watch For
API Changes
- New functions in libsignal-protocol crate
- Removed functions
- Changed function signatures
- New struct fields
Behavior Changes
- Protocol version updates
- New cryptographic algorithms (e.g., Kyber/ML-KEM)
- Changed error types
Binding Regeneration
After updating, if API changed, run:
make codegen
Then check for:
- Compilation errors in
rust/src/api/files - Missing functions that your code depends on
- Changed function signatures
Troubleshooting
"No updates available"
- You're already on the latest version
- Check https://github.com/signalapp/libsignal/releases
"Cargo build failed"
- New libsignal version may have breaking API changes
- Check libsignal release notes
- May need to update Rust wrapper code in
rust/src/api/
Tests fail after update
- API may have changed
- Protocol version may have changed
- Review libsignal changelog for breaking changes

