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

Benchmarks are available in the docs/ folder for more detailed performance characteristics of Spork's data structures.

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.7.tar.gz (262.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.7-cp313-cp313-win_arm64.whl (252.7 kB view details)

Uploaded CPython 3.13Windows ARM64

spork_lang-0.1.7-cp313-cp313-win_amd64.whl (256.6 kB view details)

Uploaded CPython 3.13Windows x86-64

spork_lang-0.1.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (543.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

spork_lang-0.1.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (547.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

spork_lang-0.1.7-cp313-cp313-macosx_11_0_arm64.whl (257.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spork_lang-0.1.7-cp313-cp313-macosx_10_13_x86_64.whl (259.7 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

spork_lang-0.1.7-cp312-cp312-win_arm64.whl (252.7 kB view details)

Uploaded CPython 3.12Windows ARM64

spork_lang-0.1.7-cp312-cp312-win_amd64.whl (256.7 kB view details)

Uploaded CPython 3.12Windows x86-64

spork_lang-0.1.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (543.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

spork_lang-0.1.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (547.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

spork_lang-0.1.7-cp312-cp312-macosx_11_0_arm64.whl (257.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spork_lang-0.1.7-cp312-cp312-macosx_10_13_x86_64.whl (259.7 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

spork_lang-0.1.7-cp311-cp311-win_arm64.whl (253.3 kB view details)

Uploaded CPython 3.11Windows ARM64

spork_lang-0.1.7-cp311-cp311-win_amd64.whl (256.2 kB view details)

Uploaded CPython 3.11Windows x86-64

spork_lang-0.1.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (513.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

spork_lang-0.1.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (523.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

spork_lang-0.1.7-cp311-cp311-macosx_11_0_arm64.whl (257.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spork_lang-0.1.7-cp311-cp311-macosx_10_9_x86_64.whl (259.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

spork_lang-0.1.7-cp310-cp310-win_arm64.whl (253.4 kB view details)

Uploaded CPython 3.10Windows ARM64

spork_lang-0.1.7-cp310-cp310-win_amd64.whl (256.3 kB view details)

Uploaded CPython 3.10Windows x86-64

spork_lang-0.1.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (509.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

spork_lang-0.1.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (519.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

spork_lang-0.1.7-cp310-cp310-macosx_11_0_arm64.whl (257.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spork_lang-0.1.7-cp310-cp310-macosx_10_9_x86_64.whl (259.5 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: spork_lang-0.1.7.tar.gz
  • Upload date:
  • Size: 262.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.7.tar.gz
Algorithm Hash digest
SHA256 84f751d9d94077a7a87d097d34696282cbb0d3ad3a163753a0ed077f19a001f4
MD5 ec6046b5a06dc72284c367f3be588861
BLAKE2b-256 bb8c7122fa37d92870410e634cf2f37145fb2a277afd9226f98840738d5ad79b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.7-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 252.7 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.7-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 3b7ed8e052a0bfde3e0cec47d39bfbc40171198438e29ee1b3871bd3d990de62
MD5 e2ddf6de3ed1a5a512096648c281a4e5
BLAKE2b-256 264287075049d85c66c173f6702612711bdf692bfc7dcab00950a3990ce314c6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.7-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 256.6 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.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1db8ce0ac7ca2f9d13d54a38bced85342762416b49d2ca2318ebf076cf94313c
MD5 82baf7d7ca24c6c63f19e4b7f951820b
BLAKE2b-256 d82fa3a707b52435e4de60a61e963b80b5a686b4a401973e7532e7425075a9fd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3750c5ebe4c0c9bbdf44c711105ea927f037452ff417539889cb32cc4e1daafa
MD5 7a7c9c1a7969a228597e3bbce8b826a0
BLAKE2b-256 73048bb6f1779a4d4dbf011e12c91500b476221ff920d747528264beb4a8fadb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cbe92baea34f4705170b1eb535a569b3b67d85b6b661294e17c21a0dde7a09df
MD5 5a5900a6d7cfb43864efb1043772e89c
BLAKE2b-256 beb9a009bd80285700eeb5e09da2a6b589b6533a117f61e08d80c661803ad048

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ac35612b500bfb70d14163990e6b27b1d3a4a74d9ef4d96316125ccf3f5499f
MD5 fcd1000541749e0c154c49eec02494ee
BLAKE2b-256 baf34a4aa8a9e494359b5672fc0e4f758b4a97791befc2d779362bb7bec8bbed

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 734d43440c95870ab6a2db4c78d7694a1c61d199f0791f02c2102d42dc1d2a2f
MD5 914725a1fe2943fbdfb8b280f6298096
BLAKE2b-256 4de8d189b3aa37c330db77dcdd123f959530e8813a05175649ba3e0a4413527f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.7-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 252.7 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.7-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 60704206a41f973f4c365f854a7701c5aaf58d8f69718f615276b7b3ff63c64a
MD5 69baa762f56cc8e3dc55260b6addcb7d
BLAKE2b-256 f60eb8b091340b71420a2b0cbfb20961def5c8d13f8132a6e7b9eb1ef479735e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 256.7 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.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 99db59342dcd0104bd7536fb5e4f01086da831f7f7a46c509366ee08094d675f
MD5 20b7a519c2735d360e8e611ada20284d
BLAKE2b-256 70bd1647b1aee7c93e5f0aeefe0448bb06f1b4d111a89bb114f968dbdfcd069f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ff1be17ae1e7f915abd039ff98a88d60b8875dfb2037523fde654dda89a6f0c4
MD5 f0d7d8bb92e352c690f2654270359ec4
BLAKE2b-256 af2b4d68b9f5f6e34dbd326277decd87f483332398abaaf74ea037de9f5cdcd1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cae230e4a4ccb40e2c59ddd987f2aa82362bfe42a9c0b695f307cd667de5761e
MD5 f181da2238b31454752f0517d90a03ae
BLAKE2b-256 6a96bf55ff247ec80a8fb47602dca89789ef1f3c71a2dfea1f4e052f1e5bb0d6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 450e5bbcd3a35abe4614b01eeb50edd8d1bfe5e99fa8a906826d8d5af2c6df46
MD5 a4489b07316ffcbcf37944602e4eb917
BLAKE2b-256 7e00aa4d5d30ba7202461dce6c15307367ccfc6ceda95aeb4a349b7308cf7607

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 da2eac6428e1df38d4cf6dd48a2f2ab0182739eacda077fe260911590814e290
MD5 4c7d6f95e19789ad9fdbd1c1630b6737
BLAKE2b-256 87ba4b53d6e1d5b4942f61cad85b9da0cb810990af6fefacf18b16be09d570c0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.7-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 253.3 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.7-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 3963df448f48a375daa653f1c72c09ad6043a59e8f7d37d55b329b6ab87f9e90
MD5 84bb94957162db24c0b2a969d597a2b0
BLAKE2b-256 d924617be880dea55027facce94a6175bb8b2c64c332ec7166f25a38e7ce03c2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 256.2 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.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3f043715c6044dec1f3592731a5ffeff6bc900beccf0ac8f43c0ed01665b16cc
MD5 b09afce2ad3390674e4d56fbaa939ff9
BLAKE2b-256 bf8d19da39b4a562460b8193905b7bcd3e891c1229288603921c05e56ac39b76

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10f307744e0e3a661d54f3f4686a78bde74dd427ae98165949d544271a36e6f0
MD5 4e4ed952c42385ca824d4c83e2224e9c
BLAKE2b-256 7dd1f58698bd3650747f03530631f21c18c0a303a0f8ceafe41a31d86c70fcd8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9a4f94ef6f1b7d6d4e9af01585c361d43d5a49079ab4d1cc7d8ccc18c755cdb3
MD5 4b3bb689d6e01366828a06cdc80d6953
BLAKE2b-256 f8519d5c82df7415abd22e55b3290638c76a60a19ee2309a6c685c6aa6be40ab

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3b5ce31fbc4c127f4fb08f052997408009f457d4add50f0be00e26fd1bb5a265
MD5 d47aa81556149e98991ee8fb53f795fd
BLAKE2b-256 fa7f6435ed8c15a1957bf62e4eaa19007a9dfaecea057cbed6f75be2894acdce

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 17d15b53b80def1ca849993678a0de47a594d8ca22f33cfe7ad31fef8f950636
MD5 857a20123905c7592608e44236d37546
BLAKE2b-256 86758e24b0095f01316eef7237ab7bf7e32ee361a85d16d22fbffe906366f9ee

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.7-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 253.4 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.7-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 ff0f456d88ede52b6109e5cfac62ce969f308a7f379f284625018d8dc2d1cb85
MD5 b749c5912650295b8fca904157252c14
BLAKE2b-256 749527dcc5568fd0e1ecc7e848f8d32fc69f7b966898ab03e4f7806f1ee0c667

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.7-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 256.3 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.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8e2dea9286b41b1aa49b048c2fcdac11866bbcc329c04f460aa298602a93b981
MD5 77158ca4a6aa70eabf36f711667f3ad8
BLAKE2b-256 bd30175507b649620f8bd7f5171325d3ff18c952da88965eee7545ac18740499

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5cbacb47a4823ee65af5fce4f9637f522faa875e58d0286f23a48c45daa8f615
MD5 af64e55e705c303684e03b5ce75bb93c
BLAKE2b-256 a97d29288e089b4b8a1f67da53eaacc81cf9dcef55b9ddf4b7a1bab2587f72f2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 94c8920e8c48e1bc11ee785d8efe91391eca48c80278a231fa03627369af4b6e
MD5 1d03003a4d554628df8bc02e54f20eba
BLAKE2b-256 433952a7977baf1662648c194cd8d254f9686acf28e2a7db74ae2d41f6876af5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 79b6bb0dc0e4c353b4f99cf7403742d6924e50b76062f8b117fac0d3aca55657
MD5 fc5779d1a71c52f5c6bff1fff529bd53
BLAKE2b-256 b39936d1b35e46bec79707782da5d9a17ee3f024e6e5e79c17e22e6950b32827

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ef0167b70ba197d7d011e0a37d1df90d5df098b58a7e6a70e29ef006b3b459cd
MD5 bd993fe957fdfcfa356a7ea4fbdc3966
BLAKE2b-256 b3f1ebf46158893323149bf3f6f54dcd9c1124074c9ecad6e0ae6b86cb7dc4e6

See more details on using hashes here.

Provenance

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