Skip to main content

Browser impersonation HTTP client with TLS/HTTP2 fingerprint spoofing

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 (Windows) 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 Windows
firefox Firefox 148 Windows
safari Safari 18.3 macOS
edge Edge 145 Windows
opera Opera 127 Windows
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.6.2.tar.gz (132.2 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.6.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

koon-0.6.2-cp314-cp314-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.14Windows x86-64

koon-0.6.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

koon-0.6.2-cp314-cp314-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

koon-0.6.2-cp314-cp314-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

koon-0.6.2-cp313-cp313-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.13Windows x86-64

koon-0.6.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

koon-0.6.2-cp313-cp313-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

koon-0.6.2-cp313-cp313-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

koon-0.6.2-cp312-cp312-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.12Windows x86-64

koon-0.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

koon-0.6.2-cp312-cp312-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

koon-0.6.2-cp312-cp312-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

koon-0.6.2-cp311-cp311-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.11Windows x86-64

koon-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

koon-0.6.2-cp311-cp311-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

koon-0.6.2-cp311-cp311-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

koon-0.6.2-cp310-cp310-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.10Windows x86-64

koon-0.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

koon-0.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

File details

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

File metadata

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

File hashes

Hashes for koon-0.6.2.tar.gz
Algorithm Hash digest
SHA256 75f84d4f6c560e6408700da41bb9a9fc0034b7232f2228ab237f5ad2b1383148
MD5 8706839dd646e346234f5f381cccce4e
BLAKE2b-256 5413c777d7e053f4ff76cdbf4e0e58ebe62c2b63d55682de0d50cc874e43d2d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ff75ecb111c6b61371b178349a1497e129ec96569d569a45dc99f40d96f6295f
MD5 10e9446ae75b93857b7cd50f1f5f43d2
BLAKE2b-256 ea80e4e8bad818920de59a0f4a7cc132d6895753535f2d82c55ef5d8a5f16689

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for koon-0.6.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7213e1772a76208ed85d6c4cc5d2df23cb4be78ba9c912b8f5b28302a23a0c13
MD5 fd62d5d28f2eb9708c8f41a1cfb5f469
BLAKE2b-256 c4148c2e0565c8e01ebc5993ad2c79ed5c19f19358cd6aa4ec394a562487829a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 feaa6371bcc9c23be4e9ed274b43ff123e8cdb82caabba18a24360013dc4e583
MD5 ae7423365f40f45d023be867781cbadc
BLAKE2b-256 8c9bfa038bb5b90aec515e26d0f5bb7d6af9af9b516570c8c0368bc0f21d5dfb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ffa808da4b12c8b4c11a8f9fdefd6a587e037f68f1d37106d9b2304d2c2cca6d
MD5 881e3852c5fbfa37fa703e4aeddbfbf1
BLAKE2b-256 2589d36fedc596d02e876edb476bfc80616d8b20edbee2ef04c874c9cc657b42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 39af4d83d90820efde632598d5c261ed51d4de6057821025e6d91d24ad8f938c
MD5 f49964083a416c01c185736c2d2c4d9d
BLAKE2b-256 f32af0b969804795b5f19ab40d498648a6956b396576c467bf484f24c86e8966

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for koon-0.6.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ad98ad986ba849b5ab94226b84cae70cb2018a7722b88f092a12b35333bc5d67
MD5 053c9c1af51c9b7310d715722a3205fb
BLAKE2b-256 24f01021b74e49a1aacb35261364e95de459d37d982fc9c5849a06faa1b3d726

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 421c462f93b3961be39c52a442c8167f8931116bd5779e0d9d2a66d1bc9d1494
MD5 9d830f9617ee20341a97b91426dbc795
BLAKE2b-256 da5ec04e345994924f9c583bb6410d2b88c157d19a91285af25851107cd02dde

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b9b8a64bc123ea030b3d1c7fc46dbc5de55095684c3e8f4af2df0530c84f4457
MD5 c26267506439f632ecb630773ca06c44
BLAKE2b-256 99920ea48cebfae3964a840194283e812e0a87af2387f803b73f84d0eb2a06ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 328b01fd5c23ee427e4a73ec6aa7eed521ed234d1a6312d33e2ee18462585ba3
MD5 ee46ff324eb8e85959550c8316e3b01f
BLAKE2b-256 3208cbed9f651efd068f904b21b8cb627740ae9578888ef05c5063a588f31885

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for koon-0.6.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 47b0d5591d0dafdc80a3be6767329ede6e005c79c9461f29ec4430fe746e523b
MD5 9ec7a8eecbae94eebda6705ef025cc1c
BLAKE2b-256 238f8197a223c4078bb88e983a4b7a2a2a94c67041382f261c13ec96e4e1499a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9adb36dd4dc581a8112e4ad9d8d4f21a74b3458746e987448ddd4ff5b9919b2f
MD5 252fac5ca72a60979fbcde79fd0105e9
BLAKE2b-256 c1bebbe2731234b63cd18de27899475dd9a63545384486eae833809df4956fb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b43be350509c4e520fb813f72b839b168b3ba31a1fc955472734fbde2795923
MD5 1149c3a49c3789c4433f798dd2645d1c
BLAKE2b-256 ced9175036deae56c9cce6a940186cf771d6c69d684f3549a4e8ce5d5f1f033d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f18e199cfbcd5bf7e6a689d80df91ad6ddae6005c59a60db6c566d11a4498613
MD5 603ff5cea0b09b72d41f4bbccbb4ab81
BLAKE2b-256 1fd063f39edcf15fb80538f99a4d249a978c339a990c5dc55a2559f191de9b4f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for koon-0.6.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ea676a33820ac978e2714652fc42fc8eaff612fa0cd31d092283e9f4f3361d90
MD5 99086af9e77bf1152d19a4b27d2ccbea
BLAKE2b-256 31e324350edcf07d90cfde5e1eae8a0ab712e03b9388daf1e15cdc5e07d19eaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b6d436b9f076bee48833bfd7b6e1f04380f1c8f286b97437a0db9c1b3cf6b800
MD5 8696dcfd08a40310af59c499496395ff
BLAKE2b-256 18448972035b92593700658ee1a71fb746e1c229a689814044f864e69862beba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 175528255244af8fd3e531e64b1cbb548b9b763645c5452a1d10bd1e76cab4b5
MD5 16b7e1e42e6fac85848738f3b9370616
BLAKE2b-256 4387a2d7c84c5f26883e4585a16ff203e07e4296d4b9ff89aea84b0b8d9efe96

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1818383f38fac986e64f78c3859eb896c320a1ee5b2497e3854bc476b4c7d270
MD5 352971aefd7f16eaff52fa787f2d370d
BLAKE2b-256 ab57f5971ec5ec1add11d2fa940f8b50bda0ecb11ed9bb3e5d718a5a912bc0b4

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for koon-0.6.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f5998ccfe273e7ac44a000a167b11df4ab41306cdd7d9371ae763d9310a667d3
MD5 7903fedeeb4b8990e153676d96dc5881
BLAKE2b-256 d5493564af8be9fab5be2390be38e45783709ee32940c1f676db407512bd6729

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fdaadd351f6defe50ee1a00b60e34aece65932e945b92fec1c41e95a2d342dae
MD5 13ec9deca788d030bb5cca2462cf5217
BLAKE2b-256 8ce7f767a65fb36cb03f228de1c2e2755a7a89054947c3fd7f6e5c0571c7b2b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for koon-0.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7bcb860f8d9ce522d23f065702e4b62d5604924fc05fff1f26fdab668acea6f5
MD5 fc2f21d3eccac800306694633a7be5a3
BLAKE2b-256 044662f1067a8463baa28435337daa85acfc1a9373d1f9ed2855e8cb5235da52

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