v0.7.0 — round out API coverage
This release closes every Tier 1 + Tier 2 item from the post-v0.6 roadmap (#41): 6 new commands (plus 3 aliases), zero breaking changes. Every new command has been smoke-tested end-to-end against a real workspace.
✨ Highlights
Markdown I/O becomes first-class. Notion's 2025 server-side markdown endpoints are now wrapped natively — no more client-side reconstruction. (#37)
notion page markdown <page-id> > page.md # server-rendered, handles toggles / columns / databases
notion page markdown <page-id> --out page.md
cat new.md | notion page set-markdown <id> --file -
notion page set-markdown <id> --append --text "$(date): status update"
notion page set-markdown <id> --after "Status...pending" --text "Now: shipped."Server-side means the block append 100-children batching (#21) does not apply — this is now the cleanest way to push long documents.
No more silent truncation of relation / rollup properties. (#38) The previously-undocumented 25-item cap on page view / page props is fixed by a dedicated paginated endpoint wrapper:
notion page property <page-id> <property-id>
notion page property <page-id> --name "References" # resolve by human name
notion page property <page-id> --name "References" --format json | jq '.results | length'
# → 40 (was silently 25 via page view)Comments can now be edited and deleted. (#33)
notion comment update <comment-id> --text "fixed typo"
notion comment update <comment-id> --text "with @mention" --mention-user <uid>
notion comment delete <comment-id> # single
notion comment delete <id1> <id2> <id3> # variadic, like 'block delete'block update catches up to append/insert. (#36)
notion block update <id> --text "See **[docs](https://x.com)**" --markdown
notion block update <id> --file patch.md # 'ts'/'sh'/'yml' aliases applied
# type mismatch fails fast with a clear message rather than corrupting the blockpage archive / page trash aliases. (#35) delete still works, but the canonical name is now archive, matching Notion's own UI terminology. Success message now tells you how to undo.
file get <upload-id>. (#34) Check status / size / content-type / expiry of a single upload by id — useful when chasing down already-uploaded assets or polling an async upload.
🧮 Coverage stats
| Notion REST resource | v0.6.0 | v0.7.0 |
|---|---|---|
| Blocks | 5/5 | 5/5 |
| Pages | 4/7 | 7/7 ✓ |
| Comments | 3/5 | 5/5 ✓ |
| File uploads | 3/5 | 4/5 |
| Users / Search | 4/4 | 4/4 |
Remaining gaps tracked in #41: data sources migration (#39) ships with the next major, views API (#40) parked until someone asks.
📦 Upgrade
npm install -g @4ier/notion-cli # → 0.7.0
brew upgrade 4ier/tap/notion-cli # → 0.7.0
# or grab a binary from the assets below🔗 Issues closed
#33 · #34 · #35 · #36 · #37 · #38
🧪 Validation
Every new command was smoke-tested against the live Notion API. Full go test ./... is green across 5 packages; unit tests cover pagination cursor walks (httptest), markdown body builders for all 4 set-markdown modes, code-fence language normalization in block update, and mutual-exclusion / error-path edges.
Previous release: v0.6.0