Skip to main content

A minimal, secure TypeScript interpreter for AI agents — Python bindings

Project description

Zapcode

Zapcode

Run AI code. Safely. Instantly.

A minimal, secure TypeScript interpreter written in Rust for use by AI agents

CI crates.io npm PyPI License


Experimental — Zapcode is under active development. APIs may change.

Why agents should write code

AI agents are more capable when they write code instead of chaining tool calls. Code gives agents loops, conditionals, variables, and composition — things that tool chains simulate poorly.

But running AI-generated code is dangerous and slow.

Docker adds 200-500ms of cold-start latency and requires a container runtime. V8 isolates bring ~20MB of binary and millisecond startup. Neither supports snapshotting execution mid-function.

Zapcode takes a different approach: a purpose-built TypeScript interpreter that starts in 2 microseconds, enforces a security sandbox at the language level, and can snapshot execution state to bytes for later resumption — all in a single, embeddable library with zero dependencies on Node.js or V8.

Inspired by Monty, Pydantic's Python subset interpreter that takes the same approach for Python.

Alternatives

Language completeness Security Startup Snapshots Setup
Zapcode TypeScript subset Language-level sandbox ~2 µs Built-in, < 2 KB npm install / pip install
Docker + Node.js Full Node.js Container isolation ~200-500 ms No Container runtime
V8 Isolates Full JS/TS Isolate boundary ~5-50 ms No V8 (~20 MB)
Deno Deploy Full TS Isolate + permissions ~10-50 ms No Cloud service
QuickJS Full ES2023 Process isolation ~1-5 ms No C library
WASI/Wasmer Depends on guest Wasm sandbox ~1-10 ms Possible Wasm runtime

Why not Docker?

Docker provides strong isolation but adds hundreds of milliseconds of cold-start latency, requires a container runtime, and doesn't support snapshotting execution state mid-function. For AI agent loops that execute thousands of small code snippets, the overhead dominates.

Why not V8?

V8 is the gold standard for JavaScript execution. But it brings ~20 MB of binary size, millisecond startup times, and a vast API surface that must be carefully restricted for sandboxing. If you need full ECMAScript compliance, use V8. If you need microsecond startup, byte-sized snapshots, and a security model where "blocked by default" is the foundation rather than an afterthought, use Zapcode.

Benchmarks

All benchmarks run the full pipeline: parse → compile → execute. No caching, no warm-up.

Benchmark Zapcode Docker + Node.js V8 Isolate
Simple expression (1 + 2 * 3) 2.1 µs ~200-500 ms ~5-50 ms
Variable arithmetic 2.8 µs
String concatenation 2.6 µs
Template literal 2.9 µs
Array creation 2.4 µs
Object creation 5.2 µs
Function call 4.6 µs
Loop (100 iterations) 77.8 µs
Fibonacci (n=10, 177 calls) 138.4 µs
Snapshot size (typical agent) < 2 KB N/A N/A
Memory per execution ~10 KB ~50+ MB ~20+ MB
Cold start ~2 µs ~200-500 ms ~5-50 ms

No background thread, no GC, no runtime — CPU usage is exactly proportional to the instructions executed.

cargo bench   # run benchmarks yourself

Installation

TypeScript / JavaScript

npm install @unchartedfr/zapcode        # npm / yarn / pnpm / bun

Python

pip install zapcode                     # pip / uv

Rust

# Cargo.toml
[dependencies]
zapcode-core = "1.0.0"

WebAssembly

wasm-pack build crates/zapcode-wasm --target web

Basic Usage

TypeScript / JavaScript

import { Zapcode, ZapcodeSnapshotHandle } from '@unchartedfr/zapcode';

// Simple expression
const b = new Zapcode('1 + 2 * 3');
console.log(b.run().output);  // 7

// With inputs
const greeter = new Zapcode(
    '`Hello, ${name}! You are ${age} years old.`',
    { inputs: ['name', 'age'] },
);
console.log(greeter.run({ name: 'Zapcode', age: 30 }).output);

// Data processing
const processor = new Zapcode(`
    const items = [
        { name: "Widget", price: 25.99, qty: 3 },
        { name: "Gadget", price: 49.99, qty: 1 },
    ];
    const total = items.reduce((sum, i) => sum + i.price * i.qty, 0);
    ({ total, names: items.map(i => i.name) })
`);
console.log(processor.run().output);
// { total: 127.96, names: ["Widget", "Gadget"] }

// External function (snapshot/resume)
const app = new Zapcode(`const data = await fetch(url); data`, {
    inputs: ['url'],
    externalFunctions: ['fetch'],
});
const state = app.start({ url: 'https://api.example.com' });
if (!state.completed) {
    console.log(state.functionName);  // "fetch"
    const snapshot = ZapcodeSnapshotHandle.load(state.snapshot);
    const final_ = snapshot.resume({ status: 'ok' });
    console.log(final_.output);  // { status: "ok" }
}

See examples/typescript/basic.ts for more.

Python

from zapcode import Zapcode, ZapcodeSnapshot

# Simple expression
b = Zapcode("1 + 2 * 3")
print(b.run()["output"])  # 7

# With inputs
b = Zapcode(
    '`Hello, ${name}!`',
    inputs=["name"],
)
print(b.run({"name": "Zapcode"})["output"])  # "Hello, Zapcode!"

# External function (snapshot/resume)
b = Zapcode(
    "const w = await getWeather(city); `${city}: ${w.temp}°C`",
    inputs=["city"],
    external_functions=["getWeather"],
)
state = b.start({"city": "London"})
if state.get("suspended"):
    result = state["snapshot"].resume({"condition": "Cloudy", "temp": 12})
    print(result["output"])  # "London: 12°C"

# Snapshot persistence
state = b.start({"city": "Tokyo"})
if state.get("suspended"):
    bytes_ = state["snapshot"].dump()          # serialize to bytes
    restored = ZapcodeSnapshot.load(bytes_)    # load from bytes
    result = restored.resume({"condition": "Clear", "temp": 26})

See examples/python/basic.py for more.

Rust
use zapcode_core::{ZapcodeRun, Value, ResourceLimits, VmState};

// Simple expression
let runner = ZapcodeRun::new(
    "1 + 2 * 3".to_string(), vec![], vec![],
    ResourceLimits::default(),
)?;
assert_eq!(runner.run_simple()?, Value::Int(7));

// With inputs and external functions (snapshot/resume)
let runner = ZapcodeRun::new(
    r#"const weather = await getWeather(city);
       `${city}: ${weather.condition}, ${weather.temp}°C`"#.to_string(),
    vec!["city".to_string()],
    vec!["getWeather".to_string()],
    ResourceLimits::default(),
)?;

let state = runner.start(vec![
    ("city".to_string(), Value::String("London".into())),
])?;

if let VmState::Suspended { snapshot, .. } = state {
    let weather = Value::Object(indexmap::indexmap! {
        "condition".into() => Value::String("Cloudy".into()),
        "temp".into() => Value::Int(12),
    });
    let final_state = snapshot.resume(weather)?;
    // VmState::Complete("London: Cloudy, 12°C")
}

See examples/rust/basic.rs for more.

WebAssembly (browser)
<script type="module">
import init, { Zapcode } from './zapcode-wasm/zapcode_wasm.js';

await init();

const b = new Zapcode(`
    const items = [10, 20, 30];
    items.map(x => x * 2).reduce((a, b) => a + b, 0)
`);
const result = b.run();
console.log(result.output);  // 120
</script>

See examples/wasm/index.html for a full playground.

AI Agent Usage

Vercel AI SDK (@unchartedfr/zapcode-ai)

npm install @unchartedfr/zapcode-ai ai @ai-sdk/anthropic  # or @ai-sdk/amazon-bedrock, @ai-sdk/openai

The recommended way — one call gives you { system, tools } that plug directly into generateText / streamText:

import { zapcode } from "@unchartedfr/zapcode-ai";
import { generateText } from "ai";
import { anthropic } from "@ai-sdk/anthropic";

const { system, tools } = zapcode({
  system: "You are a helpful travel assistant.",
  tools: {
    getWeather: {
      description: "Get current weather for a city",
      parameters: { city: { type: "string", description: "City name" } },
      execute: async ({ city }) => {
        const res = await fetch(`https://api.weather.com/${city}`);
        return res.json();
      },
    },
    searchFlights: {
      description: "Search flights between two cities",
      parameters: {
        from: { type: "string" },
        to: { type: "string" },
        date: { type: "string" },
      },
      execute: async ({ from, to, date }) => {
        return flightAPI.search(from, to, date);
      },
    },
  },
});

// Works with any AI SDK model — Anthropic, OpenAI, Google, etc.
const { text } = await generateText({
  model: anthropic("claude-sonnet-4-20250514"),
  system,
  tools,
  messages: [{ role: "user", content: "Weather in Tokyo and cheapest flight from London?" }],
});

Under the hood: the LLM writes TypeScript code that calls your tools → Zapcode executes it in a sandbox → tool calls suspend the VM → your execute functions run on the host → results flow back in. All in ~2µs startup + tool execution time.

See examples/typescript/ai-agent-zapcode-ai.ts for the full working example.

Anthropic SDK

TypeScript:

import Anthropic from "@anthropic-ai/sdk";
import { Zapcode, ZapcodeSnapshotHandle } from "@unchartedfr/zapcode";

const tools = {
  getWeather: async (city: string) => {
    const res = await fetch(`https://api.weather.com/${city}`);
    return res.json();
  },
};

const client = new Anthropic();
const response = await client.messages.create({
  model: "claude-sonnet-4-20250514",
  max_tokens: 1024,
  system: `Write TypeScript to answer the user's question.
Available functions (use await): getWeather(city: string) → { condition, temp }
Last expression = output. No markdown fences.`,
  messages: [{ role: "user", content: "What's the weather in Tokyo?" }],
});

const code = response.content[0].type === "text" ? response.content[0].text : "";

// Execute + resolve tool calls via snapshot/resume
const sandbox = new Zapcode(code, { externalFunctions: ["getWeather"] });
let state = sandbox.start();
while (!state.completed) {
  const result = await tools[state.functionName](...state.args);
  state = ZapcodeSnapshotHandle.load(state.snapshot).resume(result);
}
console.log(state.output);

Python:

import anthropic
from zapcode import Zapcode

client = anthropic.Anthropic()
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    system="""Write TypeScript to answer the user's question.
Available functions (use await): getWeather(city: string) → { condition, temp }
Last expression = output. No markdown fences.""",
    messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
)
code = response.content[0].text

sandbox = Zapcode(code, external_functions=["getWeather"])
state = sandbox.start()
while state.get("suspended"):
    result = get_weather(*state["args"])
    state = state["snapshot"].resume(result)
print(state["output"])

See examples/typescript/ai-agent-anthropic.ts and examples/python/ai_agent_anthropic.py.

Multi-SDK support

zapcode() returns adapters for all major AI SDKs from a single call:

const { system, tools, openaiTools, anthropicTools, handleToolCall } = zapcode({
  tools: { getWeather: { ... } },
});

// Vercel AI SDK
await generateText({ model: anthropic("claude-sonnet-4-20250514"), system, tools, messages });

// OpenAI SDK
await openai.chat.completions.create({
  messages: [{ role: "system", content: system }, ...userMessages],
  tools: openaiTools,
});

// Anthropic SDK
await anthropic.messages.create({ system, tools: anthropicTools, messages });

// Any SDK — just extract the code from the tool call and pass it to handleToolCall
const result = await handleToolCall(codeFromToolCall);
b = zapcode(tools={...})
b.anthropic_tools  # → Anthropic SDK format
b.openai_tools     # → OpenAI SDK format
b.handle_tool_call(code)  # → Universal handler
Custom adapters

Build a custom adapter for any AI SDK without forking Zapcode:

import { zapcode, createAdapter } from "@unchartedfr/zapcode-ai";

const myAdapter = createAdapter("my-sdk", (ctx) => {
  return {
    systemMessage: ctx.system,
    actions: [{
      id: ctx.toolName,
      schema: ctx.toolSchema,
      run: async (input: { code: string }) => {
        return ctx.handleToolCall(input.code);
      },
    }],
  };
});

const { custom } = zapcode({
  tools: { ... },
  adapters: [myAdapter],
});

const myConfig = custom["my-sdk"];
from zapcode_ai import zapcode, Adapter, AdapterContext

class LangChainAdapter(Adapter):
    name = "langchain"

    def adapt(self, ctx: AdapterContext):
        from langchain_core.tools import StructuredTool
        return StructuredTool.from_function(
            func=lambda code: ctx.handle_tool_call(code),
            name=ctx.tool_name,
            description=ctx.tool_description,
        )

b = zapcode(tools={...}, adapters=[LangChainAdapter()])
langchain_tool = b.custom["langchain"]

The adapter receives an AdapterContext with everything needed: system prompt, tool name, tool JSON schema, and a handleToolCall function. Return whatever shape your SDK expects.

What Zapcode Can and Cannot Do

Can do:

  • Execute a useful subset of TypeScript — variables, functions, classes, generators, async/await, closures, destructuring, spread/rest, optional chaining, nullish coalescing, template literals, try/catch
  • Strip TypeScript types at parse time via oxc — no tsc needed
  • Snapshot execution to bytes and resume later, even in a different process or machine
  • Call from Rust, Node.js, Python, or WebAssembly
  • Track and limit resources — memory, allocations, stack depth, and wall-clock time
  • 30+ string methods, 25+ array methods, plus Math, JSON, Object, and Promise builtins

Cannot do:

  • Run arbitrary npm packages or the full Node.js standard library
  • Execute regular expressions (parsing supported, execution is a no-op)
  • Provide full Promise semantics (.then() chains, Promise.race, etc.)
  • Run code that requires this in non-class contexts

These are intentional constraints, not bugs. Zapcode targets one use case: running code written by AI agents inside a secure, embeddable sandbox.

Supported Syntax

Feature Status
Variables (const, let) Supported
Functions (declarations, arrows, expressions) Supported
Classes (constructor, methods, extends, super, static) Supported
Generators (function*, yield, .next()) Supported
Async/await Supported
Control flow (if, for, while, do-while, switch, for-of) Supported
Try/catch/finally, throw Supported
Closures with mutable capture Supported
Destructuring (object and array) Supported
Spread/rest operators Supported
Optional chaining (?.) Supported
Nullish coalescing (??) Supported
Template literals Supported
Type annotations, interfaces, type aliases Stripped at parse time
String methods (30+) Supported
Array methods (25+, including map, filter, reduce) Supported
Math, JSON, Object, Promise Supported
import / require / eval Blocked (sandbox)
Regular expressions Parsed, not executed
var declarations Not supported (use let/const)
Decorators Not supported
Symbol, WeakMap, WeakSet Not supported

Security

Running AI-generated code is inherently dangerous. Unlike Docker, which isolates at the OS level, Zapcode isolates at the language level — no container, no process boundary, no syscall filter. The sandbox must be correct by construction, not by configuration.

Deny-by-default sandbox

Guest code runs inside a bytecode VM with no access to the host:

Blocked How
Filesystem (fs, path) No std::fs in the core crate
Network (net, http, fetch) No std::net in the core crate
Environment (process.env, os) No std::env in the core crate
eval, Function(), dynamic import Blocked at parse time
import, require Blocked at parse time
globalThis, global Blocked at parse time
Prototype pollution Not applicable — objects are plain IndexMap values

The only escape hatch is external functions that you explicitly register. When guest code calls one, the VM suspends and returns a snapshot — your code resolves the call, not the guest.

Resource limits

Limit Default Configurable
Memory 32 MB memory_limit_bytes
Execution time 5 seconds time_limit_ms
Call stack depth 512 frames max_stack_depth
Heap allocations 100,000 max_allocations

Zero unsafe code

The zapcode-core crate contains zero unsafe blocks. Memory safety is guaranteed by the Rust compiler.

Adversarial test suite — 65 tests across 19 attack categories
Attack category Tests Result
Prototype pollution (Object.prototype, __proto__) 4 Blocked
Constructor chain escapes (({}).constructor.constructor(...)) 3 Blocked
eval, Function(), indirect eval, dynamic import 5 Blocked at parse time
globalThis, process, require, import 6 Blocked at parse time
Stack overflow (direct + mutual recursion) 2 Caught by stack depth limit
Memory exhaustion (huge arrays, string doubling) 4 Caught by allocation limit
Infinite loops (while(true), for(;;)) 2 Caught by time/allocation limit
JSON bombs (deep nesting, huge payloads) 2 Depth-limited (max 64)
Sparse array attacks (arr[1e9], arr[MAX_SAFE_INTEGER]) 3 Capped growth (max +1024)
toString/valueOf hijacking during coercion 3 Not invoked (by design)
Unicode escapes for blocked keywords 2 Blocked
Computed property access tricks 2 Returns undefined
Timing side channels (performance.now) 1 Blocked
Error message information leakage 3 No host paths/env exposed
Type confusion attacks 4 Proper TypeError
Promise/Generator internal abuse 4 No escape
Negative array indices 2 Returns undefined
setTimeout, setInterval, Proxy, Reflect 6 Blocked
with statement, arguments.callee 3 Blocked
cargo test -p zapcode-core --test security   # run the security tests

Known limitations:

  • Object.freeze() is not yet implemented — frozen objects can still be mutated (correctness gap, not a sandbox escape)
  • User-defined toString()/valueOf() are not called during implicit type coercion (intentional — prevents injection)

Architecture

TypeScript source
    │
    ▼
┌─────────┐   oxc_parser (fastest TS parser in Rust)
│  Parse  │──────────────────────────────────────────►  Strip types
└────┬────┘
     ▼
┌─────────┐
│   IR    │   ZapcodeIR (statements, expressions, operators)
└────┬────┘
     ▼
┌─────────┐
│ Compile │   Stack-based bytecode (~50 instructions)
└────┬────┘
     ▼
┌─────────┐
│   VM    │   Execute, snapshot at external calls, resume later
└────┬────┘
     ▼
  Result / Suspended { snapshot }

Contributing

git clone https://github.com/TheUncharted/zapcode.git
cd zapcode
./scripts/dev-setup.sh   # installs toolchain, builds, runs tests

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zapcode-1.1.5-cp313-cp313-win_amd64.whl (773.1 kB view details)

Uploaded CPython 3.13Windows x86-64

zapcode-1.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (988.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

zapcode-1.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (963.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

zapcode-1.1.5-cp313-cp313-macosx_11_0_arm64.whl (885.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zapcode-1.1.5-cp313-cp313-macosx_10_12_x86_64.whl (911.7 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

zapcode-1.1.5-cp312-cp312-win_amd64.whl (773.2 kB view details)

Uploaded CPython 3.12Windows x86-64

zapcode-1.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (988.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

zapcode-1.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (963.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

zapcode-1.1.5-cp312-cp312-macosx_11_0_arm64.whl (886.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zapcode-1.1.5-cp312-cp312-macosx_10_12_x86_64.whl (911.6 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

zapcode-1.1.5-cp311-cp311-win_amd64.whl (773.6 kB view details)

Uploaded CPython 3.11Windows x86-64

zapcode-1.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (989.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

zapcode-1.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (963.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

zapcode-1.1.5-cp311-cp311-macosx_11_0_arm64.whl (889.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zapcode-1.1.5-cp311-cp311-macosx_10_12_x86_64.whl (915.5 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

zapcode-1.1.5-cp310-cp310-win_amd64.whl (773.3 kB view details)

Uploaded CPython 3.10Windows x86-64

zapcode-1.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (989.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

zapcode-1.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (964.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

zapcode-1.1.5-cp310-cp310-macosx_11_0_arm64.whl (889.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zapcode-1.1.5-cp310-cp310-macosx_10_12_x86_64.whl (915.4 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file zapcode-1.1.5-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: zapcode-1.1.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 773.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for zapcode-1.1.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8a9df2ea1df97dc8607e2c7e826676c3b69c2419810092304d821da5cb1f112d
MD5 849189845ccf313bc5e880c262452349
BLAKE2b-256 993d71b9d12e616e3fdf697df88b61d850477821811ad841eecf34993802838b

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 42ac656bd4610293565a22aee1e796a5facbb1e9aecee7a71375f6361afdd14c
MD5 d0df17ee9223d890d3d9ca96cf704431
BLAKE2b-256 1a7aa61b4ed46b32e382c2bfe33442c39550afbd560bb578a0e192f7fe6bf157

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 99a687d8a1049aa8d2aff48993f7bc8eaba109b4e12ec34b20fe2ae5bb0aed2f
MD5 70d66bd6dab7c1c225b6fd99bfb5cd9c
BLAKE2b-256 048b90f95cd2f25640d2e9fc196c4faf9b752a4ccf4748a1b09fdb67aa7bd433

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4ba48ca64efd7ca8a2cc68bff81e42894847bdf1a1f7a3f033ab62582ac81be8
MD5 b0a3d56ef077d2d1b32e68477ede8c1d
BLAKE2b-256 2250b45e23b34e77661f24d9413392ab728dd0a3cc767ff2ff0c87dfa73cf7bc

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d483109bd423552195cb595d54524dfc9b05ff0cef42b5d77a87bd35ce46b9d1
MD5 57e81891398b62d1f08774f71b246876
BLAKE2b-256 9c648c14799fcacfd30ca4414ebc9d14616f2f88f9ca1f1cd38d1717437959e9

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: zapcode-1.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 773.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for zapcode-1.1.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 102392acb67eb7402887e45f8f45b49dfdbf65882f64ef8514e20b670aa7b5e6
MD5 3494fc1d429810589e0a984210459fd4
BLAKE2b-256 7850be39dc4be036ee50443847092525ccce5b1f403a6cbe719a9697cea0804d

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0965fd68533a2ca79c60dff72b8cb33c9fd97c4bb5515855a7617a3011b99e64
MD5 1247b606fb5c5526ae9cf6e846fc26a9
BLAKE2b-256 5742df0da3b29da3c4a43892df54776a4219873a1ee759d1d3659d770b39bdd7

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 20f8a093a208eb399ec8e0311e77de7a679d72f977f203f79ef5ae107b604ab5
MD5 92f1c88a4386a4c7e92f3b7d75ee59fe
BLAKE2b-256 b4f6d794830d771bc7613062d5a0e8d974deedfdf1c6e94b4392ca2002a94339

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 941582c96d5220c040c02c00bf21322a2a21b457bd7e9220cb14ad509f36361b
MD5 18506873d47442a960e0ff77cb979f02
BLAKE2b-256 6bacefdd7891dbb75510821a2c52327c1aee6496b805d55d626bbf4ea9451ad7

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1212bdfd1ff508f52d397e70d30fcd6c879420aa1b30246b7f014871c324ad6a
MD5 d32fe698b43ed61292280a0b50cb2859
BLAKE2b-256 6b28a168c4de913827aae7c589abc097e93a6da764d001c0023c2aae3f5f0631

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: zapcode-1.1.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 773.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for zapcode-1.1.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b6e2729c6fe56e8963d8890bc29e2975c4c205b72b72867fcf77053abf9a720b
MD5 0adc5986ff92901ce6a11a807ea573ab
BLAKE2b-256 a9c2f9040e200dac210f63aaa35acd5c2d68e05f4cafcf4c1b67424fcab967ab

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7ec7eff550570ce69d9c2a5c227894c7237c45b12f3fcd23c42be34955b671d0
MD5 e0d8cb362cf3e3c6bf1a6c0825fbb9cb
BLAKE2b-256 7dd21c432de04d5443a296a4eecd1d50617ad8ab1c120f8933b8d2cf2c2df93f

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f13d4098cf8df0dda743b8a64347604e7b4f0b23cc378bc9d4a10f7ea6878ff1
MD5 81c7c7734026024c95c0988e828d6773
BLAKE2b-256 57eed4a7cd8faf25e6e927ed8560bc43c46a3a8577051ee445221cc02ab09920

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff6d27eb7a212482827372aa8ffc22d024500136ab13b5b608adcb914b3ecc62
MD5 c9abb3d4dae774743c031f5938d7aad3
BLAKE2b-256 a867884d1c1051d1f6f5cef71ed8471da7ad2f635354b21ef80a281be15a044e

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0276c737865af02249ab20c49a694b6d9be1e01555440e06b40584012271b4d1
MD5 89cdb64d75369bdf52d26a778a8842ff
BLAKE2b-256 e94909efaaf3dffac4d424646179ecaf72e44551c5271705d2bfa94fdce8f7f8

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: zapcode-1.1.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 773.3 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for zapcode-1.1.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 74d04eacab393ad9fd0a14a5ec8c2b80ff8e2a3755e2dacdf5a22fe50525a908
MD5 61ed0d09a5569114a923b2fa3a2e5805
BLAKE2b-256 45a5b83572a42678158faba12df3971d8ebde9b70df4409f550e20e0fd1f90f0

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f68d4e26961c7e8681850740f4292cd3b83fd437423b62cf8453f7678c168f51
MD5 ef3085a08a8d14ba1d24e4489f94fd93
BLAKE2b-256 362b72aeb60cb55fdad262839dde8669e1a59b9f8459461c6007c8c7d1e10ed4

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5c1c3b6c4db20920463c9cec9283bbd4179de6740e6e64ce38f234f98d8c0e8b
MD5 f0de07561b60b4af5dcde5d2ba8e2186
BLAKE2b-256 7f182f4e7b76c33ed771cd7351ec26977a5d0f1068c58a040b404cc9dc7e1877

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96c1d3ab75988f317ebd9f6995437be994cb3e803990784085705d8a3e4f860a
MD5 5d96643d0401246d191357c735545ccc
BLAKE2b-256 7b4fcd11aa56dd6313582c943ae662ce8b231fdac090c231cd2fe6ae0cde1bb7

See more details on using hashes here.

File details

Details for the file zapcode-1.1.5-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zapcode-1.1.5-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4bffb96ceeb870c444d97b706da8a476b8fc25a658e42f8ff38ef44bd371162b
MD5 d8be1105f3ca3d462e22176bf016fd2e
BLAKE2b-256 83e2759087f811bc17b31ad85b04dc13eb8b7cf5756051123d84be0412fda3df

See more details on using hashes here.

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