Skip to main content

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

Project description

Zapcode

Zapcode

Run AI-generated 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
Promise.resolve + await 3.1 µs
Promise.then (single) 5.6 µs
Promise.then chain (×3) 9.9 µs
Promise.all (3 promises) 7.4 µs
Async .map() (3 elements) 11.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/main.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/main.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/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/basic/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/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/ai-agent-anthropic.ts and examples/python/ai-agent/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.

Auto-Fix, Debug & Execution Tracing

Auto-fix (autoFix)

When enabled, execution errors are returned as tool results instead of throwing — letting the LLM see the error and self-correct on the next step.

TypeScript:

const { system, tools } = zapcode({
  autoFix: true,
  tools: { /* ... */ },
});

Python:

zap = zapcode(auto_fix=True, tools={...})

Execution Trace

Every execution produces a trace tree with timing for each phase (parse → compile → execute). Use printTrace() / print_trace() to display the full session trace, or getTrace() / get_trace() to access the trace programmatically.

TypeScript:

const { system, tools, printTrace, getTrace } = zapcode({
  autoFix: true,
  tools: { /* ... */ },
});

// After running...
printTrace();
// ✓ zapcode.session  12.3ms
//   ✓ execute_code    8.1ms
//     ✓ parse          0.2ms
//     ✓ compile        0.1ms
//     ✓ execute        7.8ms

const trace = getTrace(); // TraceSpan tree

Python:

zap = zapcode(auto_fix=True, tools={...})

# After running...
zap.print_trace()
trace = zap.get_trace()  # TraceSpan tree

Debug Logging

For detailed logging of generated code, tool calls, and output, see the debug-tracing examples which show how to inspect each execution step:

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
  • Async callbacks in .map() and .forEach() — each await suspends and resumes the VM sequentially

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 (Promise.race, etc.) — .then(), .catch(), .finally(), and Promise.all are supported
  • 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
Async callbacks in .map(), .forEach() 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.5.2-cp313-cp313-win_amd64.whl (784.0 kB view details)

Uploaded CPython 3.13Windows x86-64

zapcode-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (989.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

zapcode-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (965.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

zapcode-1.5.2-cp313-cp313-macosx_11_0_arm64.whl (888.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zapcode-1.5.2-cp313-cp313-macosx_10_12_x86_64.whl (907.8 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

zapcode-1.5.2-cp312-cp312-win_amd64.whl (784.4 kB view details)

Uploaded CPython 3.12Windows x86-64

zapcode-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (989.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

zapcode-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (965.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

zapcode-1.5.2-cp312-cp312-macosx_11_0_arm64.whl (888.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zapcode-1.5.2-cp312-cp312-macosx_10_12_x86_64.whl (907.9 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

zapcode-1.5.2-cp311-cp311-win_amd64.whl (786.1 kB view details)

Uploaded CPython 3.11Windows x86-64

zapcode-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (995.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

zapcode-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (969.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

zapcode-1.5.2-cp311-cp311-macosx_11_0_arm64.whl (891.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zapcode-1.5.2-cp311-cp311-macosx_10_12_x86_64.whl (908.1 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

zapcode-1.5.2-cp310-cp310-win_amd64.whl (786.1 kB view details)

Uploaded CPython 3.10Windows x86-64

zapcode-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (995.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

zapcode-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (969.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

zapcode-1.5.2-cp310-cp310-macosx_11_0_arm64.whl (891.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zapcode-1.5.2-cp310-cp310-macosx_10_12_x86_64.whl (908.3 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for zapcode-1.5.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 86175e6d252a0354adc661c61e7220b03d20d3dc8f337bc175d2fa9dc2f501f1
MD5 493435b3829a71aa2933961679492930
BLAKE2b-256 9a5b0ed6b4477cb1c37948fe789cd7383b33daca419512652f4aaa3f0366cfeb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ce2f8f100cf21500817e63b8a035d353dad59f9525dee1b9eaa1d129faf89986
MD5 8ac8ebe53821a09d0c81d230e756a025
BLAKE2b-256 b70e70f89988133075bef4a90a7f0d061170ad84e5a53a39d3d104acf9ebfb26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2589db94fb20d3b4e208b3bf8f0658ae83830641aebd4240dd0aa1f5758f2d9c
MD5 d51d02871ef31d1ac051ccebedcc7ff2
BLAKE2b-256 e98f62764626246304178a06937983f711f883563c19552f42622e3835cb34e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ee4b81ab372557134a0f7475ca70ef81b88f0cddfe0f42646b745f1b39cfec2
MD5 168acf09091373f685f6dc2133703310
BLAKE2b-256 6d59b6296956d38b06f31746a1d49de9be765c534d9f74b79425dc0c0ce31754

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2feaf0b813114d624e917f82e5924e8ae5907d0a9d4fb605eb6e7f9710ce409e
MD5 dbef83d28c138b182e160b2e6f017fe5
BLAKE2b-256 c7bbfd7044c101de32ebe64aab201f555e8c9a08098ce229e7d84a497c4c6920

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for zapcode-1.5.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 16d7596efa0ee9243b23d50cac6f0ecd0fc1a3a3ed9b83c79f20d74a9b2974ca
MD5 0a1ab2ac1b0a8af05a80827d80394ac3
BLAKE2b-256 3509ca686e1435e22a698ba6f7da6783a12437d13adb45b742e643d4259bc36e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cefdcdf8b03668a0d7ecd31c1fea781fa79b107791f081a44558e4e0222df1a5
MD5 68af2b80b724a8c74e33248cb5d5256b
BLAKE2b-256 cb000d37ffe4f5406da6ff45d27aff56b084696017df75e50379cf0471b5d210

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b7f0a37986ddb5cccc81bccb5a17b5dcb488f50dc32cbc57c3d4dc674fa58bba
MD5 cd633cffe6ebf2bf56448acfd7d754e2
BLAKE2b-256 c9d09071130a3b0d3608c92efe62cd088ca5a82fee5788aee3694384537e0d41

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4cc8de949a5decdf1001a87e3a9c5c198da19f765e99a49d749c6aa9e27e218c
MD5 5dcfe9e83ddfba5f560e3db4fd18f31a
BLAKE2b-256 45ce90a22527089d3f7cf9f5ccd4c1821b4cbcb27963ae64edaf5b3b9368ad2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ae6d093a30089eefd489ef48f9dbf9297d12d34e90079d00dee4070add8ad247
MD5 9ce8af1b512ef56e43e602babd36eab2
BLAKE2b-256 2f8b13efd40bece890ee4f6265888be0197183d0b91a5bcbeb06c0f49f9551c5

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for zapcode-1.5.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 08a943c948f915a2a54e4dc32ba6976729531ac7150e0d12246940aa876660d2
MD5 3ee64033530c4c2cc06ef60c63c980cc
BLAKE2b-256 78f09ad7ccae5aeefa36a82ce295e65d0ff64e9b72604e1959edffe39eb79f40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8f94f342a911719e4a653caaaa3fd73fc9f78274f1e17cb34dd9cad2e0317c6c
MD5 03d354a9dbf9fa40ce2753fcde0f8ea8
BLAKE2b-256 54db7e25eba97f87047e9f2b7b1542b42a8f296f167ccba3dff275863488c5d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6dffb2579de9beb5c4d433bbeabd5d60d16a025e9dad6205f7457863850494e2
MD5 5a45465c942a059f4bfef7a54db7c39d
BLAKE2b-256 79f7a15d94f5550523f8ed730fe5474025512a77b8114af2ba4e8198381bc302

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67f4342d7dedc5ff0ceccc850ffa199cb30eeed7e4aea00ecf74dbd53f30bc67
MD5 40be7620f27726774b4ce46f658961f0
BLAKE2b-256 9b2dd7c87b91c2f563193830b2ba109e654ada5fb2856cd79ad62c1cefb85213

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c731b9bba6a81a078a3e111f8996ed42d2749518f0ed0498b1b541ec18a88a33
MD5 e2f788b7736e99173c30df96861991f4
BLAKE2b-256 320afd519ef27aa34afbfb86fc1a1173fec5ba812e136e84c317e00b758f1276

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for zapcode-1.5.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 758474ea7859bce4d18df6f2e7ce441f6aa528e4ece2a662aed82b341e9e1625
MD5 256b89f41b8c0ccc55cd6c9e77c0349b
BLAKE2b-256 5093120e057fdba9cc3e4c2732787bdcbdb71fe8df26041b9f33aaad4ea80e6b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d2857587554e52424a7784452cdcffe68604638d6ef90e822e31571df2d7acec
MD5 554df9fef806d995a68395625be887da
BLAKE2b-256 225a3cfe2e915ee961cd14248e042e4caf2a2f9f8bfbe215c94c5ce769c22502

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e312004dfc86d888c96891b38d449d03f9044af280aef3ef1bf863cc789a1f7d
MD5 b7ca5529d70c4cf13029ae820444947a
BLAKE2b-256 e6dacec84ffac0d89466c8ff8ec137af03ff4b53ad8445e17d3a9eeaa65a309b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1663e5005cb73b93065e51ae158c65e4e7a990627d18f47918b51de88ac369d
MD5 fb1d8229688ece6c4d18798b88b4759c
BLAKE2b-256 5d4dd493e79bff7a592c612286b48de7648cd122467c1a53654e1319d96a1b80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.5.2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e452e2679667e57a1caf49c5d0d4878a6eeb38db633194fa68e97e8bcd0cc177
MD5 3efc1e197bb5b8191b30d3fd2c415a47
BLAKE2b-256 a3666c585c890a44e919b4bea275ac004827fbd7bf937cb78a31f4910f946511

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