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 to Python AST and can be imported directly via a standard import hook. This gives 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 that are immutable by default with near-free snapshot copies
  • Predictable data flow with no hidden mutation or shared state surprises
  • Expression oriented syntax that reduces boilerplate and enables powerful macros

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 set up 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) ; e.g. "posix" or "nt"

;; 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
(py-list.append 5)           ; alternative call syntax

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

(def data {:name "Spork" :version 1.0}) ; Immutable Spork Map
(print (j.dumps data)) ; '{"name": "Spork", "version": 1.0, "nums": [1, 2, 3, 4, 5]}'

Python objects and Spork objects interoperate freely, no wrappers or FFI layers. thanks to structural sharing

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))]
    (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: Persistent 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, "copying" 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 (promising 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 improvements 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
    • Set up 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
  • Presence:
    • Tutorials and guides
    • Example projects and libraries
    • Website with documentation and resources

Documentation

Check out 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.6.tar.gz (261.4 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.6-cp313-cp313-win_arm64.whl (249.4 kB view details)

Uploaded CPython 3.13Windows ARM64

spork_lang-0.1.6-cp313-cp313-win_amd64.whl (252.9 kB view details)

Uploaded CPython 3.13Windows x86-64

spork_lang-0.1.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (538.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

spork_lang-0.1.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (543.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

spork_lang-0.1.6-cp313-cp313-macosx_11_0_arm64.whl (256.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spork_lang-0.1.6-cp313-cp313-macosx_10_13_x86_64.whl (258.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

spork_lang-0.1.6-cp312-cp312-win_arm64.whl (249.4 kB view details)

Uploaded CPython 3.12Windows ARM64

spork_lang-0.1.6-cp312-cp312-win_amd64.whl (252.9 kB view details)

Uploaded CPython 3.12Windows x86-64

spork_lang-0.1.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (538.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

spork_lang-0.1.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (543.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

spork_lang-0.1.6-cp312-cp312-macosx_11_0_arm64.whl (256.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spork_lang-0.1.6-cp312-cp312-macosx_10_13_x86_64.whl (258.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

spork_lang-0.1.6-cp311-cp311-win_arm64.whl (249.7 kB view details)

Uploaded CPython 3.11Windows ARM64

spork_lang-0.1.6-cp311-cp311-win_amd64.whl (252.5 kB view details)

Uploaded CPython 3.11Windows x86-64

spork_lang-0.1.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (509.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

spork_lang-0.1.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (519.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

spork_lang-0.1.6-cp311-cp311-macosx_11_0_arm64.whl (255.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spork_lang-0.1.6-cp311-cp311-macosx_10_9_x86_64.whl (257.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

spork_lang-0.1.6-cp310-cp310-win_arm64.whl (249.8 kB view details)

Uploaded CPython 3.10Windows ARM64

spork_lang-0.1.6-cp310-cp310-win_amd64.whl (252.6 kB view details)

Uploaded CPython 3.10Windows x86-64

spork_lang-0.1.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (504.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

spork_lang-0.1.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (515.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

spork_lang-0.1.6-cp310-cp310-macosx_11_0_arm64.whl (256.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spork_lang-0.1.6-cp310-cp310-macosx_10_9_x86_64.whl (257.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: spork_lang-0.1.6.tar.gz
  • Upload date:
  • Size: 261.4 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.6.tar.gz
Algorithm Hash digest
SHA256 dd4384552587c1df6349c583b7703e8a9b3fb73b01fa542417d31b49eb22c82b
MD5 b7ba5c8c21471de18b6a45902f6be1e2
BLAKE2b-256 ea7524c90a3a9e692e86761b9f0ad8e2d1f4e3d6694424196a5e16a2326085f3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.6-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 249.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.6-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 51db4c826bdea09107b97844acf11176f24874c9cc47470c3c9cf7448a6cde24
MD5 e40aa9457e4f3cfcba6043b231ae938f
BLAKE2b-256 c9b04e27d59254c0836e90e9a2da860bc0253a0892763b71cdad433b4ece48de

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 252.9 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.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5c3bc9431c352f454f8df666de0f007e6ff021b4943866c259a16c0ea557323f
MD5 666b431ce7b4cfc8b199e0e30777c368
BLAKE2b-256 9706684925f5d1eff59d91bb09c092b4daa9afa55ebc5befeb62b46a3d463df6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed0d6bf458c4f1be651f4d37ab59645e259326908259948492d089d6c173d20d
MD5 7e8b93c83de6c230a146893afafd94b7
BLAKE2b-256 063b0aa3fdc4519930757fa25498718cf54654704730c477bd344774eac29cf7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7ca75d5b887634cb6223863b396063b52b01bf6d15594bee8b4f5efe6e3af992
MD5 b336f8a89015416b15343d8d67b2cc90
BLAKE2b-256 4638487d1bae883f1fc5ba84950f44d077eff7a1bb049861b107aba5a8afdb95

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b808c3c9b1292a89adbb172805091f86302511da5e0cdd0b1d35abcad2e62c7
MD5 7f041637442fa017407df72448d0f7d9
BLAKE2b-256 c2eea9f06a0a9c70ac4ff4137a47cdf941d79e19ae24da59cbf9649a6d89f161

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d2f3264f9e5651a600449b8a762de017f71a356e464a7de51152a7ab3cd3d81c
MD5 f852b1b7b97d3d2467e8252ee3dd361a
BLAKE2b-256 b456ece4d8b4ca0edad64790b4f0f0cdcbfa5ed897aed8f16182c417c4fbcaba

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.6-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 249.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.6-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 a7af6808296a206ed713b4bd0f01d2f12a33f2c3f3aaf5cda940d428d6c9dffc
MD5 cbf34dc489c0539379a303c05c4f954f
BLAKE2b-256 e3bcf0dbdfb779722e83585780af9eed7c8043edb14fd16abb3d4a95e0905391

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 252.9 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.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9eb13222d7989c5b8d713e9c2aaf69f3394c64d39fb5d6ec485fa60ff795e114
MD5 ad52ee05742763369a82f06d1dfce182
BLAKE2b-256 4b88780a39b726e496eb121802c8d67c3da27be83c4632943af63f5cdf621b80

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 73ef6262582dbfda6656e632941776e97c99e72eed50f4d8ae00603ed2f14fe0
MD5 26ae9ba6e3aa16aa222fdbffa0fa4b31
BLAKE2b-256 9b2e1df492c072f4ae8793610e9f7556569822706573044f77f1ce5218bf6702

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7604cea51b5eeb03bd20cc8621412da96544e1a0de21a71f2779e06a5ef28044
MD5 29b8d902c7f566440386115f5e5ad662
BLAKE2b-256 e623063218ff021d839b2c86d18f75bc37829789cfc7293458437d47d522ab2f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 23b0c3735754bc31c4b88f3529538553ae207bcd1bc2dcf021e63853af0d4099
MD5 9427c74e00b334c9007fce6475aeadaf
BLAKE2b-256 f93f28b7ad6eb484ec81c77622b03de991715ce293f1611916af636d1dd24fd3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c1cd95f2a0679b657d4688a0945e7b9826d7b6a434e4b3edd5dd1eeb33b2a2b3
MD5 94283c2cb3a20f960deae7117c41753a
BLAKE2b-256 7a9c6d7883b03bde68decaa607e617d752d1996ac8e7cfabfa2ef3c857fd5ec2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.6-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 249.7 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.6-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 c8eda633a471503b94626b81c86631c968bff098bd2359cb170be75fadb6007e
MD5 2f77540fef4175228a1b0e55ef03f13a
BLAKE2b-256 b16c23d3111172494f01e50e1a132fcf1fd545b28857d0fcdc1ec7b15d9392d2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 252.5 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.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4ad4f0a73f83290820c17fae2647f15482fecbb56f216785ea901d4865e43c02
MD5 5814dc649b88d70524fab7389f8de7e0
BLAKE2b-256 b410b1d1005c5f057c6eba360c6ce191245abdf6ca1547bd09582bd12df013d5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f9acc1265ff3c54e3138a0b00aef92c72aa1558b59ee1a977c384746dfa8616
MD5 c933b3664c1e56fd3231e07c4109b57f
BLAKE2b-256 b238471303565c3a89296ea1abca2a441444507fd9f640591cb334534be7b134

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9288bf9f5c8f886c91d7a1b637e8f5bc1f7ccdb95c0669cc4d38a0cd01aee0a1
MD5 45ccc9b29c51120d5cc5e722967f0a4f
BLAKE2b-256 52d662ecee2cac65722c3367cd1a0665b5e6e8f5b6bf0a14c8aae76733239dfb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ddbbf7bc668d03896fc8f8352a56a5a561c0a2b8c6fe7e6bb26604e0d600c665
MD5 2ae9a46f33d74467797e44748c28995b
BLAKE2b-256 ce4a17db0b300c97498eebb53045a5310cd15153e80afe47e03323ff81b98def

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 22e4d302622653a1beaed6ac24001cc6dc45add28a80be5fd60e27ed678da51c
MD5 b4db163ab1685e0e93467d510af993ce
BLAKE2b-256 7de4cea2f2f787d28f69d4d05d61a5f6970e030f9847cdafb85b7719750b630b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.6-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 249.8 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.6-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 48e212e1f775f83041d5c57dc07a748ece020a1afbbc46ac665e20c220662fca
MD5 28005c71b84aa5808dc130bb47f055b8
BLAKE2b-256 ab29f4bb6a3b6114a3f988d42838dc45be4c9d9e31345434d053899feafe2879

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 252.6 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.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c3a1b21491eab5eb5692b7456ec8e6d896b00d849022f09a1198be99ef301cd3
MD5 47d0e3ebcf807cd7724837e0b6150c1d
BLAKE2b-256 6598bf808f6e67b40870b3c4fbbd04060cbae1336e20eaad3f02867fe53165ad

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 23f8aabf15bd5534dfe031edae79daed0160bc199d45fc342f4196ae434fbcd8
MD5 51d96b7b1bd43a0209552432d91a8a88
BLAKE2b-256 41e8e12d4df0907d38234d427eddab8c51a7d4f2b2c7dd8d8173e170b4343fb9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fbf660982f83ee6bf2eef5bdb385568942a5a4cec510a8855f3fbe3725c70cf4
MD5 25cd4cd69ab0ae1bbde1ce9f81e093e4
BLAKE2b-256 19c9adec392a6357e1d2547b402c8af3d0c7f44fb17fd616f24178fec7a0ec84

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9da02ee4aeb1abcca7b403e7ce08e8557b8d2aca1547b9b56f131bc036c5bb19
MD5 12f08dad779c6287d824b6427ebc60ba
BLAKE2b-256 c01fb9218bb6ee211d59041c156145c0fca64ab189d0a6d7962d1352ba9d987e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.6-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 13680a14c1fdcdc78a0056b1bfc122ba79f01d7fe0c24dbbf8c3b9b4f3568ac2
MD5 ef9c52a29dd37f5525b34b235f3951ad
BLAKE2b-256 c0a588ae415d180971def93dd87d7fc501cc324e5bea3cf4b5fa7ab0e2649f54

See more details on using hashes here.

Provenance

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