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

Uploaded CPython 3.13Windows x86-64

zapcode-1.0.1-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.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

zapcode-1.0.1-cp313-cp313-macosx_11_0_arm64.whl (885.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zapcode-1.0.1-cp313-cp313-macosx_10_12_x86_64.whl (909.7 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

zapcode-1.0.1-cp312-cp312-win_amd64.whl (776.9 kB view details)

Uploaded CPython 3.12Windows x86-64

zapcode-1.0.1-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.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

zapcode-1.0.1-cp311-cp311-win_amd64.whl (777.2 kB view details)

Uploaded CPython 3.11Windows x86-64

zapcode-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (985.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

zapcode-1.0.1-cp311-cp311-macosx_10_12_x86_64.whl (913.5 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

zapcode-1.0.1-cp310-cp310-win_amd64.whl (777.1 kB view details)

Uploaded CPython 3.10Windows x86-64

zapcode-1.0.1-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.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

zapcode-1.0.1-cp310-cp310-macosx_11_0_arm64.whl (888.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zapcode-1.0.1-cp310-cp310-macosx_10_12_x86_64.whl (913.4 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: zapcode-1.0.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 776.8 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.0.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 14bfcbdba3d344e1314b637e9af257e6378f80ebe192f11577fb21cb1892c66d
MD5 aa97e2f58ee1d4b1900d9134a4884c01
BLAKE2b-256 52d14266824cc25034f2cd06d90d02abea5c72366047db699d6485e1bce20a1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9118d3413158def27bbc08a733732a9db7d6327946b854dc54e14bc38c9fc4c0
MD5 255a07b37e325ced0713cbb240e543b5
BLAKE2b-256 5247e07fc7fbbf5953a7487186d52ee411eaa94814852300da8007a032f6ff27

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 756763184df36d51b85708f2dc5f62ea08084da2634ebe4afbdf5cf52e4e1edb
MD5 896545827022fb819df99e05317b2a93
BLAKE2b-256 a5b4ab8bb89aead14c1dafb52d7a20a5518c1bf2a421327c4414506c2f1f78ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7709ac384a17a72a8c707091b5925f87ae75d36e2be8b817be5ece171eecc7af
MD5 d660f9b1d0cb507b3fad6ed2bb39b4ae
BLAKE2b-256 9412e52e11d8b99414f92aead2efbd114935ef09c9abad3f194ec156fb955087

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bc992f4ede3bc72a03e9aef04a65b8d6bc97a87e9fc8d2b286c3fb3851395b79
MD5 03ae7747864dc3fa52ad43edfbd62f9c
BLAKE2b-256 8056a3d5acc8a3f07b67f0c0e648fd4f8174240828f28814c50f6f8eda60ea50

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.0.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 776.9 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.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ba82f66d156c4b8e2f423ecbb3a7062f9d3f79e5a4f2d785d2fa197e4d03f4f2
MD5 5c1c6f080a847aaa83167dc2a0fd1ee8
BLAKE2b-256 750a98a9a4a4bf42cd22ff249956130d0bb7348ea95229f71e3960781395004e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cd5e7c8fb98078209ee9197c6724a12942e19588ef84276b31867e4cfb45e325
MD5 2b4dc00f6c0b6104d6eb9e2137e09b06
BLAKE2b-256 c7f709e52f74318fa48dd4ee45721f1d33c5e220d949959d25a494fcd58b1e55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ebf66af4fef4ce7395f464715aa6cda3bba3fa27c284bd36dae39af59fa83f3c
MD5 3029efcc6fabe386db1d2e96b69d6d21
BLAKE2b-256 da3788a2a81f7ee5bded0f8e809e9a2c69fb9d35517f4e6d1b6d72350bc62250

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f39f6d37daab8e44157e7c4e168752568842b9a26395b5a81e2f36f51cd55dd
MD5 1e6348a865361ee75e7e21727a0ed991
BLAKE2b-256 ed6db64b4a6c064709323d6988a7a679b3f4baefa16216742a3f89c7f84e90b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 942c1846c1b0343b1702826e20a2e7331b509930b7be8a0653fde8515c8b62f6
MD5 378495fe9e05693e3525a559b01dd4ab
BLAKE2b-256 dcf4c06ecfb305838274b3b026f2f32b9c0f26d8f10eef3be7313f0cb80868e4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.0.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 777.2 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.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 94d62e24ef55b7b3b0ca8294aba1a9c503c8030c42031ee7e07a97968115f0d8
MD5 6403acba2d1c9b20780337ef82378178
BLAKE2b-256 27a771bc19b000f218c6ec96fff78bb3628226bbdb2ff4788978f6add61022f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 259bbce0cf9a6f44cd1fef58837af748b783a12b484287d3b45f555f264beb91
MD5 afcb804c5333a29dc08f88dce5ad762c
BLAKE2b-256 9785efe183a08e07a063ba48d1baaf7a8a6cee65db09dca0ceadce5939a735a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a5005c6b026399c85c001c77fdcc64af6dd9d0b768438efe752a35d669300123
MD5 c24b03edf9eab0b6ac183893e941a4a5
BLAKE2b-256 a4c915f7925d18e54aa95e2b4058b6b0e0c482a51e3845d00e3519de9883746e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f799b4903829722c475e8b37ebef0a472a90ebfd0ca41b16c2ca6c2c3d077345
MD5 87d2e39e701cda2ab7b456c60c1b3ca3
BLAKE2b-256 07d407ecf23d0492c5a93f50cf9f0a5d3003bf2712d58650a159bb5d385c7469

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ba29afd00134f09e658c25ede8cd4b7026632aeaa2d9c8d871bd44399d20c8a2
MD5 16d2759392bd241bd5172c1c2f6c09c3
BLAKE2b-256 2bc998bfa2aab125f61639e36e61aef0fd368c94cd43d6c0d724c252bbf9b6dd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zapcode-1.0.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 777.1 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.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 14dba0ef550129e1115f4726582b659b34a77882f66f8e99ba94889cbccc200d
MD5 de18d7d682fd3984cc404625f6a49e33
BLAKE2b-256 2db32fcdc6fff3bac654e5ca0a984f64471dafa68dbcf3a884891d4ea489d563

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b29633975af09c5e7d2ed77a22353f69fb05b5417f049f8976e737692142fa6f
MD5 0f4f3be3ac33e7f7139e9201a915258c
BLAKE2b-256 4ec3ecd45c45e19309bc933fe01ab28707e367669f520ff9fae2299614b26dca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e56fd4f74c68faccc820f22d97a7459ad3059af081da6f0bcb3555ee41a4961a
MD5 5043dd6bf94350c404700bd2e1e0e981
BLAKE2b-256 1fb3e64c94b48fa8f1192940ff81b2b977eb62a9f496f20d57d408d0e3cb0209

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 26bc875a8b131e1c39868c3141a107da016fde2ca0f5914344b20fedfd32ac39
MD5 0ebb41e5c608f6a5f50580233642cd46
BLAKE2b-256 b8f84c77bf7b6753e262766fb4c5ee559d9bcd8373fa8a8415a9b71142827184

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.0.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a89acad99fda2e0f756735457a556d06901475f0d56ff135d9c22a425c103054
MD5 9c056efd1a557b2f2485438dbb58aba3
BLAKE2b-256 6c86df2901119d5ceb5b2ee689d0a6c30050108481a4a9d64838bab1516af0b0

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