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
  • 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.3.tar.gz (258.9 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.3-cp313-cp313-win_arm64.whl (244.8 kB view details)

Uploaded CPython 3.13Windows ARM64

spork_lang-0.1.3-cp313-cp313-win_amd64.whl (248.5 kB view details)

Uploaded CPython 3.13Windows x86-64

spork_lang-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (518.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

spork_lang-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (522.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

spork_lang-0.1.3-cp313-cp313-macosx_11_0_arm64.whl (249.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spork_lang-0.1.3-cp313-cp313-macosx_10_13_x86_64.whl (251.5 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

spork_lang-0.1.3-cp312-cp312-win_arm64.whl (244.8 kB view details)

Uploaded CPython 3.12Windows ARM64

spork_lang-0.1.3-cp312-cp312-win_amd64.whl (248.5 kB view details)

Uploaded CPython 3.12Windows x86-64

spork_lang-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (518.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

spork_lang-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (522.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

spork_lang-0.1.3-cp312-cp312-macosx_11_0_arm64.whl (249.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spork_lang-0.1.3-cp312-cp312-macosx_10_13_x86_64.whl (251.6 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

spork_lang-0.1.3-cp311-cp311-win_arm64.whl (245.0 kB view details)

Uploaded CPython 3.11Windows ARM64

spork_lang-0.1.3-cp311-cp311-win_amd64.whl (248.1 kB view details)

Uploaded CPython 3.11Windows x86-64

spork_lang-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (491.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

spork_lang-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (501.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

spork_lang-0.1.3-cp311-cp311-macosx_11_0_arm64.whl (249.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spork_lang-0.1.3-cp311-cp311-macosx_10_9_x86_64.whl (251.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

spork_lang-0.1.3-cp310-cp310-win_arm64.whl (245.1 kB view details)

Uploaded CPython 3.10Windows ARM64

spork_lang-0.1.3-cp310-cp310-win_amd64.whl (248.2 kB view details)

Uploaded CPython 3.10Windows x86-64

spork_lang-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (487.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

spork_lang-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (496.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

spork_lang-0.1.3-cp310-cp310-macosx_11_0_arm64.whl (249.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spork_lang-0.1.3-cp310-cp310-macosx_10_9_x86_64.whl (251.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: spork_lang-0.1.3.tar.gz
  • Upload date:
  • Size: 258.9 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.3.tar.gz
Algorithm Hash digest
SHA256 04a7167c54003ffd24509978a0e01e9cff552322b142850ad61e753dcaeaabac
MD5 f4f0f0527b4ad0953cee711594cd64fa
BLAKE2b-256 abefff9fd5eb458687e7a6b0827c44b2bd9bbcd2322689133a7f2367cffe425b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.3-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 244.8 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.3-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 7a7e19910c97881f84a97a3d5a62d6ac1e5618b84bf05f3275391365d6e60a06
MD5 8b058fb578ded3f8a0a2da1964335b68
BLAKE2b-256 bb5a92d02a5c6944119eb60389edf80508d82316af8cd6d3972d504ae96ddf89

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 248.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.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a8adb2ac5c4a32e6c7e1d23a8b4301129a415ee0e597689882b01bc0d59d1e26
MD5 364602837894b6c225cc5321d65bdfbc
BLAKE2b-256 270c3db531e4180b9cbfd374e18b632f3978949e500c7a3b68602407e9b9b664

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3478f75e2047c9e4639e652f99f7d20e9ff5f929f824066b68e16a438a667dd8
MD5 60b93ef3bff69468b2c5702f017b200e
BLAKE2b-256 fb1080079be429f4a704b871a28f75abc72f8aa985f1f521c2675b087587362a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 53cf59e6a29fe36c34112df0b7adc85dfc0ec36be2d8b2fcd42332a9c9e3bad4
MD5 bac8112fa02b04fa06b65f271c6d4295
BLAKE2b-256 495dca8ebd3da8f9c4f6a83eea73390028060a4766a3284135ff8fecdd22dcad

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6be28a1d4679c2015a5bc1717023ac0e418ac030ee0c6a5c1c3ce914c09071d5
MD5 26ef6f039de0b73fbe36040918f9837e
BLAKE2b-256 e5b6b1cf5b4b47e62cc4b78a7287503806350908460439307defe31bd2ff9894

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 47e09d9c5af1662c73f6a8dfe4d2b51a759702648e276b83f019aca0d9a00c3d
MD5 b79adfd6d31364b929312418967c8e59
BLAKE2b-256 3dcb8b2d660b0591e801bece07528b8fa8cfacf64becda5eb789787fc113d58a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.3-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 244.8 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.3-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 cead17fdfa085d1e8ff206c14bc6e7fe2cbf32f5c8314a1d4426e69af0fb86bf
MD5 83a0700b4fadc6522e76df5a301d7c9c
BLAKE2b-256 29f9e7b9a3fe993d64f2152544cd4442aa20102d99669cde46f6966cd8565aea

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 248.5 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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bea905e5101d583f1c844e1bc6a874aa8f4fe255cd1a65e5c5139bc7f430dd09
MD5 27e3d36f659f69696c7c30fba2c0a3e3
BLAKE2b-256 ecd0de13b621584c29dea85fbd2f7cc7a28c08f5d981eca29bfae90c9d05064f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24429d1c9cce4bc1b523a2b449c11fc0d6d9c9a1f1a87248539fa5d99b1efc33
MD5 fff6151a3e41c6f24d73afb7d5f413cd
BLAKE2b-256 ca8eb2c29f16fea2c8e42cbe0d5372f6a8d81ba172516440dde2ae8734e9810c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8d2ab661aa64253ffd81cb91306722135d953c36ea81b3b172f22e996ccef4a6
MD5 1447d04354915277b9ecd28cfb3920ee
BLAKE2b-256 8905d5c5ca5294f1dd1bcee55977382361582e81c0dc89fa644c91f90dd4c234

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a6382571284d204edcb2b44e6078262475873f915a1a5459ec64d00581c3d3c
MD5 67b9aacb161b663c65e1b66610e5dc6e
BLAKE2b-256 a34deb24256ed764414cb03f36d63911fa879d96406c9f1301e0618dd610beef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e7abd11c4ce85f6d19fbb9ed98e49e81c3d1bbafb967b8e4401610f53c066577
MD5 500467d466f691ca96a7339048178462
BLAKE2b-256 659d82e79b967b8989df6d082ddac4a6adfe54d48229e94746badb4debd92d2b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.3-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 245.0 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.3-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 2142f93dc318d380fdf6b58271200ec2588edd0d940b2940ac1e096e34cb04ea
MD5 6a8dc4518a8b7decd8e6bb9036ec140c
BLAKE2b-256 bfb6b272d557a240a3d471c12aacb32ce44bfb70c0eccd06cc4b8db69a5e41d9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 248.1 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.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 889d1bb009b33d04d8cd35772902bee6b553bbeb8befb7270fce87b17a5e8404
MD5 9caa12c030287c8a7c20fe1028c5513d
BLAKE2b-256 2090293043be054bda0d98dbd0c2bddf5b30301bbf3c251f03f64b253136a4ed

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 38fd641d4f55b895bb6a74471587dc5a1ca1732af30e8afa3a3e936e239ed2b8
MD5 6dc78e00e97d98634cb0b7caf24049e1
BLAKE2b-256 f6d9ff4c6b3d8c930a3b4654fd088b5335b129cbb9077cee30996b7aa8ec3a91

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d2c1afe9c92fdc70bcc45d652365e0d857c0870dbeb8dc02cc15eba77dd585a0
MD5 d946543c8d4c34e37c10dccc7038a0e0
BLAKE2b-256 46de5b064b56f45b475b7020b593e8bec365906c2b9d109297c94cb0f4927e92

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b944f3652470f88ac90286ae124fd17831526ca19985784529303a16dce6514c
MD5 4e498276a3da99c475d086a9c5398741
BLAKE2b-256 6a4fea72f4f965b66b8e58b8082899041866e51a33be41c712cc12844ee3f9e0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8b709f5791409f73805e1b9f59eae33e0c470df4804395980a2e59971183b6b8
MD5 006a0f1e4317db218367d234fd89af9c
BLAKE2b-256 193c028fd3fa3e657a369b2f40b7d7bbdaec0c2604a33c62440d7869a8358030

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.3-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 245.1 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.3-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 ee30388ef259571f912c01fae15f106b30446f24f36ce5fea433b4b5d27f934b
MD5 938931b9fea7e9f3a54eadc4c8dd478f
BLAKE2b-256 a05b202edef2758c3583bbf2316ef1a42275b7f2e7a0ffdf8bf5f69672785b77

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 248.2 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.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d65fd3adbd44ff51fa81bcf0ade227ac740d4cfb78b2c069eb0d603c4a286435
MD5 8e281a2da37b6c308a23a05ee37d1b65
BLAKE2b-256 a12d9e9866079ef9b16a47c6ce419e4c469b53b388046d7473a8718a6c6d22a1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5c925b5ea7fa314b897d5714d3853461b92cee46b18b60a04cf7b4beb851e4b7
MD5 8e5ae30a5370dd5c7386a1139573e301
BLAKE2b-256 5c8128c802a3f6687e75fd2f0e0712dddecd4aec48f9fe5b42b00779fa59ab54

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 06e9d58e966e3dbc7e6f3bbaa6a611af8a7f25ccc205dc9989789ecc45b34945
MD5 e835099490ad69e250187fef49533acc
BLAKE2b-256 9fe5fd23b7cdd9055afd0de4aebe8de614adba8a03d41349661542840b9e8865

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76abdaafed594c6217e76dca4cfbee80747d9b3ace3d2db9248504c9611efb3e
MD5 889640afca8d721a88c91ab2ccd62530
BLAKE2b-256 0e90ce726cff16ba2c34507120d91118b12f2ff2d8bf7d246dfdcd349385751c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.3-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3599dc75a7254563e1f27bc941db44a36348a440c41ba5cd783ede1e8511344a
MD5 c1877f810978c6c9607a33398273f087
BLAKE2b-256 5d0b142b333e2d9656fe8cf9de461b6429688b8859b5df1eb0506f8ac05068e7

See more details on using hashes here.

Provenance

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