-
-
Notifications
You must be signed in to change notification settings - Fork 1
Performance
The server is designed for interactive use: a model calls a tool, a person waits. Everything below is about keeping that under a second in the common case, and bounded in the uncommon one.
| Default | ||
|---|---|---|
| Result cache | on | LRU, 100 MB / 1,000 items. Keyed on operation + input + arguments |
| Streaming | on | Inputs over 10 MB stream rather than buffering |
| Batch | on | Up to 100 operations per cyberchef_batch call |
| Worker threads | off | Opt-in with CYBERCHEF_ENABLE_WORKERS=true
|
| Telemetry | off | Privacy-first. Local only even when enabled |
| Rate limiting | off |
From the release benchmark suite, median latency:
| 1 KB | 10 KB | 100 KB | |
|---|---|---|---|
| To Base64 | 0.09 ms | 0.23 ms | 1.7 ms |
| To Hex | 0.11 ms | 0.49 ms | 21 ms |
| MD5 | 0.10 ms | 0.63 ms | 7.1 ms |
| SHA2 | 0.10 ms | 0.54 ms | 5.7 ms |
| Gzip | 0.40 ms | 3.3 ms | 305 ms |
Start-up is about 1.3 seconds, nearly all of it building 504 operation schemas. Restricting the tool surface does not change that — the schemas are built either way; it changes what is sent.
The analysis tools are different in kind, because their cost comes from the shape of the input rather than its size:
xor_key_length, 1 MB at max key length 256 |
594 ms |
cyclic_pattern, 1 MB generated |
70 ms |
hash_identify |
under 1 ms |
rsa_attack, 16,384-bit modulus, 100,000 Fermat iterations |
3.5 s, with a 10 s hard stop |
On by default and usually the largest single win, because an assistant re-runs the same decode more often than you would guess.
Cached results are rendered through the same content-block path as fresh ones. That is not
cosmetic: when the cache returned raw values instead, the first call to cyberchef_generate_qr_code
produced an image block and every subsequent call produced text.
cyberchef_cache_stats hit rate, size, evictions
cyberchef_cache_clear empty it
Disable with CYBERCHEF_CACHE_ENABLED=false if inputs are sensitive and you would rather they not
sit in memory.
cyberchef_quota_info concurrent operations, totals, limits, rate-limit state
cyberchef_worker_stats worker pool, when enabled
Per-call timeout is 30 s and applies to the analysis tools as well. Note that a synchronous loop
cannot be interrupted by a timeout — Promise.race does not cancel the loser — which is why the
expensive analysis loops yield periodically and check a deadline themselves.
Off by default. When enabled with CYBERCHEF_TELEMETRY_ENABLED=true it records call counts,
durations, input and output sizes, and error rates in the process. Nothing leaves it unless you
call cyberchef_telemetry_export.
-
Use
cyberchef_bakefor chains. A five-step decode as one call beats five calls: one round trip, one cache entry, one quota slot. -
Use
cyberchef_batchfor the same operation over many inputs. - Leave the cache on.
- Restrict the tool surface if context is your bottleneck rather than latency — 4,900 tokens against 100,000 on every request.
- Enable workers only for large inputs; the pool costs more than it saves on small ones.
v2.4.0 · upstream CyberChef v11.4.0 · GPL-3.0-or-later
Maintained in docs/wiki/ and published here automatically — edit the repository, not the wiki, or your change is overwritten on the next sync.
Getting started
Using it
Operating it
Help
The project