Skip to main content

A Lisp to Python transpiler with persistent data structures

Project description

Spork

Tests

Spork is a Lisp that runs on Python. It gives you the expressive power of macros, immutable data structures, and a modern REPL driven development experience.

Spork compiles directly to Python AST and executes on CPython, giving you seamless interoperability with existing Python libraries and tools. No wrappers (unless you want a lispy one) or FFI layers are needed, just continue using your favorite Python libraries.

Spork adds features that Python natively lacks, such as:

  • Persistent Data Structures implemented in native C for performance
  • Expression oriented syntax that reduces boilerplate and enables powerful macros
  • Predictable data flow with immutability and structural sharing by default

Alpha Warning

Spork is currently in alpha. The language, standard library, and tooling are all under active development. Breaking changes may occur between releases. We welcome feedback, issues, and contributions!

What Spork Isn't

To avoid any confusions, here's what Spork is not:

  • Not a Python Replacement: The runtime of Spork is Python.
  • Not a new VM or JIT: Spork compiles to Python AST and runs on CPython.
  • Not an abstraction over Python: Spork embraces Python rather than hiding it.
  • Not a strict clone of Clojure: Spork's ideas rhyme but we still try our best to be "Pythonic".
  • Not a fork of Hy: While both are Lisps on Python, Spork has a different design philosophy.

Philosophy

Spork is built on a few core opinions:

  1. The Python Ecosystem is Great: We want access to NumPy, PyTorch, Django, and the massive repository of PyPI packages. We do not want to rewrite the world.
  2. Data Integrity: Python's mutable defaults are convenient for scripts but dangerous for systems. Spork fixes this at the foundation. [1 2 3] isn't a Python list; it is a persistent vector. Your data is immutable by default, ensuring that state management remains predictable as complexity grows.
  3. Unified Tooling: Spork includes a unified toolchain to manage compilation, REPL, and testing, similar to cargo or go. It handles the bridge between Spork source and the Python environment so you don't have to configure build hooks manually.
  4. Pragmatism: We believe a hosted language should not fight its host. Spork compiles directly to Python AST. When you need raw performance or side effects, the escape hatch to Python's native mutability and types is always open.

It's a philosophy that tries to balance expressiveness and restraint, plenty of room to create, while minimizing room to trip.

Installation

As a User

The recommended way to install Spork is via the install.sh script or pipx. Both options isolate the tool environment while making the CLI globally available.

Prerequisites: Python 3.10+ and pip installed.

Using the install.sh script (Linux/MacOS/WSL):

Recommended for most users as it doesn't rely on anything but Python. Spork will be installed to ~/.local/bin/spork and a virtual environment will be created at ~/.spork/venv. Upgrading is as simple as re-running the script.

$ curl https://raw.githubusercontent.com/spork-it/spork-lang/refs/heads/main/install.sh | sh

Using Pipx (Linux/MacOS/Windows/WSL):

Recommended if you already use pipx to manage your Python CLI tools.

$ pipx install spork-lang

Continue to the Quick Start section for details.

Using Pip (Linux/MacOS/Windows/WSL):

Recommended when you are embedding Spork in an existing Python project.

$ pip install spork-lang

Continue to the Using Spork in an existing Python project section for details.

For Developing Spork

If you wish to contribute to Spork or modify the compiler:

You'll first need to clone the repository and setup the virtual environment.

$ git clone https://github.com/spork-it/spork-lang.git

$ cd spork-lang

# Sets up virtual environment and builds C extensions
$ make venv

# Run the test suite
$ make test

# Enter the Spork REPL using the development environment
$ bin/spork 

Quick Start

The REPL

Once installed, simply run spork to enter the Read-Eval-Print Loop.

$ spork
Spork REPL - A Lisp for Python
user> (+ 1 2 3)
6
user> (map inc [1 2 3])
[2 3 4]

Hello world

Create a file named hello.spork:

;; hello.spork
(defn greet [name]
  (print (fmt "Hello, {}!" name)))

(greet "Spork")

Run it with:

$ spork hello.spork
Hello, Spork!

Core Language Features

Immutable Data Structures

Spork provides Persistent Data Structures (PDS) implemented in C for performance. These are the default literals in the language.

;; Vectors
(def v [1 2 3])
(def v2 (conj v 4))
(print v)  ; [1 2 3] - original is unchanged
(print v2) ; [1 2 3 4] - new structure sharing memory with old

;; Maps
(def m {:name "Spork" :version 1})
(def m2 (assoc m :version 2))
(print m)  ; {:name "Spork", :version 1}
(print m2) ; {:name "Spork", :version 2}

;; Sets
(def s #{1 2 3})
(contains? s 2) ; true

; create new subset of s without 2
(def s2 (disj s 2)) 
(print s)  ; #{1 2 3}
(print s2) ; #{1 3}

Python Interop

Spork compiles to Python, so interop is seamless.

;; Imports
(ns examples
  (:import [os] [random] [antigravity]) ; Python stdlibs
  (:require [std.json :as j])           ; spork stdlib

;; Method calls (dot syntax)
(def text "hello world")
(.upper text) ; "HELLO WORLD"

;; Attribute access
(print os.name)

;; Mixing Python types (escape hatch)
(def py-list (list [1 2 3])) ; Convert Spork Vector to Python list
(.append py-list 4)          ; Mutate it in place

(print py-list) ; [1, 2, 3, 4]

(def data {:name "Spork" :version 1.0}) ; Immutable Spork Map
(print (j.dumps data)) ; '{"name": "Spork", "version": 1.0}'

Python objects and Spork objects interoperate freely, no wrappers or FFI layers.

Async/Await

Spork has first-class support for Python's async/await ecosystem.

;; a simple async function to fetch JSON data
(defn ^async fetch-data [^str url]
  (async-with [session (aiohttp.ClientSession)]
    (async-with [resp (.get session url)]
      (await (.json resp)))))

Pattern Matching

Spork includes structural pattern matching out of the box. With match, you can destructure and branch on data shapes concisely.

(defn describe [x]
  (match x
    0 "zero"
    (^int n) (+ "integer: " (str n))
    [a b] (+ "vector pair: " (str a) ", " (str b))
    {:keys [name]} (+ "Hello " name)
    _ "something else"))

Type Annotations

Spork supports Python type hints using metadata syntax. These compile down to standard Python type annotations.

(defn ^int add [^int x ^int y]
  (+ x y))

Compiles to:

def add(x: int, y: int) -> int:
    return x + y

Macros

As a Lisp, Spork allows you to extend the compiler via macros.

(defmacro unless [test & body]
  `(if ~test
     nil
     (do ~@body)))

(unless (= (add 1 1) 3)
  (print "Math still works"))

Output from all of the above examples

$ spork readme.spork
[1 2 3]
[1 2 3 4]
{:name 'Spork' :version 1}
{:name 'Spork' :version 2}
#{1 2 3}
#{1 3}
posix
py-list before: [1, 2, 3]
py-list after: [1, 2, 3, 4]
Json: {"name": "Spork", "version": 1.0}
Math still works

Examples

Below is a complete Spork program that demonstrates macros, Python interop, pattern matching, type annotations, and persistent data structures while fetching data from the GitHub API. GitHub Stars Project

(ns stars.core
  (:import
    [requests]
    [time :as t]))

;; Simple profiling macro using Python's time.perf_counter
(defmacro profile [label & body]
  `(let [start# (t.perf_counter)
         result# (do ~@body)
         end# (t.perf_counter)
         elapsed# (- end# start#)]
     (print (+ ~label " took " (str elapsed#) "s"))
     result#))

;; Fetch the star count for a given GitHub repo full name
(defn ^int fetch-stars [^str full-name]
  (let [resp (requests.get (+ "https://api.github.com/repos/" full-name))]
  title="examples/async.spork"   (match resp.status_code
      200 (get (resp.json) "stargazers_count")
      404 0                                     ; missing repo → 0 stars
      _   (throw (RuntimeError "GitHub API error")))))

;; Get top repos by star count
(defn top-repos [names]
  ;; Returns a SortedVector of Maps with :name and :stars
  [sorted-for [full-name names]
                 {:name full-name
                  :stars (fetch-stars full-name)}
              :key :stars :reverse true])

(defn main []
  (let [repos ["pallets/flask"
               "django/django"
               "tiangolo/fastapi"
               "psf/requests"]
        ranked (profile "GitHub fetch" (top-repos repos))]
    (for [row ranked]
      (let [{:keys [name stars]} row]
        (print stars "-" name)))))

(main)
;; Example Output:
; GitHub fetch took 0.1801389280008152s
; 92823 - tiangolo/fastapi
; 86079 - django/django
; 70890 - pallets/flask
; 53551 - psf/requests

Error Reporting

Spork provides source-mapped error reporting, meaning that runtime errors point to the original .spork source files with accurate line numbers and code context—not the generated Python code.

Example

Given this Spork file:

;; math.spork
(defn divide [a b]
  (/ a b))

(defn nested-call [x]
  (let [y (divide x 0)]
    (+ y 10)))

(defn deep-stack []
  (nested-call 42))

(deep-stack)

Running it produces a traceback that references the original Spork source:

Error: division by zero
Traceback (most recent call last):
  File "math.spork", line 12, in <module>
    (deep-stack)
    ~~~~~^~~~~~~
  File "math.spork", line 10, in deep_stack
    (nested-call 42))
    ^^^^^^^^^^^^^^^^
  File "math.spork", line 6, in nested_call
    (let [y (divide x 0)]
            ^^^^^^^^^^^^
  File "math.spork", line 3, in divide
    (/ a b))
    ^^^^^^^
ZeroDivisionError: division by zero

Project Management

Creating a Project

Spork includes a scaffolding tool to set up a standard project structure with dependency management.

$ spork new my-project
✓ Created new Spork project: .../my-project

Next steps:
  cd my-project
  spork run       # Run the project entrypoint
  spork repl      # Start the REPL in the project context
  
$ cd my-project/

$ tree
.
├── README.md
├── spork.it
└── src
    └── my-project
        └── core.spork

3 directories, 3 files

$ spork run
Project venv not found, initializing...
Creating virtual environment at .../my-project/.venv...
   Created virtual environment
   Upgraded pip
   Installed spork-lang (copied from current environment) All dependencies installed

Welcome to my-project!

Project Structure (spork.it)

This generates a spork.it configuration file (the Spork equivalent of pyproject.toml), a source directory, and a test directory.

Spork aims to unify the fragmented Python tooling ecosystem. A project is defined by a spork.it file:

{:name "my-project"
 :version "0.1.0"
 :dependencies ["requests" "numpy>=1.20"]
 :source-paths ["src"]
 :test-paths ["tests"]
 :main "my-project.core:main"}

Commands:

  • spork sync: Creates a virtual environment and installs dependencies defined in spork.it.
  • spork run: Runs the project's main function.
  • spork repl: Starts a REPL with the project's source roots and dependencies loaded.
  • spork build: Compiles Spork source files to Python .py files in a .spork-out/ directory.
  • spork dist: Builds a distributable package (wheel & archives) for the project.

Using Spork in an existing Python project

  1. Install Spork:
$ pip install spork-lang
  1. Import spork once at startup to register the import hooks:
# e.g. in your app's __init__.py or main.py
import spork

This uses a standard importlib hook to allow importing .spork files as if they were Python modules.

  1. Create a Spork module:
;; my_module.spork
(defn add [x y]
  (+ x y))
  1. Import it from Python:
from my_module import add
print(add(1, 2))  # 3

If you forget step 2 (import spork), Python will just say ModuleNotFoundError: No module named 'my_module' because the .spork import hook hasn’t been installed yet.

Using Spork Persistent Data Structures from Python

You can use Spork's persistent data structures directly in Python by importing them from the spork.runtime.pds module. This gives Python developers access to the same immutable collections used in Spork.

from spork.runtime.pds import Vector, vec

v: Vector = vec([1, 2, 3])
v2 = v.conj(4)
print(v)   # Vector([1, 2, 3])
print(v2)  # Vector([1, 2, 3, 4])

Why Lisp?

Spork is a Lisp because we believe in Homoiconicity: the code is represented by the language's own data structures.

  1. Metaprogramming: Because code is data, you can write code that writes code (Macros). This allows you to add features that look like language primitives (like the match or unless examples above) without waiting for the compiler developers to implement them.
  2. Structural Editing: Tools like Parinfer or Paredit make editing code structurally (moving entire blocks, expressions, or function bodies) significantly faster and less error-prone than editing line-based languages like Python.
  3. Expression Oriented: In Spork, almost everything is an expression that returns a value. if, let, and do blocks all return values, reducing the need for temporary variables and side effects.

Lisp's superpower is treating code as data, which means Spork can grow with you, not just run what you write. It's like having a language that politely asks: "Would you like to customize the universe today?"

Under the Hood

Spork is not just a syntax skin; it is a runtime system optimized for the Python memory model.

  • Native Persistence: Spork's data structures are not wrappers. They are custom C extensions.
    • Vectors: 32-way Bit-Partitioned Tries (similar to Clojure/Rust im-rs).
    • SortedVector: Persistant Red Black Tree built for sorted collections.
    • Maps & Sets: Hash Array Mapped Tries (HAMT).
  • Transient Internals: The runtime utilizes mutable "Transients" internally to construct immutable results. This ensures that Spork remains performant at the boundary between mutation and persistence, giving you safety without the typical "copy-everything" penalty.
  • Source Mapping: We track every AST node back to its origin. When an error happens, Spork points to your code, not the generated Python.

Performance

Spork prioritizes safety over raw mutation speed.

  • Reads: Comparable to native Python collections
  • Updates: Slower than raw mutation, but significantly faster than defensive copying.
  • Snapshots: Orders of magnitude faster. Because of structural sharing, "copyping" a Spork Vector is effectively free.

Comparison of Spork Persistent Vector vs Native Python List for common operations:

Operation (N=100k) Python (Native) Spork (PDS) Difference
Read (Random Index) ~0.8 ms ~2.2 ms ~2.8x Slower
Write (Append) ~5.8 ms ~8.2 ms ~1.4x Slower
Copy & Update 143.13 µs 1.44 µs ~100x Faster

Note: Spork includes specialized IntVector and DoubleVector types. These support the Buffer Protocol but need further testing and benchmarking to verify zero-copy interop performance (promissing early results).

Roots

  • Clojure: The primary inspiration for our syntax and the sequence abstraction. We admire Clojure's discipline, but Spork is native to Python, not a JVM port.
  • Rust/Cargo: The inspiration for our unified tooling and project structure (spork.it).
  • Python: The host we love to live in. Spork is designed to be a good citizen of the Python ecosystem.

Editor Support

Spork ships with early Neovim and Emacs modes located in the repository (editors/ directory). These provide basic syntax highlighting and are useful for experimentation, but are not yet feature-complete. We recommend Parinfer or similar structural editing tools, these are not a replacement for them.

We have plans to author and maintain the core editor modes/plugins as first-class projects in the Spork ecosystem because we believe that editor support is essential for a great developer experience.

Current support includes:

  • Emacs: major mode, syntax rules, REPL integration with symbol lookup and evaluation.
    • REPL server can be started within Emacs using C-c C-j or M-x spork-jack-in RET
    • Evaluate buffer, region, or current expression with C-c C-b, C-c C-r, and C-c C-c respectively.
      • The output will be displayed in a separate REPL buffer.
    • Documentation and type information available via C-c C-d on a symbol and C-c i for the inspector (currently basic).
    • bug with rainbow-delimiters-mode incorrectly highlighting on closing ] with spork-mode.
    • parinfer-rust-mode seems to work well with spork-mode for structural editing.
  • Neovim: syntax highlighting, basic indentation, and LSP integration
    • LSP server implementation with:
      • Completion (builtins and symbols)
      • Go-to-Definition
      • Diagnostics (line errors, error reporting needs improved)
      • Hover support
    • Currently using Vim scripts for syntax highlighting and indentation rules once tree sitter grammar is available we will migrate to that.

Emacs spork-mode is currently more feature complete than the LSP mode, but both are under active development.

Currently missing:

  • Tree Sitter Grammar: A Tree Sitter grammar for Spork would enable advanced syntax highlighting, code folding, and structural navigation in editors that support Tree Sitter.
  • LSP Features: The Spork LSP server needs testing and additional features to feel like a solid experience.
    • Refactoring support (rename symbol, extract function)
    • Static analysis and type checking (call out to python based tools or build our own?)
    • Code formatting support
    • Code actions and quick fixes
    • Better diagnostics and error reporting
    • Macro expansion view
  • Neovim:
    • Planned network REPL integration for evaluation and interactive development.
    • Inspector integration for drilling into data structures.
  • VSCode: No official support yet, but planned via LSP once the server is more mature.

These modes are evolving quickly and will improve over time. Contributions are welcome!

Roadmap

  • Language:
    • Additional persistent data structures (deque anyone?)
    • Error reporting improvments in codegen and macro expansion
    • Expand the Spork standard library with more utilities and data structures
  • Tooling:
    • Expand spork CLI with testing, linting, and formatting commands
    • Improve build process and packaging options
    • Setup integrations with the Python packaging ecosystem and static analysis tools
    • REPL/nREPL improvements (multi-line editing, auto completion, history search)
  • Editor Support:
    • Complete and polish Emacs and Neovim modes
    • Add VSCode support via LSP and textmate grammar extension
    • Tree Sitter grammar for advanced syntax features
  • Presense:
    • Tutorials and guides
    • Example projects and libraries
    • Website with documenation and resources

Documentation

Checkout the docs folder for more detailed documentation on language features, the standard library, and benchmarks of the persistent data structures.

License

MIT License

Project details


Download files

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

Source Distribution

spork_lang-0.1.2.tar.gz (258.3 kB view details)

Uploaded Source

Built Distributions

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

spork_lang-0.1.2-cp313-cp313-win_arm64.whl (244.4 kB view details)

Uploaded CPython 3.13Windows ARM64

spork_lang-0.1.2-cp313-cp313-win_amd64.whl (248.1 kB view details)

Uploaded CPython 3.13Windows x86-64

spork_lang-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (518.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

spork_lang-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (521.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

spork_lang-0.1.2-cp313-cp313-macosx_11_0_arm64.whl (249.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spork_lang-0.1.2-cp313-cp313-macosx_10_13_x86_64.whl (251.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

spork_lang-0.1.2-cp312-cp312-win_arm64.whl (244.4 kB view details)

Uploaded CPython 3.12Windows ARM64

spork_lang-0.1.2-cp312-cp312-win_amd64.whl (248.1 kB view details)

Uploaded CPython 3.12Windows x86-64

spork_lang-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (518.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

spork_lang-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (521.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

spork_lang-0.1.2-cp312-cp312-macosx_11_0_arm64.whl (249.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spork_lang-0.1.2-cp312-cp312-macosx_10_13_x86_64.whl (251.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

spork_lang-0.1.2-cp311-cp311-win_arm64.whl (244.6 kB view details)

Uploaded CPython 3.11Windows ARM64

spork_lang-0.1.2-cp311-cp311-win_amd64.whl (247.7 kB view details)

Uploaded CPython 3.11Windows x86-64

spork_lang-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (490.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

spork_lang-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (501.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

spork_lang-0.1.2-cp311-cp311-macosx_11_0_arm64.whl (248.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spork_lang-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl (250.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

spork_lang-0.1.2-cp310-cp310-win_arm64.whl (244.7 kB view details)

Uploaded CPython 3.10Windows ARM64

spork_lang-0.1.2-cp310-cp310-win_amd64.whl (247.8 kB view details)

Uploaded CPython 3.10Windows x86-64

spork_lang-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (487.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

spork_lang-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (496.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

spork_lang-0.1.2-cp310-cp310-macosx_11_0_arm64.whl (249.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spork_lang-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl (251.2 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file spork_lang-0.1.2.tar.gz.

File metadata

  • Download URL: spork_lang-0.1.2.tar.gz
  • Upload date:
  • Size: 258.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2.tar.gz
Algorithm Hash digest
SHA256 ffc030d9e1b751e598015908be708eacb5a3b366c6f5bd6d41528f3be3784b0c
MD5 27c070e09db745d7db24e7add7331868
BLAKE2b-256 a8d65d0445e721f3af993c07fad5ef1c271e4463723a4b150f33dce948921f16

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2.tar.gz:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: spork_lang-0.1.2-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 244.4 kB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 e49132ed819be2b72ce9e9e956eb2b50caa2def7cf0d70654c99ca0a64777822
MD5 0e375abd33d07aa750b8c6f1d1da5110
BLAKE2b-256 53aa86dd224b779f0a4b3a05e93b17133e9f1e23984bbd01fb4e39983adb4914

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp313-cp313-win_arm64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: spork_lang-0.1.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 248.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 88d83293806cd53065f141bd824215113c96ca5b54d929af5c14105177e14b83
MD5 d8c505b5a15fcc8cf87dc56d0714a9b4
BLAKE2b-256 3d4669f2886e7ae1831e266508efca59b6c0fce3e649eafbc2a653bfccc8bde5

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp313-cp313-win_amd64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 afe955596b7aadb00218bff30aabb55b70828c48b4291584d488f7a4ef3cbf27
MD5 e605152331cff9d1a0d2639d7c6b39ce
BLAKE2b-256 38497e07d010d032c2883e1a08aabdf01e639a8c4379f3ab7f59db74e186588e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fbe9855834dc47dacf53ff710a592928376b6aa75c936a5b1871272348385127
MD5 a84b45125ab5fb591214a08a3e7c71cf
BLAKE2b-256 074d24c26938bad4353c6ba2d8b480d1d07ddeddf05426ee18ec83039c66b32d

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80e28c2d2dc37d94f7ffdc18720122621178e57e1253f59ee0063a65c286699c
MD5 a333c2338781659f78c582535c4f9c25
BLAKE2b-256 f4a0f51c0c7694de3ded9866c186117c2b99d9f517081bf650a5f21d17fe67cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 09e3c478808b598a9e0d3d4acda1a1e71d3970f096793b07608e944f6dc08dbb
MD5 319b2bb9a61eea9f80985ac9c187d1b8
BLAKE2b-256 49a20c4598d8064561c633de84a14600e85f7fcdb742b37566859ac716601047

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: spork_lang-0.1.2-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 244.4 kB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 d8f88a05f78f0b829546f37be676d637b536da8f40df6cbb9dd746031be6caaa
MD5 8ddd886e2041f539ca567bde2d614462
BLAKE2b-256 8f087c6ffcfe02e3d7ee6d99faf24a786d8290ab1c06e3b50b43a45eb77e3c44

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp312-cp312-win_arm64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: spork_lang-0.1.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 248.1 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 28c0595924da785f74fc10a854c6266a8b96f5cf6435325876177753cd391149
MD5 0758dbfe9d63618787817e731347c42f
BLAKE2b-256 fac5812f77c9a94a57627267aec969dd24e75252ca6d9e723b18a08725ce5bf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp312-cp312-win_amd64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 412e849656a42a4fb4e083897a11b1ee3b1d8c236d6a10518b435439396cadb9
MD5 f70868385c39209cd481d055d7ade25d
BLAKE2b-256 2724152b0d83444db066a83eb82bff24fdc6adf957dc32864e019cfc3316c0e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 02825f3e40f2c2e53fb326e59dcb21bcf456ee3879d467d9b3ac98486671f981
MD5 613b1d2027e8382b3e74433b802b86c6
BLAKE2b-256 32eec5ececb0aa619771fb13b06a0d5ca6be598426171a96f922b9c0706c210e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ff0f23a1ad496bcdd1818a0f8da2cea866cb1a5f8b8a6100121717007c347b0
MD5 05b0bb1a731c3ee0791d2c3506b9b157
BLAKE2b-256 87a6ae5f05b87411a0b4c8da549e648fe09ee8f5f690c097de4693f5f1076655

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a8eded7590565d7b0383669893dee1ba04d56c49c8c730eaf3b7212d45885460
MD5 3e94396b9a1be5627c8a1e75a5069f86
BLAKE2b-256 1a9d98157a4b8b99f496744537c82d4f637ac5311f2f053a5dce8f65769f36b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: spork_lang-0.1.2-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 244.6 kB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 b655c78ad08d33dc9a5de51f1cdfcd4faafeafbeda532872d2b1025241df8ee6
MD5 e7532291954f740f0d88a6aca9d77ba4
BLAKE2b-256 42306f5170b8edbb8a27bf3d31c409698816db949fb82a8c402129899c61fdb3

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp311-cp311-win_arm64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: spork_lang-0.1.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 247.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 88cb3dfba0351cf3554edde1ee8b2d321f383c93ce5b2e9fffc89694456f95c7
MD5 d290439a35fea26b516974cdda5edc95
BLAKE2b-256 717848ae536868e1f5770859d210fb1529d216e973b0ca1356e009adba1db6ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp311-cp311-win_amd64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d6df411b05c7bcfb4654f027edf73becf423ac559e9468dccdcca770aa942396
MD5 4db2ca89c0a43b9a5a04eb7ae056320a
BLAKE2b-256 739e285969bd757526d9cb03b52379e725beef7a4dd6b5f34ff5355170fadf5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1c2ae14bbddc68bae395ad68d610f958cba7936b198df83e26226c03e5de51de
MD5 63f2c510ef483323713a7c953f601c1e
BLAKE2b-256 8f90e374f13fec4e3f288f2b4911ecdefe22fd32c2941912e4d9f62864396e39

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 caa70d5c5efaa5e6449a1d18c6bfb8344b6c6079c467fb4239b0d8f86606b91e
MD5 fbf54820209486253fd3632c4299f63d
BLAKE2b-256 aec7f0ea312eb4272e04f078684fa98d6381cbbb54899e468579a7be1b950cfa

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3dd0acb40a0144a4e35adbcca5fcfbf55922c96c25c382e57445fcddb8eff393
MD5 06943a0076b50564d6bbdd59dc61cef6
BLAKE2b-256 b7f6251c9eac29b2b663ef7c55bc85d9f05867f1d234368992d5488cd64c31a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: spork_lang-0.1.2-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 244.7 kB
  • Tags: CPython 3.10, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 1db84c3de35bc3fa0c0d61d8dea6107d64aee458281c43bf069f1184d4463c2a
MD5 edd1119a4c7e26bf70ec2da04ab86b96
BLAKE2b-256 31ef83af47fb7c8991fd91992576c5e378968c0bd2fa0500c9ad7f4922aea32e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp310-cp310-win_arm64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: spork_lang-0.1.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 247.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spork_lang-0.1.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3a80018e5b2912b3dc275da69fb9396b729310a8efc80f5fa5da272a19e50dea
MD5 86701101a222547ea20ee279c0fa6b57
BLAKE2b-256 659909b4a7dff115d7ef2dece2d94ee7e80f26e42cc72c9199d3cfd40e44fc6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp310-cp310-win_amd64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 321c1712403516d291cd1dbcdfae32b6793e84ae951f9faab56d9060aa76a919
MD5 12962fd5fff2bb4653323c523d90742b
BLAKE2b-256 4d965d30b319ba668e913287f2cd61238384695815c0f439e1c7c7534ee29c65

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c7ba73206daf87dc0ee1c5f1deb7363e3625166c20dcf425393886f6e8a938b8
MD5 4a351ca1c956931e9638e565464762f0
BLAKE2b-256 9979ffb41740e227e1eac455156c4f230b15093a9cbb97687a4abd212b91157f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 242fd3ed99e3197def0fe9d3a24705b0f59b1764bec2097d4c40604247ab36be
MD5 b1ffc43528971fd80634a3a34d513162
BLAKE2b-256 b35df8f484e3aad3df168157ab8b153612512690ab7755d450cb480ca0d39b46

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: build.yml on spork-it/spork-lang

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

File details

Details for the file spork_lang-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 97173076a36bc80cc4cecae060bb24205e22e27b1209f91f7336b699194dd443
MD5 131652662d68f8a47f6939367a7d015d
BLAKE2b-256 b2abd337de08ca917ca0163a6c01b4f21bd3bf6c647a531ba3c28a48e4926e4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: build.yml on spork-it/spork-lang

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