Skip to main content

Browser-impersonating HTTP client with TLS, HTTP/2, and HTTP/3 fingerprint spoofing. Passes Akamai & Cloudflare.

Project description

koon

npm PyPI License: MIT CI

An HTTP client that impersonates real browsers at the TLS, HTTP/2, and HTTP/3 fingerprint level.

Built in Rust on top of BoringSSL with native bindings for Node.js, Python, R, and a CLI. Passes Akamai, Cloudflare, and other bot detection systems by reproducing exact browser fingerprints — verified against real browser captures.

Install

Node.js

npm install koonjs

Python

pip install koon

R

# Install from source (requires Rust toolchain)
remotes::install_github("scrape-hub/koon", subdir = "crates/r")

CLI — download from Releases, or:

cargo install koon-cli

Quick start

Node.js

import { Koon } from 'koonjs';

const client = new Koon({ browser: 'chrome145' });
const resp = await client.get('https://httpbin.org/json');
console.log(resp.ok);      // true
console.log(resp.text());  // body as string
console.log(resp.json());  // parsed JSON

Python

from koon import KoonSync

client = KoonSync("chrome145")
resp = client.get("https://httpbin.org/json")
print(resp.ok)      # True
print(resp.json())  # parsed JSON

R

library(koon)

client <- Koon$new("chrome145")
resp <- client$get("https://httpbin.org/json")
resp$ok      # TRUE
resp$text    # body as string

CLI

koon -b chrome145 https://example.com

Rust

use koon_core::{Client, Chrome};

let client = Client::new(Chrome::v145_windows())?;
let r = client.get("https://example.com").await?;

What it does

koon reproduces three fingerprint layers that bot detection systems check:

Layer What's fingerprinted How koon matches it
TLS Cipher suites, curves, extensions, ALPN, GREASE, ALPS BoringSSL with per-browser config (JA3/JA4 verified)
HTTP/2 SETTINGS order, pseudo-header order, WINDOW_UPDATE, PRIORITY frames Forked h2 crate with header ordering API (Akamai hash verified)
HTTP/3 QUIC transport params, H3 settings Quinn + h3 with browser-matching config

All fingerprints are tested against hashes captured from real browsers. 10 integration tests verify JA3N, JA4, and Akamai hashes for Chrome, Firefox, Safari, Edge, and Opera.

Supported browsers

Browser Versions Platforms Profiles
Chrome 131 – 145 Windows, macOS, Linux, Android 60
Firefox 135 – 148 Windows, macOS, Linux, Android 56
Safari 15.6 – 18.3 macOS, iOS 15
Edge 131 – 145 Windows, macOS 30
Opera 124 – 127 Windows, macOS, Linux 12
OkHttp 4, 5 Android 2

175 profiles total. Use koon --list-browsers (CLI) to see all profiles.

Profile naming

Format: {browser}{version}{-os} — all parts except the browser name are optional. Both chrome145-macos and chrome145macos work (dash is optional).

Desktop browsers with OS variants:

Browser Default (macOS) Windows macOS Linux
Chrome 145 chrome145 chrome145-windows chrome145-macos chrome145-linux
Firefox 148 firefox148 firefox148-windows firefox148-macos firefox148-linux
Edge 145 edge145 edge145-windows edge145-macos
Opera 127 opera127 opera127-windows opera127-macos opera127-linux
Safari 18.3 safari183 safari183-macos

Mobile browsers:

Browser Example
Chrome Mobile (Android) chrome-mobile145
Firefox Mobile (Android) firefox-mobile148
Safari Mobile (iOS) safari-mobile183

OkHttp (Android apps):

Version Name
OkHttp 4 okhttp4
OkHttp 5 okhttp5

Shorthand — omit the version to get the latest:

Shorthand Resolves to
chrome Chrome 145 macOS
firefox Firefox 148 macOS
safari Safari 18.3 macOS
edge Edge 145 macOS
opera Opera 127 macOS
chrome-mobile Chrome Mobile 145 Android
firefox-mobile Firefox Mobile 148 Android
safari-mobile Safari Mobile 18.3 iOS
okhttp OkHttp 5

Features

  • TLS fingerprint — cipher list, curves, sigalgs, extension order, GREASE, ALPS, cert compression, delegated credentials
  • HTTP/2 fingerprint — SETTINGS order, pseudo-header order, stream dependencies, priority frames, window sizes
  • HTTP/3 (QUIC) — Alt-Svc discovery, QUIC transport parameter fingerprinting, H3 connection pooling
  • Header order preservation — HTTP/2 (via forked h2) and HTTP/1.1
  • Encrypted Client Hello — real ECH from DNS HTTPS records, with GREASE fallback
  • DNS-over-HTTPS — Cloudflare and Google resolvers with ECH config discovery
  • TLS session resumption — session ticket caching across requests
  • Cookie jar — automatic persistence with domain/path/expiry/Secure/HttpOnly/SameSite
  • Proxy — HTTP CONNECT and SOCKS5, with H3 fallback to H2 through proxies
  • MITM proxy server — local proxy that re-sends all traffic through koon's fingerprinted stack
  • WebSocketwss:// connections with browser-matching TLS handshake
  • Streaming responses — chunked body streaming with async iterator support
  • Multipart form-data — file uploads with custom content types
  • Per-request headers, timeout, and proxy — override defaults per request without affecting the client
  • Ergonomic response APIok, text(), json(), header() on every response
  • Session persistence — save/load cookies and TLS session tickets to JSON
  • Fingerprint randomization — slight jitter on UA build number, accept-language q-values, H2 window sizes
  • Response decompression — gzip, brotli, deflate, zstd (automatic)
  • Local address binding — bind outgoing connections to a specific local IP (multi-IP servers, IP rotation)
  • Connection pooling — H3 multiplexed + H2 multiplexed + H1.1 keep-alive
  • Custom redirect hookonRedirect(status, url, headers) → bool to intercept and stop redirects (captcha detection, geo-block handling)
  • Automatic retry — retry on transport errors (connection, TLS, timeout) with automatic proxy rotation
  • Request hooksonRequest/onResponse observe-only callbacks for logging and debugging
  • Proxy rotation — round-robin over multiple proxy URLs, proxy-aware connection pool
  • Bandwidth tracking — per-request bytesSent/bytesReceived + cumulative counters on the client
  • String bodypost(), put(), patch() accept strings directly (no Buffer.from() needed)
  • User-Agent propertyclient.userAgent exposes the profile UA for Puppeteer/Playwright sync
  • Geo-locale matchinglocale: 'fr-FR' generates Accept-Language matching proxy geography
  • Structured errors — machine-readable [CODE] prefix on all errors (TIMEOUT, TLS_ERROR, PROXY_ERROR, etc.)
  • Connection inforesp.tlsResumed and resp.connectionReused for debugging connection behavior
  • CONNECT proxy headers — custom headers in the HTTP CONNECT tunnel (session IDs, geo-targeting for Bright Data, Oxylabs)
  • IPv4/IPv6 toggle — restrict DNS resolution to a specific IP version
  • Mobile browser profiles — Chrome Mobile (Android), Firefox Mobile (Android), Safari Mobile (iOS) with platform-specific TLS/H2 fingerprints
  • OkHttp profiles — Android app impersonation (OkHttp 4.x, 5.x) with Conscrypt TLS stack fingerprint
  • Sync Python APIKoonSync wrapper for all HTTP methods without asyncio (WebSocket and streaming remain async-only)

Usage

Node.js

import { Koon } from 'koonjs';

// Browser profile + options
const client = new Koon({
  browser: 'chrome145',
  headers: { 'X-Custom': 'value' },
  proxy: 'socks5://127.0.0.1:1080',  // optional
  localAddress: '192.168.1.100',      // optional: bind to specific IP
  randomize: true,                     // optional: slight fingerprint jitter
  retries: 3,                          // optional: retry on transport errors
  locale: 'fr-FR',                     // optional: Accept-Language for proxy geo
  ipVersion: 4,                        // optional: force IPv4 DNS resolution
  proxyHeaders: {                      // optional: CONNECT tunnel headers
    'X-Session-Id': 'abc123',
  },
  onRedirect: (status, url, headers) => {
    return !url.includes('captcha');   // stop if redirect goes to captcha
  },
});

// HTTP methods
const r1 = await client.get('https://httpbin.org/get');
const r2 = await client.post('https://httpbin.org/post', 'data');
const r3 = await client.put('https://httpbin.org/put', 'data');
const r4 = await client.delete('https://httpbin.org/delete');
const r5 = await client.patch('https://httpbin.org/patch', 'data');
const r6 = await client.head('https://httpbin.org/get');

// User-Agent (useful for Puppeteer/Playwright sync)
console.log(client.userAgent);  // "Mozilla/5.0 ... Chrome/145..."

// Response
console.log(r1.ok);                             // true (status 2xx)
console.log(r1.status);                         // 200
console.log(r1.text());                         // body as string (charset-aware)
console.log(r1.json());                         // parsed JSON
console.log(r1.contentType);                    // e.g. "text/html; charset=utf-8"
console.log(r1.header('content-type'));          // case-insensitive header lookup
console.log(r1.body);                           // raw Buffer
console.log(r1.tlsResumed);                     // TLS session was reused
console.log(r1.connectionReused);               // pooled connection was reused
console.log(r1.remoteAddress);                   // remote peer IP, or null for H3
console.log(r1.bytesSent, r1.bytesReceived);    // bandwidth per request

// Per-request headers, timeout, and proxy
const r7 = await client.get('https://httpbin.org/get', {
  headers: { 'Authorization': 'Bearer token' },
  timeout: 5,                                 // 5s timeout for this request only
  proxy: 'http://user:pass@other-proxy:8080', // override proxy for this request
});

// Cookies persist automatically
await client.get('https://httpbin.org/cookies/set/name/value');
const r = await client.get('https://httpbin.org/cookies');

// Clear cookies (keeps TLS sessions and connection pool)
client.clearCookies();

// Session save/load
const session = client.saveSession();           // JSON string
const client2 = new Koon({ browser: 'chrome145' });
client2.loadSession(session);

// File: save/load to disk
client.saveSessionToFile('session.json');
client2.loadSessionFromFile('session.json');

// WebSocket
const ws = await client.websocket('wss://echo.websocket.org');
await ws.send('hello');
const msg = await ws.receive();  // { isText: true, data: Buffer }
await ws.close();

// Streaming
const stream = await client.requestStreaming('GET', 'https://example.com/large');
console.log(stream.status);
const body = await stream.collect();  // or iterate with nextChunk()

// Multipart upload
await client.postMultipart('https://httpbin.org/post', [
  { name: 'field', value: 'text' },
  { name: 'file', fileData: Buffer.from('...'), filename: 'upload.txt', contentType: 'text/plain' },
]);

// MITM proxy
import { KoonProxy } from 'koonjs';
const proxy = await KoonProxy.start({ browser: 'chrome145', listenAddr: '127.0.0.1:8080' });
console.log(proxy.url);         // http://127.0.0.1:8080
console.log(proxy.caCertPath);  // path to CA cert for trust
await proxy.shutdown();

Python

KoonSync provides a blocking API — no asyncio needed:

from koon import KoonSync

# Browser profile + options
client = KoonSync("chrome145",
    headers={"X-Custom": "value"},
    retries=3,                                   # retry on transport errors
    locale="fr-FR",                              # Accept-Language for proxy geo
    ip_version=4,                                # force IPv4 DNS resolution
    proxy_headers={"X-Session-Id": "abc123"},    # CONNECT tunnel headers
    on_redirect=lambda s, u, h: "captcha" not in u,
)

# HTTP methods
r = client.get("https://httpbin.org/get")
r = client.post("https://httpbin.org/post", "data")
r = client.put("https://httpbin.org/put", "data")
r = client.delete("https://httpbin.org/delete")
r = client.patch("https://httpbin.org/patch", "data")
r = client.head("https://httpbin.org/get")

# Response
print(r.ok)                 # True (status 2xx)
print(r.status)             # 200
print(r.text)               # body as string (charset-aware)
print(r.json())             # parsed JSON
print(r.content_type)       # e.g. "text/html; charset=utf-8"
print(r.header("content-type"))  # case-insensitive header lookup
print(r.tls_resumed)        # TLS session was reused
print(r.connection_reused)  # pooled connection was reused
print(r.bytes_sent, r.bytes_received)  # bandwidth per request

# Per-request headers, timeout, and proxy
r = client.get("https://httpbin.org/get",
    headers={"Authorization": "Bearer token"},
    timeout=5,                                   # 5s timeout for this request only
    proxy="http://user:pass@other-proxy:8080",   # override proxy for this request
)

# Cookies persist automatically
client.get("https://httpbin.org/cookies/set/name/value")
r = client.get("https://httpbin.org/cookies")

# Clear cookies (keeps TLS sessions and connection pool)
client.clear_cookies()

# Session save/load
session = client.save_session()
client2 = KoonSync("chrome145")
client2.load_session(session)

# User-Agent (useful for Puppeteer/Playwright sync)
print(client.user_agent)  # "Mozilla/5.0 ... Chrome/145..."

For async code, use Koon instead — same API, but all request methods are coroutines:

from koon import Koon

client = Koon("chrome145")
resp = await client.get("https://httpbin.org/get")

# WebSocket (async only)
ws = await client.websocket("wss://echo.websocket.org")
await ws.send("hello")
msg = await ws.receive()
await ws.close()

# Streaming (async only)
stream = await client.request_streaming("GET", "https://example.com/large")
body = await stream.collect()

R

library(koon)

# Browser profile + options
client <- Koon$new("chrome145", proxy = "socks5://127.0.0.1:1080", randomize = TRUE,
                    local_address = "192.168.1.100", retries = 3L,
                    locale = "fr-FR", ip_version = 4L,
                    proxy_headers = c(`X-Session-Id` = "abc123"),
                    on_redirect = function(status, url, headers) !grepl("captcha", url))

# HTTP methods (synchronous)
resp <- client$get("https://httpbin.org/get")
resp <- client$post("https://httpbin.org/post", "data")
resp <- client$put("https://httpbin.org/put", "data")
resp <- client$delete("https://httpbin.org/delete")
resp <- client$patch("https://httpbin.org/patch", "data")
resp <- client$head("https://httpbin.org/get")

# Response
resp$ok         # TRUE (status 2xx)
resp$status     # 200
resp$version    # "HTTP/2.0"
resp$text           # body as string (charset-aware)
resp$content_type   # e.g. "text/html; charset=utf-8"
resp$body           # raw vector
resp$headers        # data.frame with name + value columns

# Parse JSON (via jsonlite)
data <- jsonlite::fromJSON(resp$text)

# Per-request headers
resp <- client$get("https://httpbin.org/get",
  headers = c(Authorization = "Bearer token")
)

# Cookies persist automatically
client$get("https://httpbin.org/cookies/set/name/value")
resp <- client$get("https://httpbin.org/cookies")

# Clear cookies (keeps TLS sessions and connection pool)
client$clear_cookies()

# Session save/load
json <- client$save_session()
client2 <- Koon$new("chrome145")
client2$load_session(json)

# Export profile as JSON
client$export_profile()

# List all browsers
koon_browsers()

CLI

# GET with browser profile
koon -b chrome145 https://example.com

# POST with body
koon -b firefox147 -X POST -d '{"key":"value"}' https://httpbin.org/post

# Custom headers
koon -b safari183 -H "Authorization: Bearer token" https://api.example.com

# Verbose output (request/response headers)
koon -b chrome145 -v https://httpbin.org/get

# JSON output
koon -b chrome145 --json https://httpbin.org/get

# Save response to file
koon -b chrome145 -o page.html https://example.com

# Proxy
koon -b chrome145 --proxy socks5://127.0.0.1:1080 https://example.com

# Session persistence
koon -b chrome145 --save-session session.json https://example.com/login
koon -b chrome145 --load-session session.json https://example.com/dashboard

# DNS-over-HTTPS
koon -b chrome145 --doh cloudflare https://example.com

# OS-specific user-agent
koon -b chrome145-macos https://example.com

# Fingerprint randomization
koon -b chrome145 --randomize https://example.com

# List all browser profiles
koon --list-browsers

# Export profile as JSON
koon --export-profile chrome145

# Start MITM proxy
koon proxy --browser chrome145 --listen 127.0.0.1:8080

Rust

[dependencies]
koon-core = { git = "https://github.com/scrape-hub/koon.git" }
use koon_core::{BrowserProfile, Client};
use koon_core::profile::Chrome;

#[tokio::main]
async fn main() -> Result<(), koon_core::Error> {
    // From a specific profile constructor
    let client = Client::new(Chrome::v145_windows())?;

    // Or with builder for full control
    let profile = BrowserProfile::resolve("chrome145")?;
    let client = Client::builder(profile)
        .max_retries(3)
        .locale("fr-FR")
        .ip_version(koon_core::IpVersion::V4)
        .on_redirect(|status, url, _headers| {
            !url.contains("captcha")
        })
        .build()?;

    let r = client.get("https://example.com").await?;
    println!("{} {} ({} bytes)", r.status, r.version, r.body.len());

    // Clear cookies without resetting TLS/pool
    client.clear_cookies();

    Ok(())
}

Architecture

koon-core         Rust library — TLS, HTTP/2, HTTP/3, profiles, proxy
koon-node         Node.js native addon via napi-rs
koon-python       Python extension via PyO3 + maturin
koon-r            R package via extendr
koon-cli          Command-line interface via clap

Key dependencies:

  • boring2 — BoringSSL Rust bindings
  • http2 (fork) — HTTP/2 with header field ordering
  • quinn + h3 — QUIC / HTTP/3
  • napi-rs — Rust to Node.js bridge
  • PyO3 + maturin — Rust to Python bridge
  • extendr — Rust to R bridge

Building from source

Only needed if you want to build koon yourself instead of using the published packages.

Requirements:

  • Rust 1.85+
  • CMake
  • NASM (Windows only, for BoringSSL assembly)
  • C compiler — MSVC (Windows), GCC or Clang (Linux/macOS)
# Core library
cargo build --release -p koon-core

# Node.js addon
cargo build --release -p koon-node

# Python package
cd crates/python && pip install -e .

# R package
cd crates/r && Rscript -e "rextendr::document(); devtools::install()"

# CLI binary
cargo build --release -p koon-cli

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 Distribution

koon-0.8.0.tar.gz (140.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

koon-0.8.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

koon-0.8.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

koon-0.8.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

koon-0.8.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

koon-0.8.0-cp314-cp314-win_amd64.whl (3.1 MB view details)

Uploaded CPython 3.14Windows x86-64

koon-0.8.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

koon-0.8.0-cp314-cp314-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

koon-0.8.0-cp314-cp314-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

koon-0.8.0-cp313-cp313-win_amd64.whl (3.1 MB view details)

Uploaded CPython 3.13Windows x86-64

koon-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

koon-0.8.0-cp313-cp313-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

koon-0.8.0-cp313-cp313-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

koon-0.8.0-cp312-cp312-win_amd64.whl (3.1 MB view details)

Uploaded CPython 3.12Windows x86-64

koon-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

koon-0.8.0-cp312-cp312-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

koon-0.8.0-cp312-cp312-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

koon-0.8.0-cp311-cp311-win_amd64.whl (3.1 MB view details)

Uploaded CPython 3.11Windows x86-64

koon-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

koon-0.8.0-cp311-cp311-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

koon-0.8.0-cp311-cp311-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

koon-0.8.0-cp310-cp310-win_amd64.whl (3.1 MB view details)

Uploaded CPython 3.10Windows x86-64

koon-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

koon-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

File details

Details for the file koon-0.8.0.tar.gz.

File metadata

  • Download URL: koon-0.8.0.tar.gz
  • Upload date:
  • Size: 140.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for koon-0.8.0.tar.gz
Algorithm Hash digest
SHA256 c5e10a30b5cfe631d689b801cbda3de3869bf10d8190bf21fb0b9833594d75f7
MD5 5628e2c7f95bff378b59a0973c1fdd26
BLAKE2b-256 d3d94874deda6c0ced09ffc50497c442cabea88d8345685762bab51e0691f363

See more details on using hashes here.

File details

Details for the file koon-0.8.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 788fbd25b82663470b27a33a17a9d927d505cbd2d65d5228c1f7c9403841252f
MD5 772915d6b7fddba23d4cff46283082e8
BLAKE2b-256 aa7902406328d3f7097e4c3954606df4f4e8ebc1c8db7707023f685f51edc614

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aae8778ca2a111638ba8a42a11a8c48c4dbaa964e62abd8f5d10e6559b3c1b95
MD5 c720cce2843d7d14282c37bde4494a66
BLAKE2b-256 74a10777413ef48860b9785e622d2004514e3fba312cf7321e277b50d7dd3a44

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dd390f7adca7718714d062be1f6769ccdd72192d2a10f0c7b2fc7d92bb87c065
MD5 16f2a884500afc69637776bff64b0acd
BLAKE2b-256 906df25ff5b8425f4fa68f20892b25b150d07e8f40ca47dbb218f80359ead38a

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 75c32e0373a9a69a6a01caebbd6466971e8edd5699378623e77156f84f9829bc
MD5 b0b14281a761c33824962f670b89aea1
BLAKE2b-256 15dd8b363050710b26e7b5fb42b5683f0f76e27bc7bba0d34c2ebc46e25b3b40

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: koon-0.8.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for koon-0.8.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 f61144f67bc996e11c524fc81e85d640bca8773a68b494dfe846281415361a57
MD5 c8276f8b9a88c9d98eb5a7e3bd36acca
BLAKE2b-256 6991e9c42e5627fed2b3e90fe6ad7e15daa669db7d36a6c9b9e1c9cf2ad91c72

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c5c935643940e6e4dd2c448084a885a90574313b4dbf6ba60b8c75289aca0517
MD5 406bec01ae6d38c77c6b891f21fa15dc
BLAKE2b-256 d66f198d2da3c923dfa03f3d0f934f1f2cf22d146f9673f9b14e5f9c65699df2

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 01aa322e8864262a618320af8a1371620a9135a8536362c2d3e70d10746c13e1
MD5 8cde2b4ad171958f453e100cdceb9094
BLAKE2b-256 c702826fc33ac4c07814e651eb956e5c96b6e6eb49a94d86b7b4d25188d083e1

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c2c7722238370f4faba4e4dc50880c2043f2cc9362e9bbf1ad588ddbe6c3b0cd
MD5 544be91daccc78afc9f59c82e6f6825b
BLAKE2b-256 8d1503325d770ea54bf495f6010711b60f562448736fa426ca1d93de334ab877

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: koon-0.8.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for koon-0.8.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fec0611873b4c61011a93bd933b6f18ccfc87e8fb137e4f440275ef1f9ed44bf
MD5 13b3dd8250b8f03256c42f0306d8374a
BLAKE2b-256 281989c283617bd2963dd71af18a2e8ed135e14ba415a2e925b540251cf971b1

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d7f835d5bac12faab3e981087eb1d2335cd309d3e002d6565bbbba3b50a4aee0
MD5 99993f94bfc8dd306ae9dfb688dcd325
BLAKE2b-256 a844faab89895a7d0d752fd9f603e781a06cf3bff0e08f3bce53fc4d89a49ae7

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4fd6b1e06af0ca013385fb80ce50b60258672ef875669c32c25e002b36d25187
MD5 31c952b9bc8ce59e6b630a5d5834abe0
BLAKE2b-256 91983f1ccfd7d798779b6cee92a4e6b40e7bab3d283e92c6b4402402601126d4

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 716eea8349669c790ea4adb65497cb533c9763717436e4dab6c597e58c4c9725
MD5 29d39404b40d3bd0de81ae9de5c0c694
BLAKE2b-256 ed6f1ef17f1d01b8125ee61ab9fb19beac67efbeef37acdcd6fa807e2122d1a2

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: koon-0.8.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for koon-0.8.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5d9d5ff8deb597e9b3cc313769908953952fc1c50c128b8712bd0a8a033dd34c
MD5 0275a0b43e4c786346d6c2280ecda6a6
BLAKE2b-256 a66b9f722835b50a0f8cba76349020f63f68caa857b6224329eb39415e99050b

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7dab8dc2868e150eda3e1cc87fe71b7228bb81e5de0b48cd7d9d1dbca110468c
MD5 9e0330dbcb7996eaec0da2b5a6d1fce3
BLAKE2b-256 68d41ca085cb8e6d90281d28e71e7f4dfd5e096a6795ba7d44e319e217ca0b7d

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 abd9703bb33808769aad051631718c2b0710a2a73d794b9306208754db6bbe12
MD5 cc8196b77735db2cbb215534f32966f5
BLAKE2b-256 69fb197de11315f68c0d89af828cac9f67f5c4127d24a0d0756838bbc2644b9e

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5f70151f10d54253e29ff3f006e5bf8e37de43089256ef2a10a2ebaeafc456f4
MD5 7b9dd4c9a642523ce9619d9e41014f33
BLAKE2b-256 2309fcb90663fdc9da628d591dcdf43cafac0ebc43fa079dc100d2c4c7fa0ca5

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: koon-0.8.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for koon-0.8.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f6648e24642b9ad43e7d8d3b1e310a1f3114778439f3104d9e4021baf7afc705
MD5 1aafb9009357cc9621db9f36b2ac1b46
BLAKE2b-256 29ccf53b69a064e2b46acc3536117e27701a5e3b659d77b41d2b78c341401bf3

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a1013895a94c40df6af6ae2e6f97534b58623c14260add534a4ff7e668a693c2
MD5 3ef016ac3092e1940f9c956cae55dfad
BLAKE2b-256 7db99047322646c3859395ce500dcafc14a784f63752adb819b5eddc39bd5664

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 621f76f6a5644b795a663c9686cc07fb107431c28e78749878f490b7b5cc17d6
MD5 ebb72396df677f500b4704aebc441804
BLAKE2b-256 0413cd817b4fb888989b1518ef8207092e459100b642b064324cab944c29f74e

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d2778c2832b673669a9b3c2e9fb5d9a7deb6c15ba4dc1a359aa087cddfaf9240
MD5 971f688084aaa53fa81f5cc02c5b361b
BLAKE2b-256 1e54775acb672dca98b1ae8b0674ef2ab0edf2e17ef1093a13f73884e3097b86

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: koon-0.8.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for koon-0.8.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3d5db684635cd45eecc3cf700954a35e766bfb3f4197ffaaab51603a36fb4fa3
MD5 4541dc912c44c8570dafaf927005852e
BLAKE2b-256 95cddb6e36db46feddd52d3090cae0b2f158435191a87043f7285012c98e9722

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 31e75710e1605b643c6c21e2275d1807003d4ad6c682778149d1c0f95d40be69
MD5 ef1f74f04b750c44b0a269c19b10c72e
BLAKE2b-256 246d65f13051fd32f7bde5405dbabf0694fd8254a9c3e90ba1a586e8e3f29016

See more details on using hashes here.

File details

Details for the file koon-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for koon-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91a4995f81f4bf701683647e0589fd834952ac4326fb37ba850c8f06268ae8ce
MD5 132887792a9f36f614175b1621b2a4c2
BLAKE2b-256 9e8061d323d622798dd2370525c4184000f098c642ab30149c9f28e56f8d925a

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