Skip to content

Releases: ma2za/python-substack

python-substack 0.1.27

Choose a tag to compare

@ma2za ma2za released this 21 Jul 11:54

python-substack 0.1.27

Version 0.1.27 turns a Markdown file into a rich Substack draft through the
main CLI and strengthens package validation around that workflow.

Highlights

  • Create an unpublished draft with substack drafts create post.md.
  • Set title, subtitle, audience, comment permissions, SEO metadata, slug,
    section, and repeatable tags from the unified CLI.
  • Render inline and block LaTeX, superscript, subscript, pull quotes, and
    callouts from Markdown.
  • Handle both known subscriber-count response formats.
  • Restore draft scheduling and unscheduling against Substack's current endpoint.
  • Retry rate-limited reads and deletes with bounded backoff while avoiding unsafe POST retries.
  • Keep live Substack tests opt-in while validating offline tests on Python 3.10
    through 3.14 and clean wheel installations on Python 3.10 and 3.14.

Existing Python APIs, MCP tools, environment variables, standalone console
commands, defaults, and CLI output contracts remain available.

Quick examples

substack drafts create post.md
substack --json drafts create post.md --tag python --tag substack
substack drafts publish 12345 --no-send

Creation never publishes, schedules, sends, or deletes a draft. Publishing
remains a separate command with the existing confirmation safeguards. If tag
assignment fails after Substack creates the draft, the draft may remain in the
publication and is not deleted automatically.

Observable Markdown changes

Text matching the new $...$, $$...$$, ^...^, ~...~, :::pullquote,
or :::callout syntax now produces corresponding Substack document nodes.
Ordinary currency amounts remain text, and ~~...~~ remains strikethrough.

Announcement copy

python-substack 0.1.27 can now turn a Markdown file directly into a rich,
unpublished Substack draft with substack drafts create post.md. The release
adds LaTeX, superscript, subscript, pull quotes, and callouts, while strengthening
clean-install and release validation. Install it with
pip install -U python-substack.

v0.1.26

Choose a tag to compare

@ma2za ma2za released this 17 Jul 14:05

python-substack 0.1.26

Version 0.1.26 adds a unified command-line interface for day-to-day Substack operations.

Highlights

  • Check authentication, publication selection, and subscriber count with substack status.
  • List publications and inspect drafts without writing Python code.
  • Schedule, unschedule, publish, and delete drafts with explicit safety controls.
  • Use --json for stable machine-readable output in scripts and automation.
  • Override the selected publication per command with --publication-url.
  • Run on Python 3.10 through 3.14 with pull-request CI and validated release artifacts.

Existing Python APIs, MCP tools, environment variables, and console commands remain available.

Quick examples

substack status
substack drafts list
substack --json drafts get 12345
substack drafts schedule 12345 --at 2026-08-01T09:00:00+03:00
substack drafts publish 12345 --no-send

Announcement copy

python-substack 0.1.26 is now a practical Substack operations CLI as well as a Python SDK. The new substack command can inspect publications and drafts, manage schedules, publish without sending email, and safely delete drafts. It also provides stable JSON output for automation. Install it with pip install -U python-substack.

v0.1.25

Choose a tag to compare

@ma2za ma2za released this 08 Jul 15:13

0.1.25

Added

  • Markdown-first draft helper: Api.create_draft_from_markdown(...).
  • CLI commands: substack-auth-check, substack-publish-markdown, substack-publish-yaml, substack-mcp.
  • Optional MCP extra: python-substack[mcp].
  • .env.example, CHANGELOG.md, funding metadata, and GitHub issue templates.

Fixed

  • Include substack_mcp in packaged distributions.
  • Fix examples/publish_post.py --publish so the flag publishes.
  • Correct MCP documentation to use substack_mcp.mcp_server.

Improved

  • Reworked README around Markdown, cookie auth, CLI usage, and MCP setup.
  • Added PyPI classifiers, project links, and focused tests.

v0.1.24

Choose a tag to compare

@ma2za ma2za released this 02 Jul 13:54

Release 0.1.24\n\n- Render from_markdown via markdown-it-py.\n- Add broader Markdown round-trip coverage for footnotes, lists, images, captions, and formatting.\n- Keep live Substack API tests opt-in and offline-safe by default.

v0.1.23

Choose a tag to compare

@ma2za ma2za released this 27 Jun 09:26
0fc190b

What's Changed

New Contributors

Full Changelog: v0.1.22...v0.1.23

v0.1.22

Choose a tag to compare

@ma2za ma2za released this 02 May 09:44
fa6f5f2

What's Changed

New Contributors

Full Changelog: v0.1.21...v0.1.22

v0.1.21

Choose a tag to compare

@ma2za ma2za released this 25 Mar 17:41

Full Changelog: v0.1.20...v0.1.21

v0.1.20

Choose a tag to compare

@ma2za ma2za released this 25 Mar 15:40

Full Changelog: v0.1.19...v0.1.20

v0.1.19

Choose a tag to compare

@ma2za ma2za released this 25 Mar 15:25

What's Changed

  • feat: add blockquote support to from_markdown() and Post.blockquote() by @ASRagab in #40

Full Changelog: v0.1.18...v0.1.19

v0.1.18

Choose a tag to compare

@ma2za ma2za released this 07 Mar 16:19

What's Changed

  • Bump urllib3 from 2.6.2 to 2.6.3 by @dependabot[bot] in #37
  • fix: parse_inline drops links at position 0 and marks() loses href by @ASRagab in #36
  • Render bullet lists as proper ProseMirror nodes in from_markdown() by @yf-chau in #35

New Contributors

Full Changelog: v0.1.17...v0.1.18