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

Uploaded CPython 3.13Windows x86-64

zapcode-1.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (985.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

zapcode-1.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

zapcode-1.1.3-cp313-cp313-macosx_11_0_arm64.whl (885.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zapcode-1.1.3-cp313-cp313-macosx_10_12_x86_64.whl (909.6 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

zapcode-1.1.3-cp312-cp312-win_amd64.whl (776.5 kB view details)

Uploaded CPython 3.12Windows x86-64

zapcode-1.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (985.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

zapcode-1.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

zapcode-1.1.3-cp312-cp312-macosx_11_0_arm64.whl (885.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zapcode-1.1.3-cp312-cp312-macosx_10_12_x86_64.whl (909.7 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

zapcode-1.1.3-cp311-cp311-win_amd64.whl (776.8 kB view details)

Uploaded CPython 3.11Windows x86-64

zapcode-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (985.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

zapcode-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

zapcode-1.1.3-cp311-cp311-macosx_11_0_arm64.whl (889.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zapcode-1.1.3-cp311-cp311-macosx_10_12_x86_64.whl (913.2 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

zapcode-1.1.3-cp310-cp310-win_amd64.whl (776.8 kB view details)

Uploaded CPython 3.10Windows x86-64

zapcode-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (985.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

zapcode-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

zapcode-1.1.3-cp310-cp310-macosx_11_0_arm64.whl (889.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zapcode-1.1.3-cp310-cp310-macosx_10_12_x86_64.whl (913.3 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: zapcode-1.1.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 776.4 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.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4effe56d838963bd43ee4cba7fafdf10116038bebc05c35fba29a51d3b26d16a
MD5 0e9bfec43478a1ed5aaed6359a6e6f27
BLAKE2b-256 f18414730b4245b508f5bc45d42f59b4f8584ece933efa7331d459c5ca4db8d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dd93bbe657a356a716b6fcad0e7841d5541d5c8c2a1c0afd8a770d2ff2e5f046
MD5 1095949fd23c8061b2b29f1c4a2e3b8d
BLAKE2b-256 bbdc09dd3a6dcdefc7ce8162bbb475f176943300d5137d39494a9db713a24d53

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ae05b55e145322a7b5716e379e1ed0a4ba87309e843e4c8a6899808f532afafd
MD5 e2585995f76625a778c51dca6355ffd5
BLAKE2b-256 c7c2ce06625e6e2b3b607bc148ac765c865c4e411789e3630d93d471c712cb66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fc5c6669cb06febbef68f597350d1b4202391ca1b89069a86a144cf94f239d2e
MD5 aaad21d5668e633d8f36f33f9f6cf292
BLAKE2b-256 0d39e21a50db5ddb663f91761b8981702a55baba1b57683e8b468de2855d4dd9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b45f592d882b26bf03899dd232520b10195bacb338a6f4d0e540ca8268337bc0
MD5 0eb8b1407428f5847f7e3c16df2a4f7e
BLAKE2b-256 95918947815e94f75c73607eb2e30d3464016e72581b0dd66e9253018b5e8504

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.1.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 776.5 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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1cc96a1c76e42f6715c883602ce0b473866e957d57e3722d09e6f11e23a38f8f
MD5 794dcb0f38cb9a6a3024136307d35c10
BLAKE2b-256 dc9327217018cdec9add5050295ede02e86f8d669ba8c96ccff209ad00a289b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ff01e3e48dfe50241590d0c5edfd58398cced82cc7620b827319c5c9a5997ffd
MD5 8d0db2bdfc9c4a0bc0a552e03a1f6f84
BLAKE2b-256 3518ac21bd6c52ddf266bf2465f74b973ef6f047fde79e9dd71a785d85f4ce77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 89419017c83194f5431a3b9ea4346725006645273d4bf583737f4561a62a7d58
MD5 0e3d444ff76158c768702c65f36a5a5b
BLAKE2b-256 83dc703fe29b724498274a3fcad1eaf199257538c6ba35d3ee0e969e4b0a0ccd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 97f38e41517181a362bc0f7b07c3c200b9e32076d780d1c4adc0990d65460f05
MD5 ef5110de2ac9136ce49df44b2cd3071b
BLAKE2b-256 3af2cd84e648982facea8b0486c78ecfc4830b5f95cf9636f6cb5559037cd945

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fe2bb244923594545d78f5dc900b90ccad73ba231d4fd14b6440b59405504c1b
MD5 db29b0197364ced1004b963e24cf3985
BLAKE2b-256 f16880ecf7f5d530672704bad23c5a347cb278a63c00a2faa340a284e97301d0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.1.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 776.8 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.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5c7fcb84a2f0995f20227cd27c7dec3664ca994a1f7dbf51300c90de1659ca2b
MD5 b9f0298aaa3ba169b60e5306d276ffa1
BLAKE2b-256 38cc254b8066b4541337e89ed8a2ae7d0e92df423dab9d5b1bde68d17a90d374

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9695a3df7a43fb0b6b24d75417561c212132050912a982e88c6a10c8bb5d426
MD5 269e4ea622b887525497af7580f5c0b6
BLAKE2b-256 54ee78cddd1f2958f25c1f1b0a456b9071e7b0b7a68094dfa6e68e6c2ced1842

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3ac43ef1d78c3bc6bb691bd576f1d9d4fea2901be6205b9e69ee982eb39d4619
MD5 aeebce5777d9a1f6fb47c1ce1bcbbb7b
BLAKE2b-256 1c2fac8c0bab879230f51df11e7844bab9476890f8f3097b5115623b25ad7f77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c82afdd872ae29636816ef137cdfd0866f3d30b976cf6872e2e65e66608cc71b
MD5 7eef52340cca26a12f72ffcd9791a0d8
BLAKE2b-256 836e74445f388b4705b132c9053f980116d38629e7bcfd2717f5799f8f3614df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 de3e7d7ad49adc6748542daaad34e58ccccdc70fd07bd1fdc564253170b22668
MD5 81b388e732ae837fe9b53730a142952c
BLAKE2b-256 2547dd9dbfc991169cd76eef120c88fec158dcbeecd6d57960fa2affb42d3bec

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.1.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 776.8 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.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0be37d365fe45b0b4a5a2896d9339576fa4b7f287aba9ff64f52d1c551c28b09
MD5 54db399e548789da3c941f6e4c8a4ed5
BLAKE2b-256 2bca70181bdd02b052b5e300827c8589c1da811c1f486089be0d6a0b52112665

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8e0379a116d97deca3fbde1239eb4fd536872bd81ef6166b21389de50ac2dd1e
MD5 08a313fc9b333a03bbb86d155d57ad3d
BLAKE2b-256 4791e8e84f88fc0e34da48d7f12f2095e54f4e4d550e777676f668334df04184

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 513e22891b99399d31401374a73b8acc61d0d41541382bc4c8d0141961614bf2
MD5 80bac972b60b70b88f099e04ffee6afb
BLAKE2b-256 977384fe49c8843eaac1ff19d07010e63e8038f6d8765b1e7d50443ae3400354

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b5a061f32121cfb8ca5a54ded11e1e5ae4efd29291f5fa16abcab3fee6818433
MD5 13919d12cc2605291c3233321c060107
BLAKE2b-256 0961339e88196391ff8b4a53a6e4c6b2f8a2206631477a3058c9bbfa04faa61e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.3-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 87a469821ae91cea0b63dab88f818f249a0cef05775f183895453147241c3206
MD5 b1256bf1091006f61a57326876e82971
BLAKE2b-256 fd6238065fdda3d3678b2354e3bf0f971f7af52367adb2f11e7308972cfa7ade

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