π Schlussel
Secure OAuth 2.0 for CLI applications - Written in Rust, works everywhere π¦
OAuth authentication made simple for command-line tools. No more copying tokens or managing credentials manually!
β¨ Features
π Multiple OAuth Flows
- Device Code Flow (perfect for CLI!)
- Authorization Code Flow with PKCE
- Automatic browser handling
π Secure by Default
- OS credential manager integration (Keychain/Credential Manager)
- Cross-process token refresh locking
- Automatic token refresh
β‘ Developer Friendly
- Provider presets (GitHub, Google, Microsoft, GitLab, Tuist)
- One-line configuration
- Automatic expiration handling
π Cross-Platform
- Linux, macOS, Windows
- x86_64 and ARM64
π Quick Start
Installation
Rust:
[]
= "0.1"
Swift Package Manager:
.binaryTarget(
name: "Schlussel",
url: "https://github.com/tuist/schlussel/releases/download/0.5.0/Schlussel.xcframework.zip",
checksum: "36c002746caa5c1af8c6edea751ad971c5b67940775dba398308207dc981e253"
)
Authenticate with GitHub (3 lines!)
use *;
use Arc;
let storage = new;
let config = github;
let client = new;
// That's it! Opens browser, handles OAuth, returns token
let token = client.authorize_device.unwrap;
π Documentation
π Full Documentation
Quick links:
- π Quick Start Guide
- π Provider Presets - GitHub, Google, Microsoft, etc.
- πΎ Storage Options - Secure, File, or Memory
- π Token Refresh - Automatic refresh strategies
- π± Swift/iOS Integration - XCFramework usage
π‘ Why Schlussel?
Before Schlussel π«
// 50+ lines of boilerplate
// Manual token expiration checking
// Race conditions with multiple processes
// Plaintext tokens in files
// Complex OAuth flow management
With Schlussel π
// 3 lines total
let storage = new;
let config = github;
let token = new.authorize_device.unwrap;
π― Use Cases
β
CLI tools that need GitHub/GitLab API access
β
Build tools that integrate with cloud services
β
Developer tools with OAuth authentication
β
Cross-platform desktop applications
β
CI/CD tools with secure credential management
ποΈ Architecture
βββββββββββββββββββ
β Your CLI App β
ββββββββββ¬βββββββββ
β
ββββββΌββββββ
β Schlusselβ
ββββββ¬ββββββ
β
ββββββΌβββββββββββββββββββββββββ
β Storage Backend β
βββββββββββββββββββββββββββββββ€
β SecureStorage (OS Keyring) β β Recommended
β FileStorage (JSON files) β
β MemoryStorage (In-memory) β
βββββββββββββββββββββββββββββββ
π Highlights
π Secure by Default
Tokens stored in OS credential manager (Keychain on macOS, Credential Manager on Windows, libsecret on Linux)
π¨ Provider Presets
github // GitHub
google // Google
microsoft // Microsoft
gitlab // GitLab
tuist // Tuist
β‘ Automatic Token Refresh
let refresher = new;
let token = refresher.get_valid_token.unwrap;
// Auto-refreshes if expired!
π Cross-Process Safe
Multiple processes can safely refresh the same token without race conditions
π¦ Examples
Check out examples/ for working code:
- π GitHub Device Flow
- π GitHub with Callback
- π Token Refresh
- β‘ Automatic Refresh
- π Secure Storage
- π Cross-Process Refresh
π€ Contributing
Contributions welcome! Please ensure:
- β
Tests pass:
cargo test - β
Code formatted:
cargo fmt - β
Clippy clean:
cargo clippy
π License
See LICENSE for details.
π Links
- π Documentation
- π Issues
- π Changelog
- π API Docs
Made with π by the Tuist team