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.7-cp313-cp313-win_amd64.whl (778.2 kB view details)

Uploaded CPython 3.13Windows x86-64

zapcode-1.1.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (989.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

zapcode-1.1.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (963.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

zapcode-1.1.7-cp313-cp313-macosx_11_0_arm64.whl (885.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

zapcode-1.1.7-cp312-cp312-win_amd64.whl (778.3 kB view details)

Uploaded CPython 3.12Windows x86-64

zapcode-1.1.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (989.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

zapcode-1.1.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (963.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

zapcode-1.1.7-cp312-cp312-macosx_11_0_arm64.whl (886.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

zapcode-1.1.7-cp311-cp311-win_amd64.whl (778.4 kB view details)

Uploaded CPython 3.11Windows x86-64

zapcode-1.1.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (989.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

zapcode-1.1.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (963.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

zapcode-1.1.7-cp311-cp311-macosx_11_0_arm64.whl (889.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

zapcode-1.1.7-cp310-cp310-win_amd64.whl (778.5 kB view details)

Uploaded CPython 3.10Windows x86-64

zapcode-1.1.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (990.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

zapcode-1.1.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (963.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

zapcode-1.1.7-cp310-cp310-macosx_11_0_arm64.whl (889.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zapcode-1.1.7-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.7-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: zapcode-1.1.7-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 778.2 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.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c6b68376f1f2b476579ae1b0f567486123c24843a8016085d2d9df160774aa9f
MD5 40df83fcb6a54707ed0f9b067c00fd6b
BLAKE2b-256 ee75d22efa08407126b4a6a931afbe019885c6a44d98d014f6a7ec7a52041cf8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8c6e7f4bd028c8edfc6b6b0917bc780dc0aa17bff1b449ed153c077e8285c08b
MD5 c4c9e1914f3f7baa65d3294f6347654b
BLAKE2b-256 6f6b591847db9933656ffb769d4ffd9fa786690dd0f56de312f0e75acfa2af90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d56030afd7e89302578be8037bf405183499f81af6486943aea5c265a3b6d779
MD5 af77a4d910dd67cf50b68581366ea02f
BLAKE2b-256 7ec1336ff02ef6f51381e9e855e45926d260151ba53fb204268d1e2a8878a1c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c0e704d76952849210eb85a9aa9cc6be1c5bedb4e52ce14ed46c6deae4e48101
MD5 213f78b0c0b9b6ba0c5b53e4a0d41b8a
BLAKE2b-256 19a980e66698cac41cd5dc0802934602523dfc2617e555e3ec474e6ab5996173

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0e7224205d78b00752f55b1e1a04b821a307722ad05c7f2ac1f5cd08332de101
MD5 f73cd5c079fad941933fd3b8c57996fd
BLAKE2b-256 e2a3bb059ec2e0cadf02754e3d7475083daf1c97067edbee5f7f8c5ebd5558e5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.1.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 778.3 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.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f905327e5412275f53d7f2f486cf70a853e8cee551d0571e75e0b751aa98bcb0
MD5 94c515e565d894b27ed884924fbf630f
BLAKE2b-256 10bca35788673926c4818302ccf90c29ad2e91547b74013bcdf4458c7c824d9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0502b01cd526756575d1842ba8faa004489bc2ad33bdcd937eb3eaac753ba007
MD5 7415dcb95c4bff6d148d342a5b20f341
BLAKE2b-256 500fb72ad03218e8b3458b8f781e254ddf34cb3765b1b9f6415b7c63c59684ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7cc68d95b82fa00f6cc95d632255ca6222a6c890b345fb64dc91135d55e2bae9
MD5 23f34416ffac4f819c10eab9397e98cb
BLAKE2b-256 95fe67c2784a54111f51b2d58da01d1573669a4c919e68e8389088b79c320fb7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e2d27989c4086c65395e8332bc92e0ae9d52912b20b945d5767be748714ff091
MD5 23220d16f90e7a17026e9009deab0d44
BLAKE2b-256 27efc33b9128e4f401b3a9e397aab03bebb1b41e0e46198cd9aa961cbc4107de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3075e28d99a5225ba097a65694bf7e2a35b086a0a8af39fd47a1211f3f164d7a
MD5 800f4650208bfc3fb67634f07a495252
BLAKE2b-256 b7fd946f86fcb1ca4f67c6c1933b2370ac602819f860c27f863d2edc0525b170

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.1.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 778.4 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.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2c7dd10c74fce16bc1c8c8dfb3bcbe3e9b4b8ebd63148c2c83d9ea1e489ad677
MD5 d7b9089476d3bae3028b41d4d89cdf87
BLAKE2b-256 b3d989d5d6918b6b612fc84592e478804767c8952824af709f4a08c2ad6e5800

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cb1354d730734fc8628a2f2236374a8b0246d6581fc74ce62ff1d71c03f28142
MD5 508791e9158ec04eb44d7448c4ee0621
BLAKE2b-256 d100a783aa024972dbe64c90b0aa17c38d848e2df4abf104d5986bb84ffd992d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4a250169f86a19e544a88aabc0932148647bfd335418053588f6fd2918d57948
MD5 338546ed3281d01e77b5f4033203b546
BLAKE2b-256 242a512541f197c8e95cf39af57de03a0438c16e9fcf9c694c9ea4b76dddc29b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab2f557433526ec856b47ea21872a982cc3317d56c89d2963e267c8327a0501c
MD5 a96743bbfd696ccc3990ef62f38a03c9
BLAKE2b-256 f04470fcaf859620e9149eb2b9cb081c6d38bc469b4c85b21a1992f99755eb0a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 759224732573efb3a767f2ff2aa0ec714b3769eaf2df8f2432b30e9b81da3eb6
MD5 56e36c714cc56c35cca617770ff7c022
BLAKE2b-256 a161d38aa06837154f69a6cdbfbc7252ba04799410f35400a0bcc2e7037b2b40

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.1.7-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 778.5 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.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1c8518c0094b64018bd006e59f497766629b2a7a2aed1d84f66d044c0f646ebb
MD5 14854c7810356dfbef9e56e080628415
BLAKE2b-256 8d81273c34782306f5b5dd2d566f031e8b26e9c12961e3ac1dc9670e88cb1abd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4bad03476b6ea746259f9258ff98a0d23c52e9cb942ba491c103dc84129b221d
MD5 9c7fe1a439967723ab2767e4346bffc7
BLAKE2b-256 a191fe853169bbea8341a7b12d290e67323d20eaa48bb53bc05b12a42fabbb37

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a8dc1217655e714ae732282f04a91bde13895507919a76c2af5c8883dbeef5a4
MD5 f71f55e6d25b4ac5ab688b073460ea50
BLAKE2b-256 d9a0348a84d4bcce0a0aa057c2a12f7f3e416ac4207da1f810ddee841e38d491

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a356c9be9139d8b3eb3d9b49c2f7c087d4cdbabc9a4a1fb6000cec61644335d9
MD5 0f05e66093c17fab5999d28730919b76
BLAKE2b-256 b9e364995eb65bd6a3e0fdb19677f6247fb4500af61657ee40da07044e3fc1de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.7-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 538cf9ed5cf67a1be0522d5671bfffd2ea1b7a51067388044cf9839a96d6f312
MD5 3b4df83a673ccde9bbe4eb20b0aebb24
BLAKE2b-256 cb7d40a48eb1bf5b7c916d0d60f830fec0f943c3a6f4bf7e2f1195fc6b31f496

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