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]) ; Host (Python) Imports
  (:require [std.json :as j])           ; Spork Imports

;; 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}'

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
Vector random read (10k reads) 0.46 ms 1.44 ms ~3x slower
Build collection from range(N) 2.84 ms 5.38 ms ~2x slower
Copy & update one list/vec element 134.59 µs 0.79 µs ~170x faster
Copy & update one map entry 1.01 ms 1.07 µs ~940x faster
Copy & update one set element 416.82 µs 0.90 µs ~460x faster

Benchmarks run on: AMD Ryzen 7 6800H, Linux 6.12, CPython 3.13.5

See Benchmarks for full details and methodology.

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.8.tar.gz (275.5 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.8-cp313-cp313-win_arm64.whl (263.0 kB view details)

Uploaded CPython 3.13Windows ARM64

spork_lang-0.1.8-cp313-cp313-win_amd64.whl (266.9 kB view details)

Uploaded CPython 3.13Windows x86-64

spork_lang-0.1.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (554.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

spork_lang-0.1.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (557.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

spork_lang-0.1.8-cp313-cp313-macosx_11_0_arm64.whl (267.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spork_lang-0.1.8-cp313-cp313-macosx_10_13_x86_64.whl (269.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

spork_lang-0.1.8-cp312-cp312-win_arm64.whl (263.0 kB view details)

Uploaded CPython 3.12Windows ARM64

spork_lang-0.1.8-cp312-cp312-win_amd64.whl (266.9 kB view details)

Uploaded CPython 3.12Windows x86-64

spork_lang-0.1.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (554.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

spork_lang-0.1.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (557.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

spork_lang-0.1.8-cp312-cp312-macosx_11_0_arm64.whl (267.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spork_lang-0.1.8-cp312-cp312-macosx_10_13_x86_64.whl (269.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

spork_lang-0.1.8-cp311-cp311-win_arm64.whl (263.6 kB view details)

Uploaded CPython 3.11Windows ARM64

spork_lang-0.1.8-cp311-cp311-win_amd64.whl (266.4 kB view details)

Uploaded CPython 3.11Windows x86-64

spork_lang-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (524.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

spork_lang-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (533.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

spork_lang-0.1.8-cp311-cp311-macosx_11_0_arm64.whl (267.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spork_lang-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl (269.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

spork_lang-0.1.8-cp310-cp310-win_arm64.whl (263.7 kB view details)

Uploaded CPython 3.10Windows ARM64

spork_lang-0.1.8-cp310-cp310-win_amd64.whl (266.5 kB view details)

Uploaded CPython 3.10Windows x86-64

spork_lang-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (519.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

spork_lang-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (529.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

spork_lang-0.1.8-cp310-cp310-macosx_11_0_arm64.whl (268.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spork_lang-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl (269.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: spork_lang-0.1.8.tar.gz
  • Upload date:
  • Size: 275.5 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.8.tar.gz
Algorithm Hash digest
SHA256 a622d475d7d602f0b09f1c1ac9be46400f9e2b7e41b8e75033cb5708b48521cc
MD5 bec1c49cace067f37e9f5b4effefd2ce
BLAKE2b-256 f1590f28f14c70e90f4482e00068b8cef3c611fb4e3da4993e04d4e6d010e747

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.8-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 263.0 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.8-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 d282a33863cd31cc3f7f5f49f0ce6a3236680ae81c2728e870c5ccb13155ea68
MD5 f7c2f01ec12290feadd6cf177c326de0
BLAKE2b-256 db0ed088e6c86ffe51ea8949cc50e411f765a24dede2476cdc6b8a31bd47b32a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.8-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 266.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.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e8c8e32ffe309aa778d5c9c45e513adc28d9cbcda0a2f688c87c485b3dbe8bca
MD5 448eb63a262877f74aa306ec88271b03
BLAKE2b-256 b8890621c05543a1a44d34b41645f8c87a9e8a32999c3250a0ae41aaea8c7133

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 be0893461c337a2c2887b98cab61a1a6924d3cd793396a2ea214a3393eeaa192
MD5 930395f48e35a33f74edb8279530bf51
BLAKE2b-256 615ea3fd68e9f61876f4a55cd066648eab62412b4291e302f9c387076b029842

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5b4eee94b6daf8ab14130bf7c96255c5a4024fbbb8e1756fcfba3de3dad44a69
MD5 d1d50e6a1b934e4affd44c53774e4038
BLAKE2b-256 0e85d254c18836e68f0b0d8097ec3c9b00857b6628b07bd083a61e6376c0d936

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 871e825e459792b1387c9ff30b516892208df99722f6d3f4c9ac01d48ba8ae06
MD5 3c0db03fb802fe87d511a88a07504faa
BLAKE2b-256 59185f16f3b5b2c740abe807898f3fef08e07f00ae84e0f35ed28d5c4b99fa3e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 30923ca056e7c264e04b50cdb0d5c761c7b0938e8f0b7443c48bdef26d8fd32d
MD5 4711d13520e2d379e111afa8d128b6e4
BLAKE2b-256 7963a734deedd8305f1670f6e546b9393ad147a829dfe0b62a5bcce6f4613d56

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.8-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 263.0 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.8-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 0a32d75585f7c3101179a8b54b1ebaea65395e3f9681f690c7ead9a4a5edb70e
MD5 bd14cbedb8f4dfd60b355300ef3374f8
BLAKE2b-256 60b869214639db24d4825b2b82786b9e3c8374e207228d7c3822d0c9fdce8ae9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.8-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 266.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.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5c59f52f6caf63d84d2ad69ac3169e68be8379aa23d7a9edbf9cad1eab95ac2b
MD5 9f99a38da7cf4ee4cecf10dc3731dc02
BLAKE2b-256 44f61d795113517adb7e8ab7db2a47522868b5ade1b62ff0938a217934afae71

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9ee98722dd53aa7f794d5ed5c5a694c6d355b8870d79f3191bd3a6c0413ca098
MD5 9fa3c195b002a8128c4209810030bc2c
BLAKE2b-256 612510a03a9a7ca0e1406297ea0e92832b54b9be4fb2be9a3c199e2cc23b9271

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4920c7c7b4a4fe90295776b27b685b5e2bfe69674e54df4d1b7c0dafd175c9cf
MD5 673c22cb388bf83d7a25177be7de9f0f
BLAKE2b-256 942e8b419b00c64b020d08695032c053c5ec2142603114ad8cb24c8be5daa5b9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 995a505e75216cec3fc7f4bdbb5467179b6291c11b846472857865754c504a3b
MD5 a5fb2a94b95734c1c65fe34d0bc69d1f
BLAKE2b-256 f5496613a223f8411c6eebb00e4489bf13f658bfe02b2b4fd5c1ca1c342be613

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7ca6ca5fd745e378379b6644fa07bb63f822e5ec708faa4f49a13db9ef2548f9
MD5 52307fc83aeda3f74c2a9ed831a3f66b
BLAKE2b-256 7d3b165550fc5c48e919ab5853a333ca63380bd10a3a48be5e9a81b5ac7ffe77

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.8-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 263.6 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.8-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 4adf42167f273e543c5f2271d58ab4e75f31912d0866b59dde23366a5c112b14
MD5 d23ac4f774c43ab3e5c5cf2b7ecd596d
BLAKE2b-256 463c40f8f30fbcbcab6adbe0f2b80a55177b7ef7884fd9f7234c5233e9cfa1a4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.8-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 266.4 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.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 05a30c153558cef78dbe68c9f7f86a27f78558b183d68fd02541ab1859efdcf7
MD5 8a9327062c7e7739c9140f95aebaa811
BLAKE2b-256 86140431e6fa34c7e09758086a20babdf193df3ee6f04ee3204ce5808d1ccba2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f539de47276e5b94a2710fbaec4ea165bc3eeac961b8d0f5c9d87e1b892cfe59
MD5 2582de59deebdda8deadc576f2daf265
BLAKE2b-256 be999bb541bc360d864074280a900c38aca1e6cdc966b90162140d5488c7df89

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4ba1bb4ed03bb81ab661ca2b09ff5a1c5238d1e97b089981bee9f6eb089cef22
MD5 69723465ea56e442f9ca47c1df8bd1da
BLAKE2b-256 f7c76529e123ad1a61a892fe459e3e592ec4b9ac5a523ab692610da3f919ece7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c5fa36fc53648205dceb5894888c2fb88b573e6fde50c8bc9070221a10ad1663
MD5 179344bed0fe14292fabb8b34dc13445
BLAKE2b-256 07653a876d4f8f316748ad5278377e2acab35670365f22d04ebdaf2c766ab65e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a59894388337dc28ae4ed10d107ab560805ff0236bb11569554c9f889c2f66ba
MD5 ec9a6a4a124b08a25b36b7fa7cccf31b
BLAKE2b-256 2483e0d9933a1c61b2cf246bbf6614c448fc16f3d3f7ff630a9c89e318b57837

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.8-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 263.7 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.8-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 611ce99ac8f700df843041bdc418e4340a9093282b4335e9e43c6d731902a081
MD5 7a5a5b2ca43536b28870f229ae8d26f8
BLAKE2b-256 74867eee9dde48e4628bec0d51d4083e4bb6d3161708f858c1296618f5167e72

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spork_lang-0.1.8-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 266.5 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.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e003903baf6221434d727b1891870380e881ee8863d1cd161624c6c9417afb88
MD5 3f90d406c431e49b50296f5ac0e7f80e
BLAKE2b-256 dd2c0cd3ea65a50ed88dd654d6daf5ccd68de03e59c11ecbf3c379c8a12e0c2f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4909d88b09c5746607a1cc269255347fb1444132c21310311eb2c466c66947da
MD5 cd3c28bdf0041f67c5f915f760d9d9d0
BLAKE2b-256 27e87c9c4afd27da944f7e516c231f9473952f92f8f5a498ba734b62039e936d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0c51d7658e1a9e46110d766936e2776f0a3ab23b9984670e9ffaa551e6f2e6d2
MD5 87c45de17364db37b422864461ebc8e3
BLAKE2b-256 482d76ecc40737518b24c0061a12c280a777436322176085969cb8891b596f61

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0430b15bc1ed2512e04373befc17ede334ee6ac2f60a1458ee9c797a7f579de3
MD5 41c68780581ce9fe8492ef2636b0f628
BLAKE2b-256 e91a409ea90d74104b8ed7c4e60deaf98e6ebd1ad48a771c84362dc6c8b4daff

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for spork_lang-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9d86c09c4b28c72130bb4843c830c5790caa2dcdb0fb7a83d7a6c638073d4108
MD5 fe05f01826d533bd861dec2f30a92913
BLAKE2b-256 2e6586e39fd43546568d2984e13a3442d24d711cb9d5c566b3f9668994b0eb27

See more details on using hashes here.

Provenance

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