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

Uploaded CPython 3.13Windows x86-64

zapcode-1.1.4-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.4-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.4-cp313-cp313-macosx_11_0_arm64.whl (885.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zapcode-1.1.4-cp313-cp313-macosx_10_12_x86_64.whl (909.9 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

zapcode-1.1.4-cp312-cp312-win_amd64.whl (776.3 kB view details)

Uploaded CPython 3.12Windows x86-64

zapcode-1.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (985.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

zapcode-1.1.4-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.4-cp312-cp312-macosx_11_0_arm64.whl (885.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zapcode-1.1.4-cp312-cp312-macosx_10_12_x86_64.whl (910.0 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

zapcode-1.1.4-cp311-cp311-win_amd64.whl (776.6 kB view details)

Uploaded CPython 3.11Windows x86-64

zapcode-1.1.4-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.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

zapcode-1.1.4-cp311-cp311-macosx_11_0_arm64.whl (889.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

zapcode-1.1.4-cp310-cp310-win_amd64.whl (776.6 kB view details)

Uploaded CPython 3.10Windows x86-64

zapcode-1.1.4-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.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (962.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

zapcode-1.1.4-cp310-cp310-macosx_11_0_arm64.whl (889.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

File metadata

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

File hashes

Hashes for zapcode-1.1.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ca3aad07f7d6553b4af63dd8e2a6c2148109b8c772b43da21c752bf0668a5c57
MD5 344ea6fb6f1c481201cc7077646e0aa8
BLAKE2b-256 468c1b4ee4172f4f53105fb4dcd7fc5c8abd292b2b838c6d88052d86de9739ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d3a9ebd86dc5edc72d23146c253d13c9a6a848c9983dce9cbcb569a7ffe186e1
MD5 c9c65c49a8f51191e3b9e19d10220f58
BLAKE2b-256 abb3d949f47154de46510d0714318581dc173822cc7460bcc93aec0430c9bac1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 892e5d41e824627a44ab989479d8746ab1f2c121b333ffa295f540c4f3527725
MD5 59e3402d8d59381d709ce08a2adc72df
BLAKE2b-256 bf1f0c7d0784f986ad9b66eaa487c848fef0b610389d3415abdd71b08402ce85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76c86b6ddb73e1a511ad2a296674ced1566915b7aa43a856177662604cc9f87e
MD5 ecaa42c61c9e9e1529c025656e808fed
BLAKE2b-256 3cf04c2d75df846b4258cfb9924be21670ee314e314029f28aecc4c181a6d5ff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0587d8af2606397cd1bcfad784822796016df71b91f39aaddc1d67a7bb66da24
MD5 da7138a397a4fc7f9777080aae22bb44
BLAKE2b-256 63b18b52cc551342f9b219bd4f531901788e06429929a65a59c60c588efb230b

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for zapcode-1.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 43380025d633fd2fe4661a7ff8f61cebdce891bbd378a6936d3944e5b2644300
MD5 6e2fdebfa80159c56adb6618e2561380
BLAKE2b-256 475a5c6c13b7fffe531ccb3a838e205b024852a49967d5014bbebfa4e08df517

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 46a03bc8e3f31c514772496e890bd01c7f1b80d746f7d0d29da6a4cc0310f1f3
MD5 5303ec8eabca51a4028d514ccc88540e
BLAKE2b-256 60afa1ec3f788d81c03e90a54d5d26ff80df5ced331a6a271af3af4f2f7c75eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f4d7fb0d171a37583022417ec6cd0cdcef8b6b7d2a4a224e1d208d5f59cbb130
MD5 27c8323aff861132df7b7b3f9a2839bf
BLAKE2b-256 47fcac1abe830c90ee3de2de6fa5583c0b22abe5bc64a46bebebb72600c06e0c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 91b78ccf07aa0184672ad4e8bf7dfe362b7878ddbee8cfd034583575115977fb
MD5 0637898dd304ab7850a8968726fa366e
BLAKE2b-256 fb2127799a2de44d860fd7370da529b7a46750804141d57ede29009db151c5c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 006ed5189a54535040072c9d87ea5377397eeb1671b276c5453c9f3cdbaf7968
MD5 215bd31dcfcc82501b8a3f51bbfbb7ac
BLAKE2b-256 7bdfbac267816b4e41d37e5dd6f276b9110c26dbab8dc52363304a95d0ff07d3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for zapcode-1.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bf4f11fabce1052d6c16c14bf4dbb86a14f45aae41fda52a821c96170649923f
MD5 92112ba96c5c18e48405674a1f9e661f
BLAKE2b-256 3050446106fce445b4801ee646ad233b7a5c9b630f892bd7bd1399dbffa9b852

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dfd126bdb4641444d67363677f935287517776ece9951573da4da6d9768e1de3
MD5 5d536a72c642bdd0f590626e569588f5
BLAKE2b-256 beaa82466777ea49684a8e5fc56512cd025912d4dfcd9fa4a311a3f4f67bbaef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0df1c21a1d71ffc7dc7eee25cfc9c30adc2822fa196b824e108143eb227f7c11
MD5 c201540e49474fe61af0952fde345d35
BLAKE2b-256 3f812e7237b0e42a2ac5a865b0b757d6e55665678e21276947c8e495c50375f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f156e6e6fff0f80f1d66f3b6eb0b82118c9046bff6bc877ffb0a1179768c1d1c
MD5 41a740a5b6e97375584ce27b6284e7b1
BLAKE2b-256 36c543cd6e332c6c3421b5ab3d204374d3efed0ff912afa3b8340941d2b2f824

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 588d37cdb4ea8ce16af1c9bd1580f36ca194566e79c08ea33601b67d54e79431
MD5 fc1c033adfafc5ae774ff97c94d7ada0
BLAKE2b-256 2ab367b31d4e3118b9ee12eeb6d616dc3fa8f777d6f08b5555269f956a384e23

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for zapcode-1.1.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 14a7b87fff2b4f7f66fb9be98a89107bef55f7e6882fccc249b40f4e365cfe33
MD5 3b60a414cea65094d7c74088fa5897c0
BLAKE2b-256 1cba85160b0a03654f4329ff3567e4f945f4b1cb669a60a9360f9d378cbfd3c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6c685493f853286e74c89e017fada68a09ab5ab74b55c3e136e6ec72847805f2
MD5 602a8e90c471ae12e16acad495550327
BLAKE2b-256 b31434fea51f80cb5ee349a19021a4b80d76f02d61264fe8a2781a6f698dbd26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 49b6d588f1f49125a39b94752e057fc85ef3a0002910d00bae76be9ab40c4d79
MD5 1e9edbeb1e9e09e33f93a7268820d211
BLAKE2b-256 f0760453640f6fdec248f2de2c8e1e2a13b4fbf394db594e1511519d84f8bb1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c8865d9af5fb09fc5ac22eb8347c26a56d902a860482bd8ea224b11fa2b8312
MD5 40174289c2ae943ef0d0e5f53fff644c
BLAKE2b-256 d81d3a37eb19e5d0682c1f26f151a8b6ac6c22655c335a23c9374f8ccb28b94e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zapcode-1.1.4-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a520abcfb7ca8ceb09b4daeb25d05b83e8d0e5d89189aa16fb1bf362d79b1895
MD5 9c4e7fa21ff3fb212613d74864806c7f
BLAKE2b-256 41a87518fc32e76dc3e1578dec45cb832cbd2a167716da5cdff095cde53dfa3d

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