Releases: Coastal-Programs/notion-cli
v6.2.0 - Output flag & platform packages
What's New
--output/-oflag: All commands now accept--output <format>(or-o <format>) as an alternative to boolean flags. Valid formats:json,compact-json,csv,markdown,table,raw,pretty. Invalid values return a structured error envelope with suggestions.
Fixes
- Publish workflow: Platform package publish failures are no longer silently ignored. The workflow now reports explicit errors when packages fail to publish.
Upgrade
npm install -g @coastal-programs/notion-cli@latestSee CHANGELOG.md for full details.
v6.1.2 - Security fixes, bug fixes, OAuth credential rotation
What's Changed
Security
- Rotated OAuth client secret after credential leak in v6.1.1 binary
- Removed hardcoded OAuth client ID from Makefile — credentials now sourced exclusively from GitHub Secrets
- OAuth callback server binds to
127.0.0.1instead of0.0.0.0(prevents interception on shared machines) - Token exchange JSON body built with
json.Marshalinstead of string formatting (prevents injection)
Bug Fixes
- OAuth authorization URL now properly URL-encodes
redirect_uriparameter - JSON envelope version metadata now shows correct version (was stuck at
6.0.0) - User-Agent header now reports actual CLI version (was stuck at
1.0) db schemano longer panics on databases with no propertiesdoctorcommand now returns error envelope and non-zero exit code when checks failsearchdate filters validate format upfront instead of failing silentlysearch --page-sizevalidated against Notion's 100 limitdb query --sort-directionvalidates input with clear error for invalid valuesbatchalias changed frombtobato avoid collision withblock- Removed dead
--searchflag fromdb query - All error messages in
batchandconfigcommands now use structuredNotionCLIError whoami,sync,list,doctornow reject unexpected arguments
CI/CD
- Publish workflow now passes
NOTION_OAUTH_CLIENT_IDsecret to build steps
See CHANGELOG.md for full details.
v6.1.1 - Workflow & README fixes
Fixed
- Publish workflow now uploads binaries to GitHub releases correctly
- Publish workflow creates platform
bin/directories before copying - OAuth client secret now passed to build steps so
auth loginworks in published binaries - Go version bumped to 1.25 in CI to match go.mod
Changed
- README updated: OAuth login is the recommended setup method
- Added Authentication section with token precedence table
- Updated project structure, test counts, and troubleshooting docs
Full Changelog: v6.1.0...v6.1.1
v6.1.0 - OAuth Authentication
What's New
OAuth Authentication — Log in to Notion from the CLI without managing API tokens manually.
notion-cli auth login— Opens your browser, you authorize, and the token is saved automaticallynotion-cli auth logout— Clears stored OAuth tokensnotion-cli auth status— Shows current auth method and workspace info
Token Precedence
NOTION_TOKENenv var (CI/automation)- OAuth token from config (interactive login)
- Manual token from config file (fallback)
Other Improvements
doctorcommand now shows authentication method (oauth/env/token/none) with workspace name- Updated error messages to suggest
auth loginas the primary setup path - 6 new OAuth-specific error codes with actionable suggestions
- Build-time OAuth credential injection via Makefile ldflags
Technical Details
- New
internal/oauthpackage (stdlib only —net/http,crypto/rand) - CSRF protection via cryptographic state parameter
- Config file permissions remain 0600
- 14 new tests, 196 total passing
See CHANGELOG.md for full details.
v5.9.0 - Performance Optimizations & Critical Bug Fixes
🚀 Performance Optimizations
This release implements 5 major performance optimizations that provide 1.5-2x performance improvement for batch operations and repeated data access.
What's New
| Optimization | Best Case | Typical Case |
|---|---|---|
| Request Deduplication | 50% fewer API calls | 30% fewer calls |
| Parallel Operations | 80% faster bulk ops | 60% faster |
| Persistent Disk Cache | 60% better hit rate | 40% better |
| HTTP Keep-Alive | 20% latency reduction | 10% reduction |
| Response Compression | 70% bandwidth saved | 60% saved |
Phase 1: Request Deduplication
- Prevents duplicate concurrent API calls using promise memoization
- Automatically deduplicates identical requests in flight
- 30-50% reduction in duplicate API calls
- Files:
src/deduplication.ts(100% test coverage)
Phase 2: Parallel Operations
- Converts sequential operations to parallel execution
- Block deletion: 5 concurrent operations (configurable)
- Child fetching: 10 concurrent operations (configurable)
- 60-80% faster for bulk operations
- Files: Updated
src/notion.tswithbatchWithRetry
Phase 3: Persistent Disk Cache
- Cache persists across CLI invocations in
~/.notion-cli/cache/ - Atomic writes prevent corruption
- LRU eviction with 100MB default max size
- 40-60% improved cache hit rate
- Files:
src/utils/disk-cache.ts(95.38% test coverage)
Phase 4: HTTP Keep-Alive & Connection Pooling
- Reuses connections across requests
- Configurable pool size and keep-alive timeout
- 5-10% latency reduction
- Files:
src/http-agent.ts(100% test coverage)
Phase 5: Response Compression
- Automatic compression negotiation (gzip, deflate, brotli)
- 60-70% bandwidth reduction for JSON responses
- Zero configuration required
- Files: Updated
src/notion.tsfetch wrapper
🐛 Critical Bug Fixes
Three critical bugs identified during code review have been fixed:
1. Disk cache never returned data on first call
Problem: Fire-and-forget async pattern caused immediate cache miss.
Fix: Made cache.get() properly async with await for disk lookups.
2. HTTP agent imported but never used
Problem: Native fetch() doesn't support agent option.
Fix: Switched to undici Agent with dispatcher option.
3. Impossible error condition in parallel ops
Problem: Condition !result.success && result.data could never be true.
Fix: Changed to result.success && result.data && !result.data.success.
🧪 Testing
- 268 total tests (121 existing + 147 new)
- 90%+ coverage on all new code
- Zero test regressions
New Test Files
test/deduplication.test.ts- 37 tests (100% coverage)test/disk-cache.test.ts- 65 tests (95.38% coverage)test/http-agent.test.ts- 38 tests (100% coverage)test/cache-disk-integration.test.ts- 30 integration teststest/notion.test.ts- 59 integration teststest/parallel-operations.test.ts- 21 timing teststest/compression.test.ts- 18 tests
📦 Installation
npm install -g @coastal-programs/notion-cli@5.9.0🔧 Configuration
All features enabled by default. Configure via environment variables:
# Deduplication
NOTION_CLI_DEDUP_ENABLED=false
# Parallel Operations
NOTION_CLI_DELETE_CONCURRENCY=5
NOTION_CLI_CHILDREN_CONCURRENCY=10
# Disk Cache
NOTION_CLI_DISK_CACHE_ENABLED=false
NOTION_CLI_DISK_CACHE_MAX_SIZE=104857600
NOTION_CLI_DISK_CACHE_SYNC_INTERVAL=5000
# HTTP Keep-Alive
NOTION_CLI_HTTP_KEEP_ALIVE=false
NOTION_CLI_HTTP_KEEP_ALIVE_MS=60000
NOTION_CLI_HTTP_MAX_SOCKETS=50
NOTION_CLI_HTTP_MAX_FREE_SOCKETS=10
NOTION_CLI_HTTP_TIMEOUT=30000🔄 Migration
No breaking changes! All features work out of the box:
# Same commands, better performance
notion-cli db query <DB_ID>
# First run creates cache
notion-cli db query <DB_ID> # Fetches from API
# Second run uses disk cache
notion-cli db query <DB_ID> # Returns from cache (faster)📊 Dependencies
- Zero new production dependencies (uses Node.js built-ins only)
- All dependencies already in project
📝 Full Changelog
See CHANGELOG.md for complete details.
🤖 Built with Claude Code
v5.8.0 - Test Coverage & Codecov Improvements
🧪 What's New
This release significantly improves test coverage and Codecov integration.
✨ Test Coverage Improvements
- Comprehensive table-formatter tests: Added 75 unit tests achieving 100% line coverage and 96.42% branch coverage
- Covers all table rendering modes: CSV output, table formatting, sorting, filtering, and edge cases
- Includes real-world usage patterns from actual commands
- Tests follow project conventions with Mocha + Chai
🔧 Codecov Configuration
- Added
.codecov.ymlconfiguration file with coverage thresholds - Updated Codecov action to v4 (from v3)
- Fixed coverage file path to use
lcov.info - Configured PR comment layouts for better visibility
- Added flag definitions with carryforward enabled
📝 Documentation Updates
- Updated
docs/user-guides/envelope-testing.mdwith correct Codecov examples - Added explanatory comments to CI workflow for maintainability
- Improved documentation accuracy to match actual CI configuration
🐛 Bug Fixes
- Fixed table format tests for oclif v4 / cli-table3 compatibility
- Corrected coverage reporting paths in CI workflow
📊 Test Coverage Statistics
- table-formatter.ts: 100% lines | 96.42% branches | 100% functions
- 75 new unit tests added
- All CI checks passing ✅
🔗 Links
- Pull Request: #67
- Codecov Report: https://app.codecov.io/gh/Coastal-Programs/notion-cli/pull/67
🤖 Generated with Claude Code
v5.7.0 - Update Notifications & Production Polish
🎯 What's New
This release brings automatic update notifications, production-grade security improvements, and automated npm publishing.
🔔 Update Notifications
- Checks npm once per day for new versions
- Non-intrusive yellow notification box when updates available
- Respects
NO_UPDATE_NOTIFIERenvironment variable - Automatic in CI environments and test suites
- 24-hour cache to minimize npm registry calls
- Users stay in full control - updates never automatic
🔒 Security Improvements
- Token masking - Console output now masks tokens to prevent leakage
- Format:
secret_***...***abc(prefix + last 3 chars only) - Protects against accidental exposure in screen recordings/demos
- Secure handling for unknown token prefixes
- Format:
- Token length validation - 20 character minimum catches incomplete copies
- 11 comprehensive unit tests for maskToken() security function
✨ UX Enhancements
- Token input -
notion-cli initaccepts tokens with OR without "secret_" prefix - Auto-prepending - Adds "secret_" automatically if user pastes just token value
- Deferred notifications - Updates shown after command completes (industry standard)
- DEBUG mode - Set
DEBUG=1to see verbose update check errors
🚀 Developer Experience
- Automated npm publishing via GitHub Actions
- Publishes automatically when GitHub Release is created
- Runs tests, builds, and verifies before publishing
- Prevents duplicate versions
- Supply chain security with provenance attestations
📦 Dependencies
- Added:
update-notifier(industry-standard, used by npm/Yarn/1000+ CLIs)
📊 Quality Metrics
- Production excellence: 98/100
- All tests passing
- Zero security vulnerabilities in production dependencies
- Comprehensive documentation
🔗 Related PRs
- #63 - Update notifications and UX improvements
- #64 - Production polish (tests, docs, security fixes)
Install/Update:
npm install -g @coastal-programs/notion-cli@latest
# or
npm update -g @coastal-programs/notion-cliDisable Update Notifications:
export NO_UPDATE_NOTIFIER=1🤖 Generated with Claude Code