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"))

Annotations & Decorators (Metadata)

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

This also applies to decorators in Python like @staticmethod or @classmethod.

(defclass MyClass []
  (defn ^staticmethod static-method [^str msg]
    (print msg)))

(MyClass.static-method "Hello from static method") 

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"))

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

Spork Project Management

For standalone Spork projects, spork.it files provide a unified manifest similar to cargo.toml or package.json. Saving you from managing virtual environments, dependencies, and build scripts manually.

Note: If you are just adding Spork files to an existing Python application, you don't need a spork.it file. See Using Spork in an existing Python project for details.

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
    • Testing needs a major overhaul (right now it's asserts in spork files)
  • 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.4.tar.gz (262.7 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.4-cp313-cp313-win_arm64.whl (248.9 kB view details)

Uploaded CPython 3.13Windows ARM64

spork_lang-0.1.4-cp313-cp313-win_amd64.whl (252.4 kB view details)

Uploaded CPython 3.13Windows x86-64

spork_lang-0.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (533.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

spork_lang-0.1.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

spork_lang-0.1.4-cp313-cp313-macosx_11_0_arm64.whl (254.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spork_lang-0.1.4-cp313-cp313-macosx_10_13_x86_64.whl (256.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

spork_lang-0.1.4-cp312-cp312-win_arm64.whl (248.9 kB view details)

Uploaded CPython 3.12Windows ARM64

spork_lang-0.1.4-cp312-cp312-win_amd64.whl (252.4 kB view details)

Uploaded CPython 3.12Windows x86-64

spork_lang-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (533.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

spork_lang-0.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (537.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

spork_lang-0.1.4-cp312-cp312-macosx_11_0_arm64.whl (254.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spork_lang-0.1.4-cp312-cp312-macosx_10_13_x86_64.whl (256.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

spork_lang-0.1.4-cp311-cp311-win_arm64.whl (249.1 kB view details)

Uploaded CPython 3.11Windows ARM64

spork_lang-0.1.4-cp311-cp311-win_amd64.whl (252.0 kB view details)

Uploaded CPython 3.11Windows x86-64

spork_lang-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (503.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

spork_lang-0.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (514.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

spork_lang-0.1.4-cp311-cp311-macosx_11_0_arm64.whl (254.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spork_lang-0.1.4-cp311-cp311-macosx_10_9_x86_64.whl (255.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

spork_lang-0.1.4-cp310-cp310-win_arm64.whl (249.3 kB view details)

Uploaded CPython 3.10Windows ARM64

spork_lang-0.1.4-cp310-cp310-win_amd64.whl (252.1 kB view details)

Uploaded CPython 3.10Windows x86-64

spork_lang-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (499.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

spork_lang-0.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (510.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

spork_lang-0.1.4-cp310-cp310-macosx_11_0_arm64.whl (254.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spork_lang-0.1.4-cp310-cp310-macosx_10_9_x86_64.whl (256.3 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: spork_lang-0.1.4.tar.gz
  • Upload date:
  • Size: 262.7 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.4.tar.gz
Algorithm Hash digest
SHA256 b040c9c2b5fbda75e09bc631635620261edc26d8e2b65c9edfa3007a3f58b21d
MD5 cfd40244a7a66a3edd814f7e7b0206a2
BLAKE2b-256 aed9c9d559e6002aa62f5108ae0d3d9be1d33513b5b8b7440bdaa8873506ebc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4.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.4-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: spork_lang-0.1.4-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 248.9 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.4-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 86fdeb7a1b146508095dc221db034a7d32fcffd54eb0410a56e84e2546d5ffe1
MD5 a001e23d2fb29542c085eb2b2eb9ca62
BLAKE2b-256 4ce224ef14dab141ec845b3e55fe68c6f546528a45ea3886ad04c3573bf23ce9

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: spork_lang-0.1.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 252.4 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.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 25af104f6b98c61099dd8a2e6184d04af4bfc5c7dbcff57a869aa8aab8d0ffb1
MD5 11c4220b9847330ec05605899f6e0d8c
BLAKE2b-256 76c0b0b5df4a8bb2351d166d43486e51090a8d091e95dadb03f839d78c73c7ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c6ef3759ea0dda23c4a7fbacc02eb625d0b7417e1a23d653e1db6b51eb3f160c
MD5 ab3846ba682f07a392df4172b507d605
BLAKE2b-256 5ad23decd28d8cfc0a3bf56a18ec9a3568b481f2694dd71de48484066cddda43

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8399b93c949f19ae4ee187fb3b2a5e388f0040452248024910c5abd70f049407
MD5 9ddd944ffe2ae61dbe87b93487b44b8c
BLAKE2b-256 92aca86c60ecd495ec3927f2947118c84fed8067bbe208dcbd3bba01326db2d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0244997ce588691da64a1a2f803f37e2520fd78466925149537a26ef10820784
MD5 c97a742ea09b690f674b1fd154bc2376
BLAKE2b-256 5bd8f3a5b82c85e8d845af2712fc51a0328bfc20ac549f9c68d6d4e442225a0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c6bc4527586009e96868a6ca84f9330a4142a9beea361234da0076fd809eab57
MD5 0b5cac2512aa0c8f24f9a16d3645028f
BLAKE2b-256 a546acc530b37c79c96bc327f46b67568b4904ffb9a75144301479a1fcd7652a

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: spork_lang-0.1.4-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 248.9 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.4-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 7e7d0f3e35c5a11bb80d3e7105a493e908d307218910ee72478cec2de1025227
MD5 2f4350bcd46e96fdfa2805058a31cba5
BLAKE2b-256 10054afe2bc0a66e33bac6fe5a58aec74cd3c64ee94deb347e5335ea04d9c0c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: spork_lang-0.1.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 252.4 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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f3fffee0ad8d51a3397b2e370395869860b4509c974aeda74ae312e8ee6a683d
MD5 e7f27b23e6a357a6bec3b2c2024c4b79
BLAKE2b-256 052c2c60ba0af3d6791329abd9f2356e3a5f6eabc2749c7cece9e41da8a6d6ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c88bacddd0049490e580c21ff01d193d0f7f52d96ff0bad4b2b27e19f416bfc1
MD5 3384130ccc887c93e9015ae1dad13e0c
BLAKE2b-256 9707df940510ef1ff7c4a0cc19dade24cef8cee7b6223b6d182d751bea527b61

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c3b617baeb8e1c887f653dda83d779c234172f44c04c09f7496c4553b102fa71
MD5 37795f79b5a9d05cb128fbaf936f779d
BLAKE2b-256 d90767dd7df5d2ff3527ae96a5d54572825cda5c7464179819e4941d59e256e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f6eba6ad5607ea63feb799f5a2ac7acf2caf43460de58428091feba5fd98dac
MD5 7a922dca727fee139e8c440181adb716
BLAKE2b-256 e75fcdd4837ebf21162688a120a251d2d22cb7d09f9eb434b6b442d9b8c5b2db

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7903f6e753c75c94f77fbd1332bcf80a9da8ea438ce6ea8a7a6236b979b26ab3
MD5 7a6e3e315ef3b02877d52499fd20d646
BLAKE2b-256 02f76c081c5a0ca814f7eb8bcd32da4cb50d80bf6e11cab80e726940f1f0fd38

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: spork_lang-0.1.4-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 249.1 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.4-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 dfe588dd06b58b923d2aaec0eaa3e3dc5545ef4d0645f35234a66d5dd8c5b42e
MD5 c9d84d9c5cf83f4fe9bebf7373588615
BLAKE2b-256 7a8d7cb9ba9d7f40f025050d25443d0ef083d378ab0b19abbd4655ea60a6ec7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: spork_lang-0.1.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 252.0 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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d0e372eb8725e33bc2ce89324c62499164332ddc3b19609ce3161d3cc1d216b7
MD5 9dc647ccb993d3e662b55cd0f4093d50
BLAKE2b-256 a00403fd191c2b9c88247eb434c1beeab1766e6d3b9a1f7919421536506f6513

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2a9036c959c555011c61f815ffde4ba1d1cae2161817dfabfc371a6ad9592710
MD5 f1dd56f70e7f46e09eedc329d02fa972
BLAKE2b-256 0ece118cd18bc8895f7a792455cc509260b9c6f2e13c5607f1b708ceb5b98251

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1291a9b591fd0e411654ce288000184d7531ebc68f6c4032be586d93fe16a874
MD5 4227d3f30bb0eccf7413774035f6f8c6
BLAKE2b-256 a4b21e89686bf0373bed7736a6cf89613c5cde1d0332b192a95ad5be759f245a

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2edcf509b1ab868ef61c5d42568dd7ca496aa68078f18017199a77f6a055cbc
MD5 80712485e1c0d728cd41736bceae6943
BLAKE2b-256 2918c8d66600fdec6832cc595218b86bae976f7e32b84d690bc3414dd3d7bd63

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a95205488e3e403f11a84e7f00946321faa2756f257c890880dabc5fc554cae9
MD5 290257b825feb0dc0f06d61bd2a99fb0
BLAKE2b-256 804fd284388251b2e427fcc7d87f338ef902c8c0f0449a65a1abde7f81fa922a

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: spork_lang-0.1.4-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 249.3 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.4-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 5e872395025aef0b88f3654e5bc21c5422c4823e3bfa39bda18748cfce94e2ab
MD5 f57ba5c3d93c011e1db24103e0007242
BLAKE2b-256 8d05b5327d12d1311a0f10d9acfcdc0bce06eac015152ccf691352e8bb2b9068

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: spork_lang-0.1.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 252.1 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.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4e693a3ae5425a78c019062c7eb302305cf43a18b1ccfae4e9a96410bf8fa8c4
MD5 c801d4b414718a5e26d4b0b22f4bbd36
BLAKE2b-256 4868c400d45c01765638c577b0d3ba6c3b1a127c7f65d28ad6318b7883573f90

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c69a662d5eac6370e00f0cd4348528d5286dedc1533b0639b903bbaae874eab6
MD5 42462b7ef7a89c12ccb3c83f60f6b6db
BLAKE2b-256 243ca5eaef05e6c006d665f337b68b7371e91bb8b4ab43a3653fc97ce7e4a430

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a907b7991540d96ff215b02141d57427bfa0fbfb4b7db4f4ac6aa2623e80c3cb
MD5 9f51099751994e410598a372b10c7b66
BLAKE2b-256 32e42c960f0b472e945d4cd2cf1c8922ed47d8860a71e44788b84ac530125066

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 018770ae8ca75b3b464d4bcbd1bfbf517b16c96cce92e684e08dcde72b2af14f
MD5 d0a06fab81b643a0703320e23d67c67a
BLAKE2b-256 5119f884bb46b724dc3881354a3a134a58e944dff800f010fe3d98441fefd535

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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.4-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for spork_lang-0.1.4-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 61ee8a9e94a167a153cdd664ca2228de0ab0ce05e031aab15ab0d1ba46bb26d1
MD5 a22f10349cb8913049ecb461f67b74dc
BLAKE2b-256 4be53a48b97bd141c9cb7d025cc19e783e262968c49a8d630f467441451e376b

See more details on using hashes here.

Provenance

The following attestation bundles were made for spork_lang-0.1.4-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