Zero-invasive variable-change tracker for Python. Register a variable once and oscilo records every change it undergoes — without touching your code.
English | 한국어
oscilo observes program execution in the background and captures how a variable evolves over time — reassignments, in-place mutations, and deletions — then writes the full history to a JSON Lines file when the program exits. The value comparison that runs on every line is delegated to a small C extension to keep the runtime overhead low.
Contents
- Motivation
- Installation
- Quick start
- Output format
- How it works
- Project layout
- Testing
- Contributing
- License
Motivation
Inspecting variable state during debugging usually means scattering print calls through the code:
def solve(data):
result = []
for x in data:
result.append(x * 2)
print("result:", result) # temporary, easy to forget to remove
return result
This clutters the source, is easy to leave behind, and does not scale to hot loops. Interactive debuggers avoid the clutter but interrupt execution, which is impractical when a loop runs thousands of times.
oscilo takes a different approach: register a variable by name once, and its history is collected automatically.
import oscilo
def solve(data):
result = []
oscilo.register("result") # every change to `result` from here on is recorded
for x in data:
result.append(x * 2)
return result
Installation
pip install oscilo
oscilo ships a C extension. A prebuilt wheel is used when available; otherwise the extension is compiled locally, which requires a C compiler.
Building from source
pip install -e . # editable install (recommended for development)
pip install . # standard install
python setup.py build_ext --inplace # build the C extension only
Requirements
- Python 3.11+
- A C compiler (GCC / Clang / MSVC) when building from source
Quick start
The public API is a single function, oscilo.register(), which takes the variable name as a string.
import oscilo
def run():
target = [100, 200]
oscilo.register("target") # recorded as an "init" event
target.append(300) # updated (in-place mutation)
target = "reassigned" # updated (reassignment)
del target # deleted
run()
# On exit, the history is written to oscilo.jsonl
Calling oscilo.register() multiple times adds each variable to the same monitor, and all histories are merged into a single output file:
import oscilo
def run():
score = 10
items = ["potion", "shield"]
oscilo.register("score")
oscilo.register("items")
score += 55
items.append("sword")
run()
Notes:
register()returnsNone; registration is its only effect.- Importing
oscilohas no side effects — tracing starts only whenregister()is called. - If no change is ever recorded, no file is written.
- If a tracked value cannot be deep-copied, oscilo records
<uncopyable>and tracks reassignment only. In-place mutations of the same object cannot be detected because no comparison snapshot is available.
Output format
History is written as JSON Lines (oscilo.jsonl by default). Each line represents a single change:
{"name": "target", "var_id": 1, "data": [100, 200], "event": "init", "domain": "LOCAL", "line": 4, "func": "run", "call_id": 1, "parent_call_id": null, "call_depth": 1}
{"name": "target", "var_id": 1, "data": [100, 200, 300], "event": "updated", "domain": "LOCAL", "line": 6, "func": "run", "call_id": 1, "parent_call_id": null, "call_depth": 1}
{"name": "target", "var_id": 1, "data": "reassigned", "event": "updated", "domain": "LOCAL", "line": 7, "func": "run", "call_id": 1, "parent_call_id": null, "call_depth": 1}
{"name": "target", "var_id": 1, "data": null, "event": "deleted", "domain": "LOCAL", "line": 8, "func": "run", "call_id": 1, "parent_call_id": null, "call_depth": 1}
| Field | Description |
|---|---|
name |
The tracked variable name |
var_id |
Identity of the tracked binding; records sharing a var_id refer to the same variable (matches call_id for locals; stays stable across frames for globals and closure variables) |
data |
The value at the time of the change (null for deleted) |
event |
init, updated, or deleted |
domain |
Variable scope: LOCAL or GLOBAL (a closure/enclosing variable is reported as LOCAL from its owning frame's point of view and is identified by var_id) |
line |
Source line where the change was detected |
func |
Function in which the change occurred (<module> at module level) |
call_id |
Unique id of the function call (frame) where the change occurred |
parent_call_id |
call_id of the calling frame (null for a root call) |
call_depth |
Call depth relative to the registration frame (root = 1) |
The call_id / parent_call_id / call_depth fields let a consumer reconstruct the call tree — i.e. which call each change happened in, and how the calls nest.
The line-delimited format streams and parses efficiently for large histories.
How it works
oscilo watches execution in Python and delegates value comparison to a C extension.
-
The first
register()call lazily creates a single monitor and installs a trace hook viasys.settrace. -
On each executed line, the C engine (
oscilo_engine) determines whether a tracked variable changed, using a short-circuiting sequence:Variable no longer in scope? → deleted Reference identity changed? → updated (reassignment) Immutable type (int/str/...)? → unchanged (skip comparison) Container size changed? → updated Otherwise, compare values → updated / unchanged -
When the process exits, an
atexithook flushes the in-memory history to disk in a single write. Records are buffered rather than written per change to avoid I/O overhead.
Unchanged values produce no record, and immutable values are skipped entirely when their reference is unchanged — both are central to keeping the per-line cost low.
Project layout
src/oscilo/
├── __init__.py # public API (register) and single-instance management
├── _core.py # monitor implementation and atexit save logic
├── CallContext.py # lazy call-context tracking (call_id / parent_call_id / call_depth)
├── FileWriter.py # JSONL output
├── HistoryBuffer.py # in-memory history buffer
├── ScopeResolver.py # LEGB scope resolution (local/enclosing/global/builtin)
├── TraceDispatcher.py # sys.settrace event handling
├── VariableTracker.py # per-variable change detection and value snapshots
└── oscilo_engine.c # C extension for value comparison
Testing
python tests/test.py
Tests are discovered from tests/ (test_*.py). Component tests run in-process, while the end-to-end scenarios (registration and process lifecycle) spawn a separate interpreter process, since atexit-driven saving and sys.settrace behavior can only be verified across a full process lifetime.
Contributing
Contributions are welcome — bug reports, feature ideas, and pull requests alike.
- Open an issue using the bug report or feature request template.
- Follow the checklist in
.github/pull_request_template.mdwhen submitting a PR. - Include tests with new features or fixes where practical.
License
Metadata
Release files for oscilo 1.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| oscilo-1.0.5.tar.gz | 473.4 kB | With provenance | Details |
Built distributions (wheels)
Total release size: 1.1 MB
Release files / oscilo-1.0.5.tar.gz
| Download URL | oscilo-1.0.5.tar.gz |
|---|---|
| Size | 473.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d9e93702b37991ba9a627be8bad2d7c9d7b03b05c7b19418237f2193c2de3839
|
|
BLAKE2b-256 checksum How to use checksums |
7a22d0e7458932fcf31d1b3e2fa73f5b86540d82f328b361e8b3ef0ebcfb092a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp313-cp313-win_amd64.whl
| Download URL | oscilo-1.0.5-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 25.6 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b1e66fbeb3454c94c526334dd4a365b6212903d88006e9ed75db31218636d895
|
|
BLAKE2b-256 checksum How to use checksums |
1b60272b00f6ec940b99c212f3bdd1d54dc0572e9290eb3a36442612f4313d10
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp313-cp313-win32.whl
| Download URL | oscilo-1.0.5-cp313-cp313-win32.whl |
|---|---|
| Size | 25.4 kB |
| Tags | CPython 3.13 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
5f9e3e3a7b0e3fb69e71656193ffd26f40dc001d8f22fdde00f9e348992a5917
|
|
BLAKE2b-256 checksum How to use checksums |
4740411284fca8473fd4c825f4eab4e75d9aa03011447ce337e978f02d8cbc0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | oscilo-1.0.5-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 32.4 kB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
360923c8cf2ce66477f86dff6ec24129c5798fcb1c0cf2e6fabba95c215f9592
|
|
BLAKE2b-256 checksum How to use checksums |
0c90246174f26247c392e0759061f516a5c02763aab3e4fa0d9c85e4e32c78d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp313-cp313-musllinux_1_2_i686.whl
| Download URL | oscilo-1.0.5-cp313-cp313-musllinux_1_2_i686.whl |
|---|---|
| Size | 32.4 kB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-32 |
|
SHA-256 checksum How to use checksums |
b593f152adc38d347d0f4d059a885b9b3e6b8007956e2705f46dbb7dc4dc235c
|
|
BLAKE2b-256 checksum How to use checksums |
c17bb1f9ba6a76fc954fb02402ee17b3a9133b4034f2f6045219b9408836b16f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | oscilo-1.0.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 32.6 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
e7c44f73bedfa592623b8d130c5d133e1b4ae37795c1d12453a9299ad0e96f1d
|
|
BLAKE2b-256 checksum How to use checksums |
d21fa83e6d9bc03e80cb6af12168a8ed28a44ced4a9d81d1f2a06dfd5224429d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | oscilo-1.0.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 32.2 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-32 Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
39917fd94d43237d6579743e5a18aa7729efedced241064e1c579fe0b20781f6
|
|
BLAKE2b-256 checksum How to use checksums |
bc92e6fb17fc50246a8edb50c77b086b732775fc470b0ab5022d7f93cf9281eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | oscilo-1.0.5-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 23.5 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d735cfd1a6a68e7c94b9f5f8f8c318d31735f3142843a6ebee782efe16eeb3dc
|
|
BLAKE2b-256 checksum How to use checksums |
7f68cb00798191096c9d3880ae688f33b9ca7b2273cc0784ddb657ebf52f347b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp312-cp312-win_amd64.whl
| Download URL | oscilo-1.0.5-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 25.6 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bfec4d500fdda25c8429f4a50dc318852be7b7b3be262bdbd07027ecf0a941d8
|
|
BLAKE2b-256 checksum How to use checksums |
d340568768896a09ef3ec425715bc09945ef590450c87e8915b994479995f372
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp312-cp312-win32.whl
| Download URL | oscilo-1.0.5-cp312-cp312-win32.whl |
|---|---|
| Size | 25.4 kB |
| Tags | CPython 3.12 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
45a8da3449a8bad359b54130c5b72e6cc20f044d877f0554396210bd2b55aea0
|
|
BLAKE2b-256 checksum How to use checksums |
2b63f4a993fb94d1e032a45cbffa9ed5cd71a1de8b2154474a290564c3f5f205
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | oscilo-1.0.5-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 32.6 kB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
ba64eefadc1397106cdc3a8b743ee18375b37978de0826578af0e10b3763684a
|
|
BLAKE2b-256 checksum How to use checksums |
e0605d77245e10b9cfb0146ae736054d028d1be6f250456d8ab6ca47674f6418
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp312-cp312-musllinux_1_2_i686.whl
| Download URL | oscilo-1.0.5-cp312-cp312-musllinux_1_2_i686.whl |
|---|---|
| Size | 32.6 kB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-32 |
|
SHA-256 checksum How to use checksums |
3c5c00e5ec7fba0ddd16354b94bf0452ef01528cb88020c1825c7e1f99582fdf
|
|
BLAKE2b-256 checksum How to use checksums |
7c319d367fa7e2cd7cdcc62ecb6fc75ad6de828cd67fc643b52f86e830e8a45b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | oscilo-1.0.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 32.8 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
5da4cf80673e4325d000434604cd018af2e7e3db5d534d04ed2f42ee07be28b1
|
|
BLAKE2b-256 checksum How to use checksums |
b5840192ae36e320de139372aa65526efee2b1a04f3126f2efb97b260999df57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | oscilo-1.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 32.4 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-32 Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
faac4b567e4f79a9734d5e5c2337237eabd88a161e75b49559de30a58c01deff
|
|
BLAKE2b-256 checksum How to use checksums |
824856f356c7e5e0b37bd461712d80a4d47a05eaf4d73c6ff9e12b5c303138da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | oscilo-1.0.5-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 23.5 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7d7b8d5a375f7cf53830e941d0bc421fce80ec5e14b0d85660a43e28cfd5e72c
|
|
BLAKE2b-256 checksum How to use checksums |
770adb30e0fef5a7cc25b38db3cc698a6479ec8558d8914ce55e4f9c741df0d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp311-cp311-win_amd64.whl
| Download URL | oscilo-1.0.5-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 25.6 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
fe67b72ccffcdcf839b7ef77079fec21004d83eecbc0ee858ee607fb2782f1d0
|
|
BLAKE2b-256 checksum How to use checksums |
9b72b59e3606b35075ddd46cd617c451b15a4c8b356ea0d7b47e0efd16e158fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp311-cp311-win32.whl
| Download URL | oscilo-1.0.5-cp311-cp311-win32.whl |
|---|---|
| Size | 25.4 kB |
| Tags | CPython 3.11 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
3a7a46460315061c61a80d601b27ef4794ba9d2309acdf806ca85570a796b9ae
|
|
BLAKE2b-256 checksum How to use checksums |
f65a173f7748313321ac99db6da12c2fe1bb32cc25dd608f19d74762dec34167
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | oscilo-1.0.5-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 32.2 kB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
8894d4e586ce9411f3e966bb7ccd04942677a6f7965f65ccffd24edf21969e55
|
|
BLAKE2b-256 checksum How to use checksums |
302728974e4895e4f03d91d270347e265d90172ac11708096ffbb0d7e33ddd45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp311-cp311-musllinux_1_2_i686.whl
| Download URL | oscilo-1.0.5-cp311-cp311-musllinux_1_2_i686.whl |
|---|---|
| Size | 32.3 kB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-32 |
|
SHA-256 checksum How to use checksums |
9e5f616b1dbc13fba6f3d79d6624d0eb897a9fced042560b0db82d0c1eaddbfa
|
|
BLAKE2b-256 checksum How to use checksums |
d9f5e5db337959768b51791f19ea535a6016ce913d6340dec98ddedc3b1f8ba3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | oscilo-1.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 32.4 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
b4f9c5a19411c85ea94baba372f4c2c0fbae0fb5ae908ec530f3852ace94ff57
|
|
BLAKE2b-256 checksum How to use checksums |
601ffed0a32012cf9f8a080fd55fa7a0a939d72426e65d3ec5e96a3186db1d63
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | oscilo-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 32.1 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-32 Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
f410c0988ff72e626ec79f7eac7de004f8105ec19681e885408436825104474c
|
|
BLAKE2b-256 checksum How to use checksums |
435585e0fc8c7d43c270462b7b9a8c0fd3bf2185138a4a3bb1dd44057ab85abe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logRelease files / oscilo-1.0.5-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | oscilo-1.0.5-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 23.4 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e054d44ccdd753c1e368dc606d0bd11d739c10a40a100eb4cbc262174dd2cede
|
|
BLAKE2b-256 checksum How to use checksums |
0de60d4b9f8d097c148ce1bfd37e00a2abefbde91f0a388d0bab435ecbc749f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 13, 2026.
Transparency logSecurity for oscilo 1.0.5
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
All 22 files in this release have been uploaded with provenance metadata.
Attestation for oscilo-1.0.5.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 Aug 13, 2026.
Transparency logA 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.