Skip to content

Releases: nesszer/linear-cli

v0.3.7 — Competitive Features

Choose a tag to compare

@Finesssee Finesssee released this 18 Feb 11:29

What's New

OAuth 2.0 Hardening

  • Auth state hardening, double-check locking for token refresh

Custom Views CRUD

  • views create, views update, views delete commands

Webhooks CRUD + Live Listener

  • Full webhook management: create, update, delete, rotate-secret
  • webhooks listen with HMAC-SHA256 signature verification

Power User Features

  • whoami alias for users me
  • api query/mutate for raw GraphQL access
  • --since / --newer-than time filters on issues list
  • --mine flag for issues assigned to current user
  • --label filter for issues list
  • --group-by (state/priority/assignee/project) grouping
  • --count-only flag for issues and projects
  • Milestones full CRUD (list, get, create, update, delete)

Issue Enhancements

  • --history flag for activity timeline
  • --comments flag for inline comment display
  • open command to open issue in browser
  • Sub-issues display in issue get
  • Markdown-stripped descriptions
  • Enhanced interactive create wizard (labels, due date, estimate)
  • comment, link, assign, move, transfer, close/done, archive/unarchive

Other

  • Teams members command
  • Users get command
  • Cycles get command
  • Labels update command
  • Projects members and add-labels commands
  • Auto-pager through less on Unix (--no-pager to disable)
  • 8MB stack size fix for Windows debug builds
  • 372 tests (245 unit + 127 integration)

v0.3.6

Choose a tag to compare

@Finesssee Finesssee released this 16 Feb 13:11

v0.3.6 — Bug Fix

Fix

  • Fixed runtime panic when using subcommands with --color flag (documents create, projects create, labels create). The global --color arg (enum type) collided with subcommand --color args (hex string type), causing a clap TypeId downcast mismatch. Renamed global flag to --color-mode.

Full Changelog: v0.3.5...v0.3.6

v0.3.5

Choose a tag to compare

@Finesssee Finesssee released this 16 Feb 12:13

v0.3.5 — Safety & CRUD Expansion

Safety Hardening

  • Replace bare .unwrap() with .expect() in interactive mode menu selection

New Subcommands

  • notifications archive — Archive a single notification
  • notifications archive-all — Batch archive all notifications (bounded concurrency)
  • cycles create — Create a new cycle (--team, --name, --description, --starts-at, --ends-at)
  • cycles update — Update an existing cycle (--name, --description, --starts-at, --ends-at, --dry-run)

Tests

  • 8 new integration tests (triage, notification archive, cycle create/update)
  • 233 total tests (167 unit + 66 integration), 0 warnings

Docs

  • README: added cycles and notifications examples
  • Updated help text for cycles and notifications commands

Full Changelog: v0.3.4...v0.3.5

v0.3.4 - Feature Expansion & Hardening

Choose a tag to compare

@Finesssee Finesssee released this 16 Feb 04:00

What's New

CRUD Expansion (5 new subcommands)

  • roadmaps create / roadmaps update — Full mutation support with --dry-run
  • initiatives create / initiatives update — With --status and --dry-run
  • documents delete — With --force and confirmation prompt

Watch Expansion

  • watch project <ID> — Poll project state and progress changes
  • watch team <KEY> — Poll team with active cycle info

Error Hardening

  • Replaced unwrap() calls in export paths with safe alternatives
  • Moved regex initialization to OnceLock pattern

Documentation

  • Improved --filter help text: dot-notation, ~= operator, case-insensitivity, AND logic
  • Updated help examples for roadmaps, initiatives, documents, and watch commands

Test Coverage

  • 225 total tests (167 unit + 58 integration), up from 213
  • 12 new integration tests for new subcommands
  • 0 warnings

Install

cargo install linear-cli

v0.3.3 - Typed API Models & Test Coverage

Choose a tag to compare

@Finesssee Finesssee released this 16 Feb 03:33

Typed API Models & Test Coverage

Completes typed API model adoption across all 13 command handlers and significantly expands test coverage.

Typed API Model Adoption (7 handlers)

All command handlers now use typed structs from types.rs for display paths instead of raw serde_json::Value indexing:

  • cycles.rsCycle struct for list and current cycle display
  • notifications.rsNotification struct with IssueRef for notification list
  • time.rsTimeEntry struct (added duration field) for time entry list
  • relations.rsIssueRelation and IssueRef (with new state field) for parent/children/relations display
  • favorites.rsFavorite struct for remove lookup
  • roadmaps.rsRoadmap struct for list display
  • initiatives.rsInitiative struct (added status/sort_order fields) for list display

Previously completed (v0.3.1): teams, users, projects, labels, comments, documents

Type System Enhancements

  • IssueRef gains state: Option<WorkflowState> for relations display
  • Initiative gains status: Option<String> and sort_order: Option<f64>
  • TimeEntry gains duration: Option<i64> for minutes-based time tracking

Test Coverage Expansion

  • 41 new unit tests (126 → 167): 26 type deserialization tests + 11 notification type formatter tests + 4 relation type tests
  • 14 new integration tests (32 → 46): help text and alias tests for time, relations, favorites, roadmaps, initiatives, documents, context
  • Total: 213 tests, all passing, 0 warnings

Stats

  • 9 files changed, +846 lines

v0.3.2 - Performance Optimizations

Choose a tag to compare

@Finesssee Finesssee released this 16 Feb 03:17

Performance Optimizations

13 performance improvements across caching, API efficiency, and data processing:

Cache Infrastructure

  • Per-key cache timestamps — individual entries expire independently instead of whole-file TTL
  • TTL on read path — cache reads now respect configured TTL, not just writes
  • Memoized config/cache pathsOnceLock avoids repeated filesystem lookups

API & Network

  • Streaming downloads — large file downloads stream directly to disk/stdout instead of buffering in memory
  • Pagination variable optimization — immutable base variables with per-page construction eliminates clone overhead
  • Removed unused fetch_bytes — dead code cleanup after streaming adoption

Command-Level Optimizations

  • Bulk state cache — resolves team:state pairs once per unique combo, not per-issue
  • Parallel comment fetchingbuffer_unordered(10) for concurrent multi-issue comment retrieval
  • Trimmed notification queries — removed unused fields from notification list GraphQL query
  • print_json_owned — takes Value ownership to eliminate large payload cloning
  • O(n) sync comparisonHashMap-based matching replaces nested O(n²) iteration
  • Round-trip reduction — cycles/statuses use team cache instead of extra API calls
  • Projects & labels caching — list results cached with mutation-triggered invalidation

Stats

  • 30 files changed, 547 insertions, 356 deletions
  • 126 unit tests + 32 integration tests passing
  • 0 warnings

v0.3.1 - Bug Fixes, Reliability & Typed API Models

Choose a tag to compare

@Finesssee Finesssee released this 16 Feb 02:36

v0.3.1 - Bug Fixes, Reliability & Typed API Models

This release includes 14 improvements across correctness, reliability, consistency, and code quality.

Bug Fixes (6)

  • Time tracking error propagation - Err(_) branches now bail with proper errors instead of silently printing success messages
  • Identifier resolution for teams/projects - get commands now accept names and keys, not just UUIDs (via resolve_team_id/resolve_project_id)
  • State name resolution - --state "In Progress" now works in issue create/update (via resolve_state_id)
  • Pagination for notifications - Replaced hardcoded first: 100 with proper paginate_nodes(all: true) for count and mark-all-as-read
  • Cache projects type - Added missing "projects" => CacheType::Projects to cache clear
  • Credential profile switching - set_api_key() now uses the actual workspace name instead of hardcoded "default"

Reliability (3)

  • Bounded concurrency - Replaced unbounded join_all with buffer_unordered(10) in all bulk operations and notification mark-all
  • Typed ErrorKind enum - Replaced raw u8 exit codes with ErrorKind enum (General, NotFound, Auth, RateLimited)
  • Stderr diagnostics - Added OnceLock<bool> quiet mode; diagnostic eprintln! calls now respect --quiet

Consistency (2)

  • CLI naming - Binary name in clap now matches actual binary (linear-cli)
  • Upload streaming - File downloads now stream via fetch_to_writer() instead of buffering entire files in memory

Quality (3)

  • Dead code suppression - Added #[allow(dead_code)] on mod types for gradual adoption
  • Test coverage - Added 51 new tests (94→126 unit, 13→32 integration), covering config, pagination, output, CLI aliases, and help text
  • Typed API response models - Adopted typed structs in 6 command handlers (teams, users, projects, labels, comments, documents), replacing raw Value indexing with from_value::<T>() deserialization. Added Serialize to all types and missing fields.

Stats

  • 126 unit tests, 32 integration tests, 0 warnings
  • 7 files changed for typed model adoption (+171, -111)

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 05 Feb 14:32

Full Changelog: v0.2.9...v0.3.0

v0.2.9

Choose a tag to compare

@github-actions github-actions released this 05 Feb 12:51

Full Changelog: v0.2.8...v0.2.9

v0.2.8

Choose a tag to compare

@github-actions github-actions released this 05 Feb 11:06

Full Changelog: v0.2.7...v0.2.8