Skip to main content

Timelog

In-memory, LSM-inspired, time-indexed multimap for Python.

Timelog stores many Python objects per timestamp, supports out-of-order ingest, and answers timestamp/range queries from a native C17 engine through a CPython extension. Current package version: 1.3.0.

License PyPI version Python versions Tests (PR) Packaging (PR) Dependency Review Release (PyPI) Coverage CodeQL Sanitizers OpenSSF Scorecard Python 3.12+

Why Timelog

Timelog is built for timestamp-first workloads where the core operation is "everything in [t1, t2)".
It provides a native in-memory index with snapshot-consistent reads, out-of-order ingestion support, and sequenced range deletes.

At a high level, writes flow through mutable ingest state into immutable layers (memrun, L0, L1), while reads merge across layers with tombstone-aware filtering.
The design is LSM-inspired, but explicitly scoped to an embedded in-memory engine.

Use it when you want a local Python object index optimized for:

  • append-heavy event streams,
  • range scans over integer timestamps,
  • retention via logical deletes/tombstones,
  • concurrent snapshot readers over live Python objects,
  • zero-copy timestamp views for analytics-style scans.

Installation

Install from PyPI:

pip install timelog-lib

Or with uv:

uv add timelog-lib

Distribution name is timelog-lib, import namespace stays timelog:

from timelog import Timelog

Runtime Support

  • Regular CPython 3.12-3.14.
  • Isolated subinterpreters with a per-interpreter GIL.
  • Free-threaded CPython 3.14t (Py_GIL_DISABLED=1) on the supported wheel set; importing Timelog does not re-enable the GIL.
  • Typed package metadata is included (py.typed and _timelog.pyi).

The Python API remains single-writer at the instance level: writes and lifecycle operations must be externally serialized. Independent snapshot readers can run concurrently.

What Changed in 1.2 and 1.3

1.2.0 rebuilt the CPython runtime boundary: _timelog now uses multi-phase module initialization, module-local exceptions and heap types, per-interpreter-safe state recovery, and explicit synchronization for the supported free-threaded wheel family.

1.3.0 keeps that runtime contract and focuses on the hot user paths: auto-timestamp append(obj) moved from Python into C, common positional methods use lower-overhead dispatch, bulk_append() ingests typed timestamp buffers directly, and core lower/upper-bound searches use a measured size-gated branchless path.

Quickstart: Streaming

from timelog import Timelog

log = Timelog.for_streaming(time_unit="ms")

# Auto-timestamp append
log.append({"event": "boot"})

# Operator-style explicit timestamp append
log[1_700_000_000_000] = {"event": "tick"}

# Half-open range query [t1, t2)
rows = list(log[1_700_000_000_000:1_700_000_000_001])
print(rows)

log.close()  # deterministic cleanup; finalizer cleanup is best-effort

Quickstart: Correctness Semantics

from timelog import Timelog

log = Timelog(time_unit="ms")
log[10] = "A"
del log[5:15]              # delete [5, 15)
log[10] = "B"              # later insert at same ts

print(log[10])             # ['B']
print(list(log[0:20]))     # [(10, 'B')]

log.close()  # optional explicit cleanup

Timelog uses sequenced tombstones, so later inserts are not hidden by earlier deletes.

Core Guarantees

  • Time ranges are half-open: [t1, t2).
  • Reads are snapshot-consistent.
  • Concurrency model is single writer plus concurrent readers.
  • Duplicate timestamps are allowed (multimap semantics).
  • Write-path backpressure (TimelogBusyError) indicates the write was accepted; do not blind-retry the same write.
  • close() discards all data. Timelog is in-memory; flush() improves open-instance visibility for readers, not durability.

What Timelog Is (and Isn’t)

Timelog is:

  • an embedded, in-memory timestamp index,
  • optimized for append-heavy ingest and time-range retrieval,
  • implemented in C17 with first-party CPython bindings.

Timelog is not:

  • a durable storage engine,
  • a distributed TSDB,
  • a SQL query engine.

close() discards all data — the engine is in-memory, so nothing survives it. flush() matters while the log is OPEN: it materializes pending writes into immutable segments so zero-copy views() readers can see them.

API Snapshot

Core Python facade surface:

  • Constructors: Timelog(...), for_streaming(...), for_bulk_ingest(...), for_low_latency(...).
  • Writes:
    • append(obj), append(obj, ts=...), append(ts, obj).
    • extend([(ts, obj), ...], mostly_ordered=..., insert_on_error=...).
    • bulk_append(timestamps, objects) for contiguous native-endian int64 buffers plus a same-length list/tuple of payloads.
    • log[ts] = obj, delete(t1, t2), delete(ts), cutoff(ts).
  • Reads:
    • log[t1:t2], log[t1:], log[:t2], log[:].
    • log[ts] / at(ts).
    • named iterators: range, since, until, all, point / equal.
    • iterator helpers: len(it), next_batch(n), and it.view().
  • Introspection and views:
    • stats(), busy_events, extend_skipped, retired_queue_len.
    • views(...) / page_spans(...) for zero-copy timestamp spans.
    • PageSpan.timestamps is a read-only memoryview; PageSpan.objects() lazily exposes the corresponding Python payloads.

See docs/python-api.md for the full behavior contract.

Lifecycle, Threading, and Backpressure

  • Most users should write log = Timelog(...) or use a preset constructor and keep the object for the required scope. A context manager is available but not required.
  • Explicit close() gives deterministic cleanup. If omitted, collection auto-closes on a best-effort basis.
  • Do not call close() concurrently with other operations on the same instance.
  • Release active iterators, PageSpan objects, object views, and exported memoryviews before closing; they hold snapshot pins.
  • Background maintenance can run automatically (maintenance="background") or be controlled manually (maintenance="disabled" + flush() / compact() / maint_step()).
  • TimelogBusyError on write operations means accepted write + pressure signal, not "write lost".

Architecture

Write Path                               Read Path
----------                               ---------
append/extend/delete                     snapshot + query([t1, t2))
      |                                           |
      v                                           v
  Memtable (mutable)  <--------------------  Snapshot view
      | seal
      v
  Memrun (immutable)
      | flush
      v
  L0 Segments (overlap)
      | compact
      v
  L1 Segments (windowed, non-overlap)

Reads plan sources across active + immutable layers, then run k-way merge with tombstone filtering based on sequencing/watermark state.
Flush and compaction bound read fan-out over time.
Deletes are logical tombstones; physical cleanup is deferred to maintenance.

flush() is a visibility operation, not durability: it publishes pending writes into immutable in-memory segments so readers and zero-copy views() can see them. close() always tears down the in-memory engine and discards all records.

Performance at a Glance

Same-harness v1.3 A/B against the v1.2.0 wheel, Linux x86_64, pinned CPU, CPython 3.13.12, median of 5:

Operation v1.2.0 v1.3.0 Change
append(obj) 513.9 ns 117.1 ns 4.39x faster
append(ts, obj) 352.1 ns 103.9 ns 3.39x faster
append(obj, ts=...) 364.7 ns 109.6 ns 3.33x faster
point(ts) 457.1 ns 337.1 ns 1.36x faster
equal(ts) 548.8 ns 429.3 ns 1.28x faster
next_ts(ts) 393.8 ns 299.8 ns 1.31x faster
range(t1, t2) 575.9 ns 458.0 ns 1.26x faster
delete_range(t1, t2) 18,059.6 ns 13,289.3 ns 1.36x faster
delete_before(ts) 109.7 ns 80.8 ns 1.36x faster

New v1.3 ingest fast path:

  • bulk_append(np.int64 array, list): 113.3 ns/record on a 200k-record measured batch.
  • In that benchmark, bulk_append was 2.23x faster than a post-v1.3 per-record append loop and 3.51x faster than extend(zip(...)).

Search-path optimization:

  • Size-gated branchless lower/upper-bound search measured 1.9x-5.0x faster at gated sizes up to 262,144 records, and falls back to the neutral path for very large arrays where it no longer wins.

Historical scale snapshot (2026-02-15, Linux x86_64, CPython 3.13.12, dataset 11,550,000 rows):

  • Batch ingest (A2): 191,105 records/sec.
  • Full scan (B4): 18,088,679 records/sec.
  • Append latency (K1, background): p99 = 672 ns.
  • PageSpan iteration (F1): 1.48B timestamps/sec on the timestamp-only span path.

Results are workload-, configuration-, and hardware-dependent. The current publishable benchmark framing is docs/performance.md; older reports are retained as historical snapshots.

Methodology and context:

  • docs/PERFORMANCE_METHODOLOGY.md
  • docs/performance.md
  • docs/benchmarks/bulk_append.md
  • docs/benchmarks/max_delta_segments.md
  • docs/BENCHMARK_1GB_7PCT_OOO_UNIX.md
  • docs/BENCHMARK_REPORT.md

Complexity claims should be interpreted with stated assumptions. In practice:

  • append path is amortized O(1) at memtable layer,
  • point/range behavior approaches logarithmic seek + linear output scan when source fan-out is bounded by maintenance,
  • delete cost depends on tombstone interval state.

Documentation

  • Index: docs/index.md
  • Release notes: docs/release-notes.md
  • Python API: docs/python-api.md
  • Configuration: docs/configuration.md
  • Error and retry semantics: docs/errors-and-retry-semantics.md
  • Performance methodology: docs/PERFORMANCE_METHODOLOGY.md
  • PyPI/release operations: docs/pypi-release.md

License

MIT. See LICENSE.

Contributing

PRs are welcome. Run core validation locally:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DTIMELOG_BUILD_PYTHON=ON -DTIMELOG_BUILD_PY_TESTS=ON
cmake --build build --target timelog_e2e_build --config Release -j 2
ctest --test-dir build -C Release --output-on-failure -R '^py_.*_tests$'
cmake -E env PYTHONPATH="$PWD/python" python -m pytest python/tests -q

Package build sanity:

python -m build
python -m twine check dist/*

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

timelog_lib-1.4.0.tar.gz (678.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

timelog_lib-1.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (111.0 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

timelog_lib-1.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (107.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

timelog_lib-1.4.0-cp314-cp314-win_amd64.whl (108.1 kB view details)

Uploaded CPython 3.14Windows x86-64

timelog_lib-1.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (111.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

timelog_lib-1.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

timelog_lib-1.4.0-cp314-cp314-macosx_11_0_arm64.whl (92.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

timelog_lib-1.4.0-cp314-cp314-macosx_10_15_x86_64.whl (100.5 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

timelog_lib-1.4.0-cp313-cp313-win_amd64.whl (105.7 kB view details)

Uploaded CPython 3.13Windows x86-64

timelog_lib-1.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (111.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

timelog_lib-1.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

timelog_lib-1.4.0-cp313-cp313-macosx_11_0_arm64.whl (92.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

timelog_lib-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl (100.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

timelog_lib-1.4.0-cp312-cp312-win_amd64.whl (105.5 kB view details)

Uploaded CPython 3.12Windows x86-64

timelog_lib-1.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (111.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

timelog_lib-1.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

timelog_lib-1.4.0-cp312-cp312-macosx_11_0_arm64.whl (92.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

timelog_lib-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl (100.2 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

File details

Details for the file timelog_lib-1.4.0.tar.gz.

File metadata

  • Download URL: timelog_lib-1.4.0.tar.gz
  • Upload date:
  • Size: 678.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_lib-1.4.0.tar.gz
Algorithm Hash digest
SHA256 f80a799093006df77d07f694e04596f196ce718ab14cf19bd23b4d475da0caf9
MD5 6f5c11484afb0b771faa009b75a21ec8
BLAKE2b-256 827fe049ae997158235d68e67a2a5b38d4f612858b69d5e3d9f1b99f5ae67b4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0.tar.gz:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4b1bd3a237f9b0923c615941dcd1338995e14da561ae77f9c80d201fc1cd545c
MD5 844b9697103ec98f12f976bfb72c9a1a
BLAKE2b-256 f08c1712d4bf0b7a08543840cc14712235d2c5af71f9ea221b9a13beb19139cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 52e3154d61bab396adbb513a59104e8df1e92823bb5044775c85e48bb90a7a56
MD5 2dcf46b9351822081d2d9c51bbcd39f7
BLAKE2b-256 27bd5980b6989048ec2b109e35fc244aa6d25e58b5bb30e2a9e3ef70c6d4efbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: timelog_lib-1.4.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 108.1 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_lib-1.4.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e210d118b13afb9238a54120ad34828a62b2421cc85e4aba5ab8abfed8a2b371
MD5 f5efb28bbd57265b0aa2f83cc652632c
BLAKE2b-256 0e6126ad85d8af2b57937312506d8d9399a1f85704f9e6bba213ec438dae1c8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp314-cp314-win_amd64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4bab38c61f25357e0362ccc987582880663bf5969eb5ad9e7657af4f83c338c0
MD5 c6c09d63d46077ad947d453aa60b5568
BLAKE2b-256 42eca400ed79c43ce9191ba0671d16f0281a3a3b4804cc2428c5c32c98e4e79b

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b7d2e67d7f4ecbb650fb5107641149977601f1d30f2910e4bfaedcaf2fa6c707
MD5 cb816807616a6bc3d64f715fec38a8a2
BLAKE2b-256 b5dbb1ee88c478973b0d7fe789803be602ef9e7b8092862bf8b856bc09457b3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 01af4d8171f7c8a14830546f6266cc098807645387f676fcecdfd3a7483ce118
MD5 a61749dfaec0022949581cb0322304a7
BLAKE2b-256 a1947faac72c88faf4a6a7831c4e57604495bb2f18da154573ed1e06d98ae977

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 7b08e0812dcced6afe33c9245e7efcd8970acc9d6332d10b92b72b6e86ee3afd
MD5 4edd2f1edc347df7b4644a73aa3d3a53
BLAKE2b-256 aaa9066bf9e212e897daa23c8d526421e2bdacdada1d8eff3ef28a47ba3200ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: timelog_lib-1.4.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 105.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_lib-1.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f21cc8a17f10c3135ed7ef614b105060914b2debac77448de7501700dee9ed9e
MD5 69a8f6ac36b65d32245311fc3b235c41
BLAKE2b-256 a86aaf861b2311774f11460c0c688575828d1044310cb64f867b5afa5d1f0ae8

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp313-cp313-win_amd64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 94b79dd3955833924c3092f1e44e1982c835f222f9f4364ebc572bbf728c52a2
MD5 fcc575d00a045cddf64c7c52489e082d
BLAKE2b-256 c00b9a8f5ca10fb9a6774a9af0fd562e4e090cacbd07c5b5dc0cdf99f046b3d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bafc7664d70ad6f87a03d887b3822a5f1f37109cacf6e87cc8a33e263f1f5170
MD5 979fd428b6b6c85d878482e53dcc8e4c
BLAKE2b-256 c3027214b22e67ac2ac082ab4cb7182353b62f8fe503da55ff5495eee909902f

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 198d751fc35ab0568067809718285ff7bdf4d2f4ac163b34b91e1f1bfcd779fd
MD5 09545eb3fe2b697bb7d620167cd906af
BLAKE2b-256 426170365b7c56c0fa3ef7f6993dd167a4956f1381a4f77bd72b7578d91571c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2f7620c1d63ddefdb9688109ef699872a8c53bc02a6d0358bf16965b788943a9
MD5 04ae9ba66fff83adca869a2ce484837c
BLAKE2b-256 867686a5c7533557350190506aa3ced68e63092ba983456de590acdef5411dd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: timelog_lib-1.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 105.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timelog_lib-1.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fda6882d7bc504c32dbe1736f242f6eb5143465f0922d1cbb1aeb1f55be15729
MD5 ce7ceef818e805ad31f85a96b9a1cbe9
BLAKE2b-256 b7f1201a2955d8dc6728690add67b8e68ab6da185dfcff4d213165d4ea4728bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp312-cp312-win_amd64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c14b40515013dfc8bd9c1dd10df3cd88f178c901b33229fb7fa527fc068e0e65
MD5 3a3e55a62495c06fb569bc6fb13a7b52
BLAKE2b-256 844ce80112fcac0f748c28b7dab86606a30c63180ebf43bdf21c4f54ba92ab0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6029d0e593f042a2333580116e0b499602d113fbf7a7e8c7bf041bad62405ee2
MD5 9e617448c7c3334e3a2ff3f8becce37b
BLAKE2b-256 09fae82426cc8b03cedc1fd2a9dd86b0b21aa1fd2f763b9fcd1a6b96267bba25

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a565116ba4ecc9486aed7d8b2c8542e6ab8c48314e923fb450ccba74a74846bb
MD5 f7e2a406f4ce019db0a2f7e19d668c06
BLAKE2b-256 8085c65fa28feaa703c86b6d713b28d5bdf6fb6936e6bcb77720c4d2688ec981

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timelog_lib-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for timelog_lib-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4d61284b23b5bfaf40d89cf4cf4756d9fe443fe2bbf76b0c6e0b66e436ce9b92
MD5 8d5279f684be7e36e555bcd12414be2a
BLAKE2b-256 351223cd77eb546f9e1a084e1d175f12e407aaa46d2c50fac00cf47128254f3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for timelog_lib-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release-pypi.yml on VldChk/timelog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page