Releases: nesszer/linear-cli
Releases · nesszer/linear-cli
Release list
v0.2.7 - Secure API Key Storage
New Features
Secure API Key Storage (Optional Feature)
Store your Linear API keys in your operating system's secure credential storage instead of plaintext config files:
- macOS: Keychain
- Windows: Credential Manager
- Linux: Secret Service (requires D-Bus and a keyring daemon)
Usage
Enable the feature when building:
cargo install linear-cli --features secure-storageStore a key securely:
linear-cli auth login --secureMigrate existing keys from config to keyring:
linear-cli auth migrateCheck storage status:
linear-cli auth statusPriority Order
API keys are resolved in this order:
LINEAR_API_KEYenvironment variable- OS keyring (if
secure-storagefeature enabled) - Config file (~/.config/linear-cli/config.toml)
Notes
- Feature is opt-in to avoid adding keyring dependencies for users who don't need it
- Graceful fallback to config file if keyring is unavailable
- Profile-aware: each workspace has its own keyring entry
auth logoutremoves keys from both keyring and config
v0.2.6 - Code Quality and Performance
Refactoring
- Generic ID resolver: Extracted common logic from
resolve_team_id,resolve_user_id, andresolve_label_idinto a reusableresolve_idhelper withResolverConfig. Reduces code by ~100 lines while maintaining the same functionality.
Performance
- Streaming NDJSON output:
linear-cli i list --output ndjsonnow streams results as they arrive instead of buffering all results in memory. This is memory-efficient for large result sets (1000+ issues).
Full Changelog
v0.2.5 - Large Organization Support
Fixes
- Pagination for ID resolution:
resolve_team_id,resolve_user_id, andresolve_label_idnow paginate through all results instead of using a hardcodedfirst: 500limit. This fixes "not found" errors for organizations with more than 500 teams, users, or labels.
Full Changelog
v0.2.4 - Security and Reliability
Security
- Secure file permissions: Config and cache files are now created with
0600permissions on Unix systems, preventing other users from reading API keys
Fixes
- Concurrency limit: Batch issue fetching now limits concurrent requests to 10, preventing socket exhaustion and rate limiting when fetching many issues
- Consolidated error handling: HTTP error mapping logic extracted into helper function, reducing code duplication
Refactoring
- Simplified jitter calculation using cleaner range syntax
Full Changelog
v0.2.3 - Reliability and Performance
Features
HTTP Client Hardening
- HTTP timeouts: 30s request timeout, 10s connect timeout
- User-Agent header:
linear-cli/{version}for better debugging - Mutation retries: Automatic retry with exponential backoff (Linear API is idempotent)
- Jittered backoff: ±25% jitter prevents thundering herd on rate limits
Cache Improvements
- Profile-scoped cache: Each workspace profile has isolated cache
- Atomic writes: Write to temp file, sync, rename - prevents corruption
Output Quality
- Numeric sorting: Numbers sort correctly (10 > 9, not "10" < "9")
- Date sorting: RFC3339 dates sort by timestamp
- RFC 4180 CSV: Proper escaping of quotes, commas, newlines
Performance
- Streaming pagination: Memory-efficient exports for 1000+ issues
Developer Experience
- Typed structs:
src/types.rswith serde structs for gradual typed API adoption
Dependencies Added
rand = "0.8"- jittered exponential backoffcsv = "1"- RFC 4180 compliant CSV exports
Full Changelog
v0.2.2
v0.2.1
What's Changed
Bug Fixes
- fix(error): Show GraphQL error details in CLI output - Previously errors just showed "GraphQL error", now displays actual error messages (#7)
- feat(issues): Add
--labels,--due,--estimateflags to update command for feature parity with create (#7)
CI/CD
- ci: Add automated crates.io publishing to release workflow (#8)
Features
- Add date parsing utilities (today, tomorrow, +3d, +1w, YYYY-MM-DD)
- Add new command modules: export, favorites, history, initiatives, metrics, relations, roadmaps, triage, watch
Fixes
- Closes #7 - Unable to add multiple labels via CLI
- Closes #8 - Crates.io now updated automatically on release
Full Changelog: v0.2.0...v0.2.1
v0.2.0
What's New in v0.2.0
This is a major CLI protocol upgrade with authentication, pagination, and enhanced output controls.
Authentication & Profiles
auth login: Interactive API key setup with validationauth logout: Remove stored credentialsauth status: Show current authentication statedoctor: Diagnostic command for troubleshooting setup- Profile-aware config: Support multiple Linear workspaces
Pagination Controls
--limit N: Limit results to N items--after CURSOR: Fetch results after cursor--before CURSOR: Fetch results before cursor--page-size N: Batch size for fetching--all: Exhaustive fetching (all pages)
Cache Controls
--cache-ttl SECONDS: Set cache TTL--no-cache: Bypass cache entirely
Output Enhancements
- NDJSON output:
--ndjsonfor streaming/newline-delimited JSON - Template output:
--template "{{.identifier}}: {{.title}}" --fail-on-empty: Exit non-zero if no results (for scripting)- Schema version:
--schemaprints output schema version - Improved error JSON: Includes
detailsandretry_afterfields
Filter Plumbing
- Filters integrated across all list/search commands
- Consistent filter syntax for issues, projects, documents, etc.
New Files
| File | Purpose |
|---|---|
src/pagination.rs |
Pagination utilities |
src/commands/auth.rs |
Authentication commands |
src/commands/doctor.rs |
Diagnostic command |
docs/json/schema.json |
Versioned output schema |
Documentation
- Updated README with auth, pagination, and filter examples
- Added JSON schema documentation
- Updated error.json format
Full Changelog: v0.1.9...v0.2.0
v0.1.9
What's New
Agent Harness Features
linear agentcommand for quick agent guidance and examplescontext --id-onlywith JSON output support- Consistent JSON output with
--compact,--fields,--sort,--order - Structured JSON errors with
detailsandretry_afterfields LINEAR_CLI_OUTPUTenv var for default JSON mode +--api-keyoverride--dataJSON input for issue create/update from stdin--dry-runfor issue/project/document updates- JSON sample files in
docs/json/for agent developers
CLI UX Improvements
- Color control:
--color/--no-colorflags - Table width:
--width Nto limit column widths - Disable truncation:
--no-truncatefor full content common/taskscommand for quick CLI examples- Interactive mode:
--teampreselect and respects width
Batch & Stdin Support
- Multi-ID support: issues, projects, teams, documents, statuses, comments
- Stdin input via
-for IDs and content - Batch JSON outputs for multi-get operations
Table Sorting
--sort/--orderhonored for major list commands- Sync summary can sort by name, path, or type
Documentation
- Updated README, AGENTS.md, CLAUDE.md, docs/examples.md
- Added
docs/json/with sample JSON outputs
Full Changelog: v0.1.8...v0.1.9
v0.1.8
What's New
Agent-Focused Output & Errors
- Structured JSON errors with
error,code,message, anddetailsfields - Rate-limit metadata with
retry_afterfor 429 responses - JSON formatting utilities:
--compact,--fields,--sort,--order - Environment variable:
LINEAR_CLI_OUTPUT=jsonfor default JSON mode - Per-invocation API key:
--api-key KEYto override credentials
CLI UX Controls
- Color control:
--color/--no-colorflags - Table width:
--width Nto limit column widths - Disable truncation:
--no-truncatefor full content - Team preselect:
--teamflag for interactive command
Batch & IO Improvements
- Multiple IDs:
projects get,teams getaccept multiple IDs - Stdin input:
-for descriptions/IDs from pipe - JSON data input:
--data -for issue create/update from stdin
Help & Common Tasks
commoncommand (alias:tasks) with quick examples- Top-level help shows common flags
Documentation
- Updated AGENTS.md, CLAUDE.md, docs/ai-agents.md, docs/examples.md
- Refreshed README.md with new options and cleaned comparison table
Fixes
- Resolved clippy warnings for CI
- Fixed stray Unicode glyphs in comments, sync, git modules
Full Changelog: v0.1.7...v0.1.8