Skip to main content

pulumi-journaling

An independent fork of Pulumi, maintained by E Brake ebrake123@icloud.com, with hardened, recoverable journaling for every DIY state storage backend: local files, Amazon S3 and compatible stores, Google Cloud Storage, Azure Blob Storage, and PostgreSQL. Based on upstream v3.274.1 at commit 8f735e662d805b7a5bda70931bd627c69fbf38b8, the latest stable release when this fork was prepared.

This project is independently maintained and is not affiliated with, sponsored by, or endorsed by Pulumi Corporation. Pulumi is a trademark of Pulumi Corporation.

Install

python -m pip install pulumi-journaling==3.274.1.post1
pulumi-journaling version

The Python distribution provides both pulumi-journaling and pulumi commands, plus the matching upstream Python SDK, so existing import pulumi programs continue to work. On first invocation, the launcher downloads the matching CLI and language hosts from this fork's GitHub releases, verifies the SHA-256 checksum embedded in the Python package, and caches the bundle. That first invocation requires network access. Set PULUMI_JOURNALING_CACHE to choose the cache directory. Linux and macOS on x86-64 and ARM64 are supported; Windows packages are not currently published.

The Python launcher enables DIY journaling by default. Existing Pulumi commands and backend URLs continue to work:

pulumi login 's3://my-state-bucket'
pulumi up

Set PULUMI_DIY_BACKEND_JOURNALING=false to stop creating new journal epochs. Recovery of an unfinished epoch still runs before a mutating operation. Standalone GitHub bundles require PULUMI_DIY_BACKEND_JOURNALING=true to opt in. Pulumi Cloud retains its upstream service-managed persistence and journaling behavior.

Basis and hardening

DIY journaling is based on Jason Rowsell's prototype in Pulumi PR #22074. E Brake hardened and extended that basis with:

  • Encrypted immutable entries, bounded asynchronous writes, and acknowledgements that wait for the entire submitted prefix to become durable
  • Epoch identity, checkpoint hashes and required-feature guards that prevent stock clients from consuming an unfinished journal
  • Native stack locking, crash-safe consolidation, idempotent recovery, and preservation of unexpected or corrupt state
  • Consistent read-only access to the last clean checkpoint, provider-free recovery, and explicit evidence-preserving discard
  • Checkpoint backups, retention and compression support, integrity reporting, and protection against completing a replaced epoch
  • Conditional checkpoint replacement for GCS generations, S3 ETags Azure ETags, and exact PostgreSQL row versions, plus atomic replacement and fsync for local files
  • Fault-injection, cancellation, durability-ordering, concurrent-reader, recovery and storage-driver tests; version-pinned CLI bundles and a checksummed Python launcher

See the journaling and recovery guide for operational details and tradeoffs. S3-compatible services must implement conditional writes and strongly consistent reads and listings. An endpoint that rejects required preconditions fails the operation; the CLI does not fall back to unconditional checkpoint replacement.

Recovery

pulumi state journal recover --stack organization/project/stack

Recovery invokes no resource providers. If the previous process crashed, first verify it has stopped, then remove its stale native lock with pulumi cancel. If recovery refuses corrupt or unexplained state, preserve the evidence and consult the recovery guide before using pulumi state journal discard --yes.

Complete recovery before changing to an upstream CLI or another fork. Clean snapshots and provider packages retain upstream contracts.

Development and releases

The release configuration pins the upstream commit and archive checksums. The validation workflow runs regression tests, linters, lifecycle tests and the actual file, GCS, S3, Azure and PostgreSQL storage drivers against isolated local emulators. The release workflow builds all four platform bundles, exercises the CLI, packages the launcher with the resulting checksums, and can publish to GitHub and PyPI.

The upstream contributing guide covers the Go monorepo. Report fork issues in this repository. See authors, notices and the Apache 2.0 license.

Metadata

Release files for pulumi-journaling 3.274.1.post1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pulumi-journaling 3.274.1.post1
File Size Uploaded Provenance Actions
pulumi_journaling-3.274.1.post1.tar.gz 10.2 kB With provenance Details for pulumi_journaling-3.274.1.post1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pulumi-journaling 3.274.1.post1
File Interpreter ABI Platform Actions
pulumi_journaling-3.274.1.post1-py3-none-any.whl Python 3 none any Details for pulumi_journaling-3.274.1.post1-py3-none-any.whl

Total release size: 21.8 kB

Release files / pulumi_journaling-3.274.1.post1.tar.gz

Download URL pulumi_journaling-3.274.1.post1.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
78d1b3bc990d036f0ecb616d1a923886eee9378f05f2b86d80bb70a17d3178ac
BLAKE2b-256 checksum
How to use checksums
ac809da736e6b2c5d3b6b1ebb0018a20646a3684b8752507ebe13c06c1153811
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.

Transparency log

Release files / pulumi_journaling-3.274.1.post1-py3-none-any.whl

Download URL pulumi_journaling-3.274.1.post1-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fddd08f408d39ca719d341fe54441f859334611b9f514e2ed7a1d30618032055
BLAKE2b-256 checksum
How to use checksums
7ae42fd9c822358597698ae55b45a26d00fb381809e91eaa53d366d77bcacf3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.

Transparency log

Security for pulumi-journaling 3.274.1.post1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pulumi_journaling-3.274.1.post1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page