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

Uploaded CPython 3.13Windows x86-64

zapcode-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (993.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

zapcode-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (967.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

zapcode-1.2.0-cp313-cp313-macosx_11_0_arm64.whl (890.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zapcode-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl (915.1 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

zapcode-1.2.0-cp312-cp312-win_amd64.whl (782.2 kB view details)

Uploaded CPython 3.12Windows x86-64

zapcode-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (993.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

zapcode-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (967.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

zapcode-1.2.0-cp312-cp312-macosx_11_0_arm64.whl (890.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zapcode-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl (915.0 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

zapcode-1.2.0-cp311-cp311-win_amd64.whl (782.6 kB view details)

Uploaded CPython 3.11Windows x86-64

zapcode-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (993.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

zapcode-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (967.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

zapcode-1.2.0-cp311-cp311-macosx_11_0_arm64.whl (892.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zapcode-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl (919.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

zapcode-1.2.0-cp310-cp310-win_amd64.whl (782.6 kB view details)

Uploaded CPython 3.10Windows x86-64

zapcode-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (994.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

zapcode-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (967.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

zapcode-1.2.0-cp310-cp310-macosx_11_0_arm64.whl (892.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zapcode-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl (919.5 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: zapcode-1.2.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 782.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.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c5d88d97ec481441244aed199fda5c7b7b99646ae7bb93d3899348e31a5934ae
MD5 0f3cf87bc97b36ccc74e216b1b65a5f5
BLAKE2b-256 5d64a7717337b801cccb32163739dd89ebb4f39e2070eb15b9efc0a0e9469328

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12b920c9da85765692398a08da1d892e239e66157c8dabdfd0c10ed333f56ff8
MD5 7c2adfa1c611ef8e0234beaaa356de0c
BLAKE2b-256 9c70c273b46f9bcdf96c5d50ab3eb82f8289937cb7697f37fa0dd2880fe13452

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5ab4c876cb42f6997575b5934b94025887e0fd665a86afe3f41240f5254ec3a5
MD5 5f8e98eee7baeeb5105fe46a11d0d7b2
BLAKE2b-256 b7a8cf8c4fd0f4900970da3abfaeff1032cbf75832f9a59a343cb5bd469a17a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f4fb07c0202445390dbe54a0d5de1a312d92559dd7a24f50d2625c8a07d6686
MD5 6076285ac95c1c3d9f44d30989ef3e6d
BLAKE2b-256 dd7eb6f4aa3aa1c6592136b4618a852b6f0719690a8a4dafad6c1ef3d64927b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 80d6fb844dcd23f782916db0d3801b93609a2e122502ec0ffce98e2992718f30
MD5 a9e4d35a967bfbd5ffd8743a3ab9f20f
BLAKE2b-256 92516af5a7b2ea8d600bde5dd36619103789cb4a74bd3ed56b9677b57282db49

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 782.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.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a3374a07c857212e336c398234afb25d69c36f66f4d4dcace79a199f79d14db8
MD5 c9dd79424161d94caed12c94fdf82950
BLAKE2b-256 e1bb40f0c7957cc9d31bf36ea76ec5b9249f3f9edc73408d8a0db87d9a7178f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c5d8f0f67c33f559ba7787a307c8cf96f8c462014bcf16af0403238f548c0f4b
MD5 aa7ed0391e0ae2c23f90402c39cc5a38
BLAKE2b-256 875477c24774fe5382259864aa2bb155b429630fa54a511ae7571486010c959e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d1c23bb93fdd752232a2c51a8fd54d575b1cbcc8b915a26cdb1710d774895db6
MD5 e0c9032cc7f6956ed9878ada2eeeb76f
BLAKE2b-256 5595ceff39d3f9608aa21f5ab08f77a12c21fd58cd883981a20e7dccabba7dbf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bdfe1a2e48d67bd4f7d4c04274d2aad9eb7ed04a33f5c161230eeeaa3e2757a5
MD5 475b1f6e14bfa780cdcc76c9b293c475
BLAKE2b-256 f133fc68595e7a133c1ca59962340a0c0581441335e09ff6d2891f94ebffb2cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 93c6a9ac24dd68eaee316d7aa3d1bbea273ba4ec1ebdee050fccb38b8423637a
MD5 ad9470dfb1d473e547fa930a26e96b57
BLAKE2b-256 fb2b8f513d272f6d545e89abe32a4aad574b46a1f47c5bb32b7af65ac29ac771

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 782.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.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 65a75198db08824024e763ecc0716760c5c58afc9af9011c3d52a8559a7b3ce4
MD5 f2c26907952c229feaab2480de42dfa5
BLAKE2b-256 2c19f6747d286266033f09e876d2888f1ceb86d8a2c6bd25bd266c99c72c784b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d1ecead34b3bd054db471c8bff399bea16db49a1e3961f8a2231333822b56802
MD5 fea8af6ee0af21bb8aaeda14ce5fc172
BLAKE2b-256 aa27761aae2ee7811a9b02826db2e2d8339d343b37123d9df6b9d584420db765

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f124a1840017924856521f002fd91f8861ecdadeccf3f41337c12b4fcc73f79e
MD5 4e9702c26bffa7d49d0d2f6e58dd06cf
BLAKE2b-256 d6ba4fadf8ed3148ca65a9c82edadd855db8f534640b22b0acb3dd11ab9cc274

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2eb304a71dc68ef52250b504cab8bd750f03a88b15e91ba39adff266638ac4aa
MD5 f24f7701b0b6a13b15b16ed125a4b7fb
BLAKE2b-256 cec97461c117941d73404f1b27f6d46b2922c7a2c6d96efd9430742440b845e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 73454261331691c5d1c15141c87e8f7cfeb8ba240689b9d6aac896807fe0a59f
MD5 09cc7c71b738693bd7e40297446ee929
BLAKE2b-256 27d0559b8727e88dac1a208ea36e02c6c89a0236f489579f043cc3e525ea5ae4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 782.6 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.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 822e1fe99fb1828cb01e5e962429671ce3914b271f8859d4d4c636314ca203c2
MD5 be7ebcf72879210cc7b4268064eb7f38
BLAKE2b-256 acad56810030a1cd32227d887242f8cce3dca4ce5c35f6a6c543db5c44e65d55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 16990cc8a43d9fa5eea191ce49185b65d4a01db34905b7706512e23e97b19684
MD5 c7f8e42981e4f56bfd721bed241407b5
BLAKE2b-256 cf960d61cfb2357a836a9aa6b1fe5b2014c12081f44823cfad982d13f3dc9b49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3b81f8a057485a8fd936b822793d21805ae8e35b285862c577994e1553d19fe4
MD5 45156699ca6ee9315f28c016324fc3a3
BLAKE2b-256 4acdaa7fee87aa85119d4e7e1609056bfccae07aab6d7eb272e2512238b50c57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ab391f8d292c9c7e4e4ee7a7cde9127c5a424b1a4a36a6a8ce104f01025cf9a
MD5 4b938fe1d41288d777a1e598dc85624f
BLAKE2b-256 8250d94cee0bf1ecd5e4a33312fb8271e770b9865b72126e9baaf8040616eab9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 42880ee25f1b5135f77618dd87d5aeaaa1b4ca53ae716e90b13144ab12aea6b1
MD5 59d8fda11ee35aba08f11b748915beb6
BLAKE2b-256 c4938b7732996ad1b17006ea61d46152943dc7418107b10e23cbbe3f5a450e10

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