Skip to main content

A Lisp to Python transpiler with persistent data structures

Project description

Spork

Tests PyPI - Version

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.5.tar.gz (263.6 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.5-cp313-cp313-win_arm64.whl (249.9 kB view details)

Uploaded CPython 3.13Windows ARM64

spork_lang-0.1.5-cp313-cp313-win_amd64.whl (253.5 kB view details)

Uploaded CPython 3.13Windows x86-64

spork_lang-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (539.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

spork_lang-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (544.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

spork_lang-0.1.5-cp313-cp313-macosx_11_0_arm64.whl (256.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spork_lang-0.1.5-cp313-cp313-macosx_10_13_x86_64.whl (258.6 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

spork_lang-0.1.5-cp312-cp312-win_arm64.whl (249.9 kB view details)

Uploaded CPython 3.12Windows ARM64

spork_lang-0.1.5-cp312-cp312-win_amd64.whl (253.4 kB view details)

Uploaded CPython 3.12Windows x86-64

spork_lang-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (539.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

spork_lang-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (544.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

spork_lang-0.1.5-cp312-cp312-macosx_11_0_arm64.whl (256.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spork_lang-0.1.5-cp312-cp312-macosx_10_13_x86_64.whl (258.6 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

spork_lang-0.1.5-cp311-cp311-win_arm64.whl (250.2 kB view details)

Uploaded CPython 3.11Windows ARM64

spork_lang-0.1.5-cp311-cp311-win_amd64.whl (253.0 kB view details)

Uploaded CPython 3.11Windows x86-64

spork_lang-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (509.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

spork_lang-0.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (520.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

spork_lang-0.1.5-cp311-cp311-macosx_11_0_arm64.whl (256.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spork_lang-0.1.5-cp311-cp311-macosx_10_9_x86_64.whl (258.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

spork_lang-0.1.5-cp310-cp310-win_arm64.whl (250.3 kB view details)

Uploaded CPython 3.10Windows ARM64

spork_lang-0.1.5-cp310-cp310-win_amd64.whl (253.1 kB view details)

Uploaded CPython 3.10Windows x86-64

spork_lang-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (505.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

spork_lang-0.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (515.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

spork_lang-0.1.5-cp310-cp310-macosx_11_0_arm64.whl (256.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spork_lang-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl (258.3 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: spork_lang-0.1.5.tar.gz
  • Upload date:
  • Size: 263.6 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.5.tar.gz
Algorithm Hash digest
SHA256 85cc66cc5e9a3329d4ac77735c4d8383d4933bc37f576b9aaf02a43bc850f29a
MD5 e203cfb8272391fa6112d48617f4e09c
BLAKE2b-256 9c13e4439165e281bfa86076a12f91a0cd321d170e1b47d1b301dbf107c5be43

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.5-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 249.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.5-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 4d8ff917564d444aa6de402101c13d00ec44d8095e58d825dbd01ce4e1c41790
MD5 5761d9f2c0c14f8b904ee8a47cbceb93
BLAKE2b-256 624408e9a65ac6f09f4142b7b90485e1543df381cb159792103ddddb2220f289

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 253.5 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.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fd164edf1a4e1e44373cabd3451b8b0fe15771ffd9a9491e99ea13dae7961969
MD5 d29ed0380eca1194ac0bc7ec4396f384
BLAKE2b-256 36bc6b563317d5ac37a99d9edbaaff1f54ca9cfab14cae1a7a19bf48f2943152

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2469c4950de97abb773d232bd07a719ca9347990a63b73f6889e0ccedd33ba5e
MD5 ee0d0460cacb6613a7edea0a0ecca759
BLAKE2b-256 68fda0b4101e7cb623b6c48f32070ab0db4401cac5a37f7ca86d6e692ed92892

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ee6c6bfc4f1b5d78577857784405faee84aa6e8a5b3170f2c9438d51f07b2c8e
MD5 3db5387343cfb9f656c04a7e6bf415c1
BLAKE2b-256 a4eca0c893ec7409cadaf637a19afe8318f2f0eb7ad5db03de81fd8b6c9be93b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bc222dd8d934df681ea0f162899a24bf5e7061f95bde3a616716c7b73d823c7e
MD5 d93eeed4f1857fb6943d8414adc61e33
BLAKE2b-256 7053cf82ada83010bbba4388a4309c9a82bdeffc1b913c8ef75e730c303e2332

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 62fe1f727fda6bd3ab547bead7963712451fce33515f9fe38742c21f14caedd8
MD5 9bde9cb5b76846deee987384d76049d5
BLAKE2b-256 1b05c5b236426b1e2f5736e64e83395f919b51d76b83a04c522ccc19ea539f2a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.5-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 249.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.5-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 c1d0a5e260234492fb1e1eeabe197db3357a73b12084551606734e85a9e2fb22
MD5 3a593f540dc01c21e9a99b5ba293b6f5
BLAKE2b-256 bcca627f8701a4d5e1ce8505853fae763fb16b0ff354f6393a12dcedf38ebfb4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 253.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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b8d54b0e12fce186e0fa7f09c00d1d58242acf2f8d7956086b28a922bf24a59d
MD5 76fb63071780b2ba0ed93fbee4bbe47b
BLAKE2b-256 e71c14f2a3a75eed8fb1d3acb82b556af0dee0e3dd5834caa98ec7f65ef634ec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bf7e8f1aaa124cde92d1aa66dd861832893ebcda4c1f5b4b231f9cd0a674f2c8
MD5 af451bdcebe9c0eb33613d0b8cbac241
BLAKE2b-256 4ef21ac3e8e34497bd3ab92150b49ba9bc65350c6dfdc79fb874164cc0e13966

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c8ae4daed0647d775ef1a123a7fc8be54cad164a314f9c663f01e96abd697f60
MD5 c202ed1b05c41dc7247767a77fed6b15
BLAKE2b-256 dd453352ffa2d3d9744480802a8c59d9ab14034e9fa21f0ccba40238f1e16df9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 747b49dd828eaacc2b677090fddee9e410a0d6a5971c196331baa927e6242e0b
MD5 348516186ce56f42441b588257e3e220
BLAKE2b-256 d3891e1e1df687d6b1382aeda04f26e0a0795608098fe2aea2d10d3fcb9d95e2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 59582c648db422fccd530323a1cd824d37e162d6feaf8fde31b238a6b3209df3
MD5 6c8dd19db01af345bbe125f5c8596464
BLAKE2b-256 1a4e4b80896a8c500ecf0020560bcaaf75241a970670ebf5d8384b39fceffe5d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.5-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 250.2 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.5-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 8b0c5602f5caba8a52887c115a2141cd7d372ea089e37e81c9a919c4d1ab2440
MD5 bbd104859b9078f0bc63adbec702bdc9
BLAKE2b-256 7d8f0662b32d1243267540a5bf9f0e310d8a3839ed2c742b4588bba419e89e71

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 253.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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 46fb6e076fd103f4acb59e4747e4b02ebda22da0eeb09fcd3e63be27c7cb182f
MD5 2fae94dfdc4407daa8063e73342d3458
BLAKE2b-256 5f93af8d25418095b0e37f9db4c973b2fed5877bc116546c4d47775482b15d8f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4256f17c54024d9189a5406180407889b9525b99d72427b5961afa984b5718d1
MD5 0eff294c39a6030c43796f098808a824
BLAKE2b-256 3959f02fa7ed3ab803fc933d952dab3adb3e227b7426d9bdb0fdb7eab1c69a77

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4acac2d2be96fd8d3972299df1a2fb1d3079017142ca4b3bb2be2bac19250a41
MD5 8c9a6c539e74b2da9bf3ae48e5467937
BLAKE2b-256 fadfb70b9c8a00b584334574eaa8375bca5fa0abb288304b3d3814f544330bad

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a8152d9ffe01ecde018da2f095ab9bd446434a1db7670dbc1528d82bf71ae4a
MD5 592a2a741e695f045ef92d61bde497c6
BLAKE2b-256 80c8213ba0afefa76034ffd02afd671d93f1078fffefa15197d4780b99517d3b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b9a541a11e33cae8d8347ce299d54951d8a6e4ae57adf73e98e82f035afefe78
MD5 dba6f0ce6960c1a310935aa9a10f89e0
BLAKE2b-256 b9ec7e589fa6c11bcfd21d17edb8adee409902eeb5152ba6eda1e19327d266ee

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.5-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 250.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.5-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 f21d568d7c81beb37da53ea419e0a75dbf2afc1733a296567917710fc2001dde
MD5 99ed7680389e7d0c08df2f4fafa6367e
BLAKE2b-256 15181a23126a85114e09045fd7717a6d53c647af30ea7d320c7cea663c0a44bf

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 253.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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 01bff2e4febb4e1ce9d81934cad86da33b57e311db2da943250f8ef4665c93d6
MD5 c36a6e3d0ed13f9735f8f83d17323c96
BLAKE2b-256 759b606368d6299d6b603a8d5e9fd5c885d8004f07c428222ab2383c6f436498

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 05c265dbdc5f8d6b4d9146310c1c8d91a9626516f119febea017fed37fb0fe78
MD5 107aff8da35daec783bacb8e822e3698
BLAKE2b-256 58ad7790860db2aedb2a1f518d195214d3534e2d17d8436f97c0427b15129d2e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 014196c6608911ca084c46189e8d1ec08fc77358fe6596bd33b82c5ac44d0e12
MD5 18615148819a5d5feedfd0f2ef82c614
BLAKE2b-256 12558ffe6ad856762fe328071fdf6b6000c36e64b7dd9d7ea54b71e9ec3c29e7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be5f80011abf7475b63b21544c1dbe2fddf27fc9b5616d9a73cbff49819217d6
MD5 aaba49966cbbd38f87f7b0510693c5fd
BLAKE2b-256 7b50c63c52ff7ded83e3901ae69c01a9d739fa1e94d969fa5bfd470d3f197e46

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.5-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2c22e36d7d9c0d2b58dc2a74e00e391998f74a3218dfdd60d24b79b2b34c5007
MD5 428ab4d39fbb5cf09d889e71783060c4
BLAKE2b-256 e51821d0198fa7e571c2597cb2611d41de1a44580adc65e12f0af5cd19eb64ec

See more details on using hashes here.

Provenance

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