- β
- β
- October 19, 2026
-
π 19h/chernobog v6.4.0 release
Chernobog 6.4.0
Changes in
v6.3.1...v6.4.0.-
Semantic MBA synthesis beyond the rule catalog β a bounded Z3-backed
pass simplifies typed 8-, 16-, 32-, and 64-bit expressions across basic blocks,
with explicit conversions, overlapping register views, byte-addressed memory,
and proven loop invariants. Replacements require an equivalence proof, followed
by an independent check of the emitted microcode. Unsupported effects,
inconclusive proofs, and exhausted budgets preserve the original expression. -
Nested arithmetic and Boolean reconstruction β bottom-up linear MBA
reconstruction exposes identities inside larger expressions and cancels
arithmetic across Boolean subexpressions. Boolean synthesis, modular affine
fitting, known-bit comparison reduction, and bounded unsigned division
simplification recover smaller expressions beyond fixed patterns. Constant
division can become a constant or a threshold comparison when the proven
quotient range permits it. -
Caller-context simplification β pure scalar helper calls can become
constants or smaller symbolic expressions after substituting their actual
arguments. Local value propagation and facts from both sides of a branch
expose opaque predicates and constant branches, including after a helper result
is assigned to a local. Emitted ctree expressions are checked with their casts
and integer promotions; unsupported or effectful helpers remain calls. -
Deep deobfuscation β the new Deep deobfuscation (Chernobog) action
raises the shared semantic-analysis budget from 1 s to 30 s per function.
Scripts can usechernobog_deep_deobfuscate(ea),
chernobog_deep_deobfuscate_text(ea), andchernobog_mba_smt_stats(ea).
These are analysis budgets, not hard limits on total decompiler runtime.
See semantic MBA synthesis
for the model and limits. -
32-bit saved-register stack stubs β native analysis recognizes bounded
PE32-style dispatch stubs ending inRET 4orXCHG [ESP], reg; RET,
including supported PUSH substitutions. It records the handler target and
continuation with dependency-tracked proof ownership. When the complete stub
and handler belong to the same function, early Hex-Rays lowering replaces the
final return with an explicit pop, any required stack adjustment, and a direct
jump while retaining preceding stack accesses and register restorations.
See stack-stub recovery. -
Call-boundary string inspection β strings observed when rax stops before
an unmodeled call are available through IDC, inspection JSON, and the evidence
workspace's Observed strings table. They remain inspection observations;
decompiler rewrites and proof consumers still require their existing
completed-run evidence. Entry-input collection examines at most 256 incoming
references, reports truncation, and supports cooperative cancellation through
static analysis, input planning, and call-summary collection. -
WARBIRD diagnostic exploration β a bounded symbolic explorer supports
native admission profiles for ci, ClipSp, and PEAuth through four IDC functions:
chernobog_warbird_profiles,chernobog_warbird_start,
chernobog_warbird_poll, andchernobog_warbird_cancel. It models finite
successor-key splits, aliased byte memory, supported scalar and legacy 128-bit
XMM operations, native setup and dispatcher execution, bounded stack growth,
and selected pool-allocation effects. Counted-store loop relations and guarded
forward-state joins retain correlated state and memory-effect histories.
Reports expose unsupported paths and resource limits; database changes
invalidate results. This is diagnostic exploration only: all corpus entries
remain partial, no pseudocode is replaced, and whole-entry semantic equivalence
is not established. See WARBIRD implementation status. -
Pseudocode stability β caller-context updates run after view navigation
completes and keep the displayed function, microcode, and text synchronized.
Pending updates are discarded on function changes or plugin shutdown. Empty
branch bodies retain the SDK's required placeholder, and zero-width integer
terms are rejected during call simplification.
-
-
π persiyanov/herdr-reviewr herdr-reviewr 0.48.0 release
Added
- Review prefix :
review_prefixputs your own text above the comments on every send and copy.
Thanks @macintacos (#129).
- Review prefix :
-
π modem-dev/hunk v0.24.0 release
Hunk 0.24: beyond the diff
Hunk 0.24 brings complete-file and directory browsing, a live workspace compass, npm-installed extensions, and version-matched agent skills into your terminal review workspace. Worker highlighting makes startup interaction smoother, while a round of memory fixes keeps large reviews and long-running sessions leaner.
For npm- and curl-managed installs:
hunk update 0.24.0 npm install -g hunkdiff@0.24.0Homebrew availability will be verified after publication; until then, Homebrew propagation is pending. The commands above select the exact release for npm- and curl-managed installations.
Explore the source and find your next review
hunk openshows complete syntax-highlighted files and browses directories with lazy loading, live refresh, and keyboard or mouse navigation. Inspect the surrounding source without manufacturing a diff. The new read-only workspace status view brings together staging state, tracked and untracked changes, and sibling worktrees, with navigation into history and full diff reviews. Static and versioned JSON status output are available too. #1148, #1067Automatic diff layout now uses the space actually left after side panes and padding: opening a pane can switch to unified, and closing it can restore split.
auto_split_min_widthcontrols the threshold, whilescroll_offkeeps surrounding context visible during line navigation. Binary files remain reachable through file navigation and sidebar clicks, and the sidebar follows held file-navigation keys without overriding ordinary manual scrolling. #1170, #1109, #1178, #1085Keep reviews responsiveβand let old reviews go
Syntax highlighting runs in a worker by default, with grammar warmup during startup to reduce the input stall after the review first appears. Large-diff highlight failures use bounded retries rather than restarting on every scroll. #1105, #785
Live reloads no longer retain every previous review's files and render state. Nonwrapped reviews reuse geometry across terminal resizes, and keyboard navigation leaves copy-selection content lazy rather than materializing it eagerly. Sessions also stop repeatedly submitting a rejected review to an unchanged daemon while retaining recovery when the review or daemon changes. #1201, #1200, #1202, #1199
Review reliability improves too: wheel scrolling no longer leaves comments targeting stale lines, notes survive reloads that temporarily omit their files, suspended windows keep their sessions registered, and terminal-editor handoffs release Hunk's stdin reader before launching the editor. #1143, #1164, #1131, #1134, #1165
Performance note: release benchmarks have no gated regressions against 0.23.0 or beta.1. The known sidebar-follow tradeoff from beta.1 remains relative to beta.0: navigation p95 is 42.74 ms versus beta.0's 36.35 ms, beta.1's 44.55 ms, and 0.23.0's 46.32 ms. This preserves correct sidebar following during held navigation and resizing.
Easier extensions, agent setup, and shell navigation
hunk extension installaccepts npm packagesβincluding scopes, versions, ranges, and tagsβalongside Git sources, without running npm lifecycle scripts. Folder-local package imports work in compiled Hunk binaries. Extensions gain generation-scoped presentation filters and independent left/right pane controls. #1162, #1163, #1118, #1171Install agent pointer skills through the skills CLI;
hunk skill showsupplies the full instructions matched to your installed Hunk version. Bash and Zsh completions help discover commands, flags, and supported values. The note-composer save shortcut is now remappable, andhunk gh --helpand the docs cover more of the available review workflows. #1167, #1157, #962, #1186Compatibility notes
- Default theme:
github-dark-defaultis the default again. Settheme = "terminal", pass--theme terminal, or use the theme picker to keep following your terminal palette. This differs from 0.23 and the 0.24 betas. #1195 - Automatic layout: the default threshold is 160 available diff columns, excluding panes and outer padding. Configure
auto_split_min_widthor select explicitsplit/unifiedmode to override it. - Navigation context:
scroll_offdefaults to five rows;scroll_off = 0or--scroll-off 0restores edge-only scrolling. - Highlighting:
--fastis now a no-op and will be removed in a later release. Windows compiled binaries and custom themes withsyntax_scopescontinue to highlight inline. - Patch validation: nonempty input without recognizable file changes now fails explicitly instead of silently opening an empty review. Genuinely empty reviews have their own message. #1183, #1182
- Extensions: the public API is version 31. Gate new APIs on
hunk.apiVersionwhen supporting older Hunk versions. - Persistent state: Hunk uses the XDG state directory while preserving existing state and global extension locations. Agent notes start hidden; use the review controls to reveal them.
- Runtime requirements: npm installations require Node.js 22 or newer; standalone binaries do not require Node.js.
Community contributors
- @0xferrous fixed combined conflict diffs and plain-text pager output through pipes. #1102, #1112
- @Ajay-Satish-01 made the note-composer save shortcut remappable. #962
- @andreifilip123 added the configurable context margin around the current line. #1109
- @andrewloux improved macOS test portability and kept noted files recoverable across reloads. #1146, #1131
- @bottercode fixed lockfile refresh during release versioning. #1158
- @brettinternet added generation-scoped extension presentation filters. #1118
- @edenbuilds validated extension VCS watch hooks before registration. #1080
- @elucid fixed installer release lookup, clarified session-selector errors, and sped up terminal-theme refresh. #1140, #1149, #1130
- @HackAttack fixed annotated-note navigation, wheel-scroll comment targets, and suspended-session registration. #1147, #1143, #1134
- @igshehata preserved text entered immediately after opening a note composer. #1125
- @LandonSchropp added hunk-verdict and hunk-backup to the extension directory. #1137
- @masonmcelvain made worker highlighting the default and warmed grammars during startup. #1105
- @mikemikimike moved persistent state to the XDG state directory. #920
- @mvanhorn fixed folder-extension package imports in compiled binaries. #1163
- @silvioprog added Bash and Zsh shell completions. #1157
- @strawberry-little-bear corrected terminal-width handling for grapheme Prepend characters. #1153
- @teepark made automatic layout depend on available diff width and added its configurable threshold. #1170
- @Lawgk kept the sidebar selection visible during held file navigation and terminal resizing. #1085
- @rnihesh fixed live reloads retaining every previous review's files and render state. #1201
All merged pull requests
-
publish v0.23.0 notes by @benvinegar in #1135
-
bump taiki-e/install-action from 2.86.3 to 2.87.14 in the github-actions group by @dependabot[bot] in #1139
-
adopt new hunk logo, flat favicon, and brand guide by @benvinegar in #1145
-
explain selector misses instead of protocol-validation-failed by @elucid in #1149
-
refresh terminal colors via direct OSC probe by @elucid in #1130
-
pass the lifecycle, trust prompt and jj source tests on macOS by @andrewloux in #1146
-
Add hunk-mark-read to hunk-extension marketplace by @benvinegar in #1155
-
measure grapheme Prepend scalars with the cluster that follows them by @strawberry-little-bear in #1153
-
compact same-directory rename labels by @benvinegar in #1156
-
add complete-file viewer and lazy directory browser by @benvinegar in #1148
-
Fix/draft note focus transition by @igshehata in #1125
-
render conflicted Git diffs by @0xferrous in #1102
-
handle plain text output through pipes by @0xferrous in #1112
-
add generation-scoped presentation scope API by @brettinternet in #1118
-
bound and surface large-diff highlight retries by @benvinegar in #785
-
Add hunk-guide and hunk-verdict to hunk-extension marketplace by @benvinegar in #1159
-
Highlighting: Make the worker the default and warm it during startup by @masonmcelvain in #1105
-
reveal note composers at the bottom edge by @benvinegar in #1160
-
preserve filter focus when results reappear by @benvinegar in #1161
-
reject non-callable VCS operation watch hooks by @edenbuilds in #1080
-
stop annotated navigation skipping notes drawn outside hunks by @HackAttack in #1147
-
refresh bun.lock when versioning packages by @bottercode in #1158
-
Add LandonSchropp/hunk-verdict and hunk-backup to the extension directory by @LandonSchropp in #1137
-
add scroll_off setting for viewport margin by @andreifilip123 in #1109
-
keep a session connected when a reload leaves out a noted file by @andrewloux in #1131
-
stop wheel scroll and stale hover from drifting comment targets off the highlighted line by @HackAttack in #1143
-
restore comment targets after batched wheel returns by @benvinegar in #1164
-
add bash and zsh shell completions by @silvioprog in #1157
-
release stdin before launching terminal editors by @benvinegar in #1165
-
support managed npm package sources by @benvinegar in #1162
-
add a workspace compass with sibling worktrees by @benvinegar in #1067
-
link GitHub release notes after hunk update by @benvinegar in #1166
-
load folder-local packages in compiled binaries by @benvinegar in #1163
-
let note composer save be remapped by @Ajay-Satish-01 in #962
-
reveal pane edges independently by @benvinegar in #1171
-
distribute version-matched agent skills via skills CLI by @benvinegar in #1167
-
trim verbose README prose by @benvinegar in #1174
-
keep sessions alive while window is suspended by @HackAttack in #1134
-
store persistent state under XDG state directory by @mikemikimike in #920
-
isolate suspension test daemon port by @benvinegar in #1176
-
clarify configuration overrides and examples by @benvinegar in #1175
-
prepare 0.24.0-beta.0 by @benvinegar in #1177
-
keep binary files reachable by file navigation and clicks by @bottercode in #1178
-
reject unrecognized nonempty patch input by @benvinegar in #1183
-
Add hunk-why to hunk-extension marketplace by @benvinegar in #1179
-
distinguish empty reviews from filtered files by @benvinegar in #1182
-
keep the selected file visible in the sidebar during held navigation by @Lawgk in #1085
-
allow published prereleases in changelog smoke by @benvinegar in #1185
-
correct stale facts and fill gaps across hunk.dev docs by @benvinegar in #1186
-
prepare 0.24.0-beta.1 by @benvinegar in #1187
-
publish 0.24.0-beta.1 notes by @benvinegar in #1194
-
restore GitHub Dark Default as the default theme by @benvinegar in #1195
-
reuse nowrap geometry across terminal resizes by @benvinegar in #1200
-
stop resubmitting rejected reviews to unchanged daemons by @benvinegar in #1199
-
stop reloads from retaining every previous review by @rnihesh in #1201
-
Add hunk-checkpoint to hunk-extension marketplace by @benvinegar in #1189
-
keep copy-selection rows lazy during navigation by @benvinegar in #1202
-
add brand page and logo downloads by @benvinegar in #1203
-
Prepare stable 0.24.0 by @benvinegar in #1205
Release notes : https://hunk.dev/changelog/0.24/
Full changelog :v0.23.0...v0.24.0 - Default theme:
-
π persiyanov/herdr-reviewr herdr-reviewr 0.47.0 release
Added
-
Split view :
|shows the diff side by side, and comments, find and copy work on both halves.diff_view = "split"starts a fresh pane in split.
Thanks @Tarektouati (#116). -
Breaking:
|is a new default key. A[keybindings]config that already uses|now collides and must move it.
-
-
- October 18, 2026
-
π r/Harrogate Harrogate's best story? rss
With a town teaming with History, what is something you know for fact or have been told and choose to believe about Harrogate? Think ghost stories, superstitions and plots!
Do NOT let the truth get in the way of a good story.
submitted by /u/RevolutionaryTap3911
[link] [comments] -
π pydantic/monty v1.2.0 - 2026-10-18 release
What's Changed
- Cap float format precision at
INT_MAX - 1024like CPython 3.14.8 by @samuelcolvin in #1002 - Implement
hashlibby @samuelcolvin in #988 - fix(monty-js): publish the component facade declaration in dist by @Yi-111-a in #1008
- fix-pr-comments: include maintainer threads, be sceptical of bots by @samuelcolvin in #1012
- Implement
os.pathby @samuelcolvin in #1000 - Add a docs column to the branch diff and fix misclassified files by @samuelcolvin in #1017
- Support dataclasses
field(),default_factoryand__post_init__by @rewitt94 in #835 - Load
pydantic_monty._binaryeagerly at package import by @cpruijsen in #992 - Honour
open()'snewlineargument and make file objects iterable by @samuelcolvin in #1001 - Import host call by @samuelcolvin in #942
- Host module fixes: duplicate attr names, assignment docs, module hashing by @samuelcolvin in #1021
- fix(monty): compile the JSON string cache on the declared 1.96 MSRV by @Yi-111-a in #1013
- Fix JavaScript print callbacks swallowing thrown null by @GoldArowana in #1028
- Optimisation: Direct sequence unpacking by @jaheba in #1015
- Extract a
PyHashTableshared by dict and set by @rewitt94 in #884 - Binascii and base64 resource limits checks by @rewitt94 in #842
- Bump
samuelcolvin/check-python-versionaction to v5.1 by @Viicos in #997 - Harden CI by @Viicos in #1010
- Cap restored session budgets at destination limits by @rewitt94 in #1027
- Support list slice assignment by @jaheba in #1031
Path.scanos call by @samuelcolvin in #987- Bump dtolnay/rust-toolchain from efa25f7f19611383d5b0ccf2d1c8914531636bf9 to e2a55d2ffb04f378e9626c28d38b36d230d1e12f by @dependabot[bot] in #1034
- Fix contracts of
pathlib.Pathandosfs actions by @jaheba in #999 - Support ordering comparisons for set and frozenset by @jaheba in #1040
- Add
bisectmodule by @jaheba in #1047 - Run CodSpeed benchmarks on macro runners in walltime mode by @samuelcolvin in #1044
- Extract Python benchmark scripts into separate files by @jaheba in #1055
- Enable CodSpeed memory mode for benchmarks by @jaheba in #1054
- Optimize f-string concatenation buffer preallocation and refcount churn by @gabrielhsc95 in #1052
- Implement the
csvmodule by @samuelcolvin in #1018 - Remove redundant interpreter benchmarks by @samuelcolvin in #1056
- Disable ASLR for the CodSpeed bench run by @samuelcolvin in #1062
- optimize ci by @davidhewitt in #1064
- Match statements by @samuelcolvin in #1016
- Pin glibc malloc thresholds for walltime benchmarks by @codspeed[bot] in #1059
- make many more dunders supported on user instances by @davidhewitt in #1058
- Include capture groups in
re.split()results by @Likheet in #1036 - Register interpreter benchmarks from the python/ directory by @samuelcolvin in #1057
- Fix match statement review findings by @samuelcolvin in #1069
- Add
pyperformancebenchmarks by @jaheba in #996 json.loadandjson.dumpby @samuelcolvin in #1023- implement
tomllibby @samuelcolvin in #1022 - v1.2.0 release prep by @samuelcolvin in #1073
New Contributors
- @cpruijsen made their first contribution in #992
- @GoldArowana made their first contribution in #1028
- @dependabot[bot] made their first contribution in #1034
- @gabrielhsc95 made their first contribution in #1052
- @Likheet made their first contribution in #1036
Full Changelog :
v1.1.0...v1.2.0 - Cap float format precision at
-
π persiyanov/herdr-reviewr herdr-reviewr 0.46.2 release
-
π persiyanov/herdr-reviewr herdr-reviewr 0.46.1 release
Fixed
- Windows install from PowerShell 7 : installing no longer fails at "verifying checksum" when herdr was started from pwsh 7.
Thanks @v-senninha-v (#127) and @Yivas (#142).
- Windows install from PowerShell 7 : installing no longer fails at "verifying checksum" when herdr was started from pwsh 7.
-
- October 17, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-10-17 rss
IDA Plugin Updates on 2026-10-17
New Releases:
Activity:
-
π HexRaysSA/plugin-repository commits sync repo: ~1 changed rss
sync repo: ~1 changed ## Changes - [BinaryLens](https://github.com/lumice/binarylens): - 1.2.0: archive contents changed -
π r/Harrogate Map to help house hunters rss
| Seen people posting these for Sheffield and York so thought Iβd have a go, first iterationβ¦ submitted by /u/LegitimateInternet13
[link] [comments]
---|--- -
π HexRaysSA/plugin-repository commits sync repo: +1 release rss
sync repo: +1 release ## New releases - [capa](https://github.com/mandiant/capa): 10.0.0 -
π r/Harrogate Is Harrogate better now or was it better in the past ? rss
| submitted by /u/LowGuide2746
[link] [comments]
---|--- -
π smol-machines/smolvm smolvm v1.30.1 release
What's Changed
- Expose the engine's CLI commands as a library module by @BinSquare in #1847
- Avoid unnecessary disk staging when paused resume inputs fit in tmpfs by @BinSquare in #1849
- Give machine create a window above the image pull deadline so a large image's seed build is not cut off at five minutes by @BinSquare in #1848
- Build a paused machine's export beside its data directory by @BinSquare in #1850
- Prepare SmolVM v1.30.1 for release by @BinSquare in #1851
Full Changelog :
v1.30.0...v1.30.1 -
π smol-machines/smolvm smolvm v1.30.0 release
What's Changed
- Pin and checksum nfpm in the package repository workflow instead of resolving latest through the rate-limited GitHub API by @BinSquare in #1826
- Pull large registry blobs in parallel ranged parts by @BinSquare in #1828
- machine run: Accept
--expose-socketand--mount-socketin ephemeral vms by @yorickvP in #1245 - Add pack list for pulled artifacts by @BinSquare in #1831
- Let embedders start a background command on a local machine by @BinSquare in #1832
- Ignore the zip extraction advisories for utoipa-swagger-ui's build-time unpack by @BinSquare in #1837
- perf(network): disable Nagle on host TCP relay sockets by @BinSquare in #1833
- Run sysctl by its absolute path for checkpoints on macOS by @BinSquare in #1836
- Ask registries for Docker manifest types when resolving an image by @BinSquare in #1838
- Keep balloon page releases inside one guest memory region by @BinSquare in #1834
- preserve empty directories across cache expiry and remounts by @BinSquare in #1835
- Use server-side S3 copies for file renames by @BinSquare in #1839
- Keep S3 staged writes coherent across file handles by @BinSquare in #1840
- Cache missing S3 children from complete directory listings by @BinSquare in #1842
- Build a paused machine's export outside its locks by @BinSquare in #1843
- Disable Nagle on guest-facing TCP relay sockets by @BinSquare in #1844
- Pin libkrun at the balloon free page hint round fix by @BinSquare in #1845
- Prepare SmolVM v1.30.0 for release by @BinSquare in #1846
New Contributors
Full Changelog :
v1.29.1...v1.30.0 -
π Filip Filmar Bazelizing a Custom RISC CPU with 4x4 Systolic Matrix Accelerator rss
Open-source digital signal processing and machine learning accelerators are frequently published as student or research projects. While the RTL architecture is often innovative, the surrounding build and test scaffolding frequently suffers from workstation-specific assumptions, absolute file paths, and missing simulation fixtures.
In this case study, we document the Bazelization of Custom-RISC-CPU-with-Systolic-Matrix-Accelerator, authored by Mathew George. By applying Bazel and
rules_openxc7, we transformed this 2D systolic array processor into a portable, reproducible hardware project that synthesizes and outputs a valid FPGA bitstream in under 25 seconds from a clean slate. -
π Filip Filmar Bazelizing mmRISC-2: A Full RISC-V SoC with rules_openxc7 rss
Converting existing open-source FPGA projects to Bazel and
rules_openxc7transforms fragile, vendor-locked hardware build scripts into reproducible, sandboxed workflows. This case study examines our complete Bazelization of mmRISC-2, a comprehensive, silicon-proven RISC-V system-on-chip authored by Munetomo Maruyama.By pairing Bazelβs fine-grained dependency tracking with open-source EDA tools (Yosys, Slang, nextpnr-xilinx, Project X-Ray, and openFPGALoader), developers can clone the repository and produce a fully placed, routed, and verified bitstream for the Digilent Arty A7-100T board with a single terminal command.
-
- October 16, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-10-16 rss
IDA Plugin Updates on 2026-10-16
New Releases:
Activity:
- augur
- capa
- haruspex
- ida-cli
- 27a54cca: test(nexus): keep frozen baseline decompile requests plain
- 83b0ebff: Merge master while preserving Nexus lifecycle and listing contracts
- 761a0fde: fix(cli): display string contents and segment address ranges
- 8c376b7f: test: separate MCP fixture startup from response bounds
- 03677e29: fix(nexus): preserve early disconnect ordering and shared lease cleanup
- acb61ba5: test(nexus): model public recovery probes in diagnostic open tests
- 6739b35b: fix(nexus): veto rollback on external IDA locks and replaced snapshots
- 5e430261: fix(nexus): retry initial Root failures and roll back recovery artifacts
- efbee3c0: test(nexus): capture Root Node visibility failures and isolate reopenβ¦
- 91022c33: fix(nexus): isolate diagnostics and opt in to IDB hashes
- 7dd8c2da: fix(nexus): refuse writeback after owner Root Node loss
- 54e4c60c: test(nexus): model public state-directory resolution in cache probes
- 8bc34664: fix(nexus): close cache review residuals and isolate fixture startup β¦
- 582568b7: test(nexus): retain zero-metadata contract with owner diagnostics
- b72d987f: test(nexus): load metadata diagnostics in standalone tools fixture
- c9b1374e: diagnose(nexus): retain owner evidence for missing input metadata
- 41d34736: fix(nexus): address N7a cache coordination review
- ff486d34: test(nexus): discover generation databases in N6 persistence fixtures
- 35fc2311: feat(nexus): coordinate generation cache GC and cancellable input preβ¦
- 08055fe1: docs: accept N6 after F1 review
- idamcp
- 5fb2f304: Optionally show Hex-Rays warnings in decompile_function
- oh-my-pi-schema
- f9244c8b: chore(sync): merge upstream oh-my-pi v18.11.1
- omp-zh-i18n
- f81111c4: feat(i18n): localize for official v18.11.0 (v18.11.0-zh)
- rhabdomancer
- ToCode
-
π roboflow/supervision supervision-0.31.0 release
v0.31.0 β Depth, moving cameras and pose mAP
supervision now sees depth: load depth maps from your model or stereo rig, measure how far each object is, and draw the map.
sv.DepthMapmeasures the distance to every detection and colours depth over any image, no OpenCV needed.PolygonZoneandLineZonekeep counting in the right place while the camera pans.KeyPointMeanAveragePrecisionscores pose models the waypycocotoolsdoes.- Kosmos-2 , Gemini 3.6/3.7 and MediaPipe hands now load straight into
DetectionsandKeyPoints. MeanAveragePrecisionruns far faster on crowded images and lets you raise the detection cap.
It's a drop-in upgrade if 0.30.x showed you no deprecation warnings, apart from four output changes.
sv.ByteTrackwith thesupervision.trackerpackage,supervision.keypoint,sv.LMM, the legacysv.MeanAveragePrecisionand a few helpers are gone; the Migration guide has the swaps.β¨ Spotlights / highlights
Depth maps: load, measure and draw
sv.DepthMapholds metric depth, stereo disparity or relative depth for one frame, and keeps track of which one it is.sv.DepthCameraconverts disparity to metres,measure_detectionswrites the median depth under each object todetections.data("depth_m"when the map can give metres), andsv.DepthAnnotatorcolours the map over an image without OpenCV.sv.DepthClipRangekeeps one colour scale across a whole video, so colours don't flicker between frames. Loaders read Roboflow Inference, Ultralytics, Transformers, and 16-bit PNG and PFM dataset files such as KITTI and Middlebury. (#2691, #2692, #2693, #2694)import numpy as np import supervision as sv depth = np.full((100, 100), 20.0, dtype=np.float32) depth[20:40, 20:40] = 4.0 depth_map = sv.DepthMap(depth, kind="depth_m") detections = sv.Detections(xyxy=np.array([[20, 20, 40, 40], [60, 60, 90, 90]], dtype=float)) detections = depth_map.measure_detections(detections) detections.data["depth_m"] # array([ 4., 20.], dtype=float32) annotated = sv.DepthAnnotator().annotate(np.zeros((100, 100, 3), np.uint8), depth_map)Zones that follow the camera
Zones used to assume a fixed camera; when it panned, the scene slid out from under the zone.
PolygonZone.triggerandLineZone.triggernow take an optional per-framecoord_transformthat maps detection anchors back into the frame the zone was drawn on. Any object withabs_to_relandrel_to_absworks, as described by the newsv.CoordinatesTransformationprotocol, including the transformations from thetrackersmotion estimator. Drawing is unchanged, andcoord_transform=Nonekeeps current results. (#2657)import numpy as np import supervision as sv class CameraShift: def abs_to_rel(self, points): return points + [50, 0] def rel_to_abs(self, points): return points - [50, 0] zone = sv.PolygonZone(polygon=np.array([[0, 0], [100, 0], [100, 100], [0, 100]])) car = sv.Detections(xyxy=np.array([[120.0, 40.0, 140.0, 60.0]])) zone.trigger(car) # array([False]) zone.trigger(car, coord_transform=CameraShift()) # array([ True])COCO keypoint mAP for pose models
sv.metrics.KeyPointMeanAveragePrecisionscoressv.KeyPointspredictions by Object Keypoint Similarity at ten thresholds from 0.50 to 0.95, and its scores agree withpycocotoolsCOCOeval(..., "keypoints"). COCO greedy matching is now vectorized for box and keypoint mAP. In the benchmark reported with that change, one image with 1000 predictions and a 1000-detection cap dropped from 35.9 s to 0.5 s.MeanAveragePrecisionalso takesmax_detection_thresholdsfor scenes with more than 100 objects. (#2687, #2733, #2716)import numpy as np import supervision as sv from supervision.metrics import KeyPointMeanAveragePrecision targets = sv.KeyPoints( xy=np.array([[[10, 10], [60, 10], [35, 80]]], dtype=np.float32), class_id=np.array([0]), data={"area": np.array([4000.0])}, ) predictions = sv.KeyPoints( xy=np.array([[[11, 10], [60, 12], [35, 79]]], dtype=np.float32), class_id=np.array([0]), detection_confidence=np.array([0.9]), ) metric = KeyPointMeanAveragePrecision(sigmas=[0.25, 0.25, 0.25]) metric.update(predictions, targets).compute().map50 # 1.0More models, and the matcher behind the metrics
sv.Detections.from_vlmparses Kosmos-2 grounding results (sv.VLM.KOSMOS_2) and Gemini 3.6 and 3.7 structured boxes and polygon masks.sv.KeyPoints.from_mediapipeloads MediaPipe hand landmarks, withclass_id0 for a left hand and 1 for a right hand.sv.match_detectionsexposes the one-to-one greedy IoU matcher the metrics use, for comparing two models or auditing labels against predictions. (#1903, #2504, #2283, #2557)import supervision as sv caption = "a snowman next to a fire" entities = [("a snowman", (0, 9), [(0.1, 0.2, 0.4, 0.9)]), ("a fire", (19, 25), [(0.5, 0.6, 0.8, 0.95)])] detections = sv.Detections.from_vlm(sv.VLM.KOSMOS_2, (caption, entities), resolution_wh=(640, 480)) pairs, unmatched_a, unmatched_b = sv.match_detections(detections_a, detections_b)π Migration guide
No breaking changes beyond the APIs deprecated in 0.26β0.28 and scheduled for removal in 0.31.0. If 0.30.x printed no deprecation warnings for your code, only the four output changes at the end of this section can affect it.
Removed | Use instead
---|---
sv.ByteTrackand thesupervision.trackerpackage |ByteTrackTrackerfrom thetrackerspackage (pip install trackers); callupdate()instead ofupdate_with_detections()
supervision.keypoint|supervision.key_points
sv.LMM,Detections.from_lmm|sv.VLM,Detections.from_vlm
legacysv.MeanAveragePrecision(supervision.metrics.detection) |sv.metrics.MeanAveragePrecision
sv.denormalize_boxes(normalized_xyxy=...)|sv.denormalize_boxes(xyxy=...)
supervision.dataset.utils.mask_to_rle/rle_to_mask|sv.mask_to_rle/sv.rle_to_mask
ensure_cv2_image_for_annotation|ensure_cv2_image_for_class_method(supervision.utils.conversion)
ensure_pil_image_for_annotation|ensure_pil_image_for_class_method(supervision.utils.conversion)
ensure_cv2_image_for_processing|ensure_cv2_image_for_standalone_function(supervision.utils.conversion)
create_tiles,overlay_image(alsosv.overlay_image),validate_keypoint_confidence,validate_keypoints_fields| no direct replacement# before tracker = sv.ByteTrack() detections = tracker.update_with_detections(detections) map_result = sv.MeanAveragePrecision.from_detections(predictions=predictions, targets=targets) # after from trackers import ByteTrackTracker from supervision.metrics import MeanAveragePrecision detections = ByteTrackTracker().update(detections) map_result = MeanAveragePrecision().update(predictions, targets).compute()Four behaviour changes can alter output:
sv.Detectionsraises on non-finite boxes,sv.CSVSinkwrites arrays as JSON lists,ConfusionMatrix.from_detectionsrejects lists of different length, and multi-classmAR @ Kscores follow COCO. Details under Changed and Fixed.π Notable changes
π Added
- Depth maps.
sv.DepthMap,sv.DepthAnnotator,sv.DepthClipRangeandsv.DepthCamera, withto_depth,measure_detections,resize,crop,value_at,DepthAnnotator(scale="metric"), and loadersfrom_inference,from_ultralytics,from_transformers,from_png16andfrom_pfm. (#2691, #2692, #2693, #2694) - Camera-motion-aware zones.
PolygonZone.triggerandLineZone.triggeracceptcoord_transform, typed by the newsv.CoordinatesTransformationprotocol. (#2657) - COCO keypoint mAP.
sv.metrics.KeyPointMeanAveragePrecisionforsv.KeyPoints, matchingpycocotoolskeypoint evaluation. (#2687) - Configurable mAP detection limits. Keyword-only
max_detection_thresholdsonMeanAveragePrecision; the default(1, 10, 100)is unchanged. (#2716) - Mask confusion matrix.
sv.ConfusionMatrix.from_detectionsandbenchmarkacceptmetric_target=MetricTarget.MASKSand match by mask IoU, on dense masks orCompactMask. (#2612) - Metric result aggregation.
MetricResultbase class for metric results, plusaggregate_metric_results()andplot_aggregate_metric_results()to compare several results in one table or grouped bar chart. (#2498) - Public matcher.
sv.match_detectionsreturns one-to-one greedy IoU matches and the unmatched indices on each side, optionally per class. (#2557) - Kosmos-2.
sv.VLM.KOSMOS_2insv.Detections.from_vlm, one detection per grounded region. (#1903) - Gemini 3.6 and 3.7.
sv.VLM.GOOGLE_GEMINI_3_6andsv.VLM.GOOGLE_GEMINI_3_7parse the structured{"boxes": [...]}format, including normalized polygon masks. (#2504) - MediaPipe hands.
sv.KeyPoints.from_mediapipeloads hand landmarks from the TasksHandLandmarkerand the legacyHandssolution, with a new hand skeleton,class_id0 for left and 1 for right, and the handedness score indata["handedness_score"]. (#2283)
π± Changed
sv.Detectionsvalidatesxyxy: non-finite (NaN, inf) or non-numeric boxes now raiseValueErrorinstead of failing later. (#2503)sv.ConfusionMatrix.from_detectionsraises whenpredictionsandtargetsdiffer in length, instead of scoring the shorter list. (#2612)sv.CSVSinkwrites NumPy arrays indataandcustom_dataas JSON lists instead of NumPy's truncatedstr()form; parse array cells withjson.loads. (#2707)sv.Detections.with_nmmandsv.mask_non_max_mergemergeCompactMaskunions without full-image allocations; the error for mismatched image shapes now names both shapes. (#2606, #2616)sv.Detections.from_inference(compact_masks=True)crops each polygon mask to the polygon instead of the whole image, cutting time and memory for many polygons on large images. (#2678)- COCO greedy matching in
MeanAveragePrecisionandKeyPointMeanAveragePrecisionis vectorized; results are unchanged. (#2733) sv.ComparisonAnnotatorbuilds its mask union fromCompactMaskcrops in place instead of allocating a full(N, H, W)stack. (#2495)
β Removed
- APIs deprecated since 0.26.0β0.28.0 and scheduled for 0.31.0:
sv.ByteTrackand thesupervision.trackerpackage (usetrackers.ByteTrackTracker), thesupervision.keypointmodule (usesupervision.key_points),sv.LMMandDetections.from_lmm(usesv.VLMandfrom_vlm), the legacysv.MeanAveragePrecision(usesv.metrics.MeanAveragePrecision),create_tiles,overlay_image,ensure_cv2_image_for_annotation,ensure_pil_image_for_annotationandensure_cv2_image_for_processing(use theensure_*_for_class_method/ensure_cv2_image_for_standalone_functiondecorators),validate_keypoint_confidence,validate_keypoints_fields, thenormalized_xyxyargument ofsv.denormalize_boxes(usexyxy), and thesupervision.dataset.utilsimport path formask_to_rle/rle_to_mask. (#2582)
π§ Fixed
sv.Detections.from_ultralyticsno longer shifts or truncates segmentation masks when letterbox padding is fractional. (#2739)- Indexing
sv.Detectionswith a Python list of booleans now selects list-valueddatawith the same mask as the arrays; it was read as positions. (#2737) sv.move_boxesandInferenceSlicerno longer wrap integer coordinates when an offset crosses the dtype's range. (#2734)sv.Detections.box_aspect_rationo longer overflows on integer boxes at large coordinates. (#2729)BlurAnnotatorandPixelateAnnotatorkeep a(H, W, 1)grayscale channel axis instead of failing with a broadcasting error. (#2725)- Without OpenCV, thick
line,polylinesanddrawContoursoutlines match OpenCV'sLINE_8pixels forthickness2 or more. (#2727) - Without OpenCV,
fillPolypaints the same boundary pixels as OpenCV, sopolygon_to_maskandPolygonZoneagree across backends. (#2730) - Without OpenCV,
resizewithINTER_NEARESTsamples the same source pixels as OpenCV, which also alignssv.CompactMask.resizeacross backends. (#2722) sv.process_videostops reading the source when a callback or frame write fails, instead of decoding the rest of the video before raising. (#2720)- Label annotators with
smart_position=Trueseparate labels whose boxes share a center; before, only the last label was visible. (#2718) - Oriented-box
MeanAveragePrecisionkeeps corner precision at large coordinates and puts objects in the right size bucket. (#2717) sv.KeyPointskeeps all three coordinates when selecting a single key point with a NumPy integer index. (#2715)- Integer boxes and oriented boxes no longer land in the wrong object-size category when their area overflows the dtype. (#2713)
sv.CompactMaskaccepts NumPy'scopykeyword, so NumPy 2 no longer warns on conversion. (#2708)sv.CompactMask.resizematches dense nearest-neighbour resizing, including crops that become empty. (#2697, #2705)DetectionDataset.as_yolo,as_pascal_vocandas_labelmeexport a mask with holes as one instance instead of one extra instance per hole;approximate_mask_with_polygonsinsupervision.dataset.utilsgains the opt-inbridge_holesparameter that does this. (#2703)sv.metrics.MeanAverageRecallapplies themAR @ Klimit per class per image, as COCO does; multi-class scores were too low. (#2701)sv.metrics.MeanAveragePrecisionscores perfect predictions as exactly1.0instead of 0.99999988. (#2687)from_vlmwith Gemini 2.5 or 3.5 keeps a mask pixel only where the score exceeds 127 of 255; masks grew by half a mask pixel per side. (#2589)from_vlmwith Gemini 2.5 or 3.5 keeps masks for the detections that passclasseswhen a filtered-out item has no mask. (#2504)from_vlmkeepsclass_idinteger-typed when aclassesfilter removes every detection for PaliGemma, DeepSeek-VL2 and Gemini 2.0. (#2556)from_ultralyticsforDetections,KeyPointsandClassificationsaccepts NumPy-backed results, includingResults.numpy(). (#2710)
π Contributors
- JANG BYUNGKUN (@8rulerstar) β added
KeyPointMeanAveragePrecisionand fixed perfect-prediction mAP scoring. - Caio Viotti (@cfviotti, LinkedIn) β added depth support:
DepthMap,DepthAnnotator,DepthClipRange,DepthCameraand model loaders. - Kari Pikkarainen (@kari-pikkarainen, LinkedIn) β made zones follow camera motion with
coord_transform. - Christoph Deil (@cdeil, LinkedIn) β added
max_detection_thresholdstoMeanAveragePrecision. - Raghav Rathi (@raghav-rathi, LinkedIn) β added mask targets to
ConfusionMatrix. - shao (@shaoming11, LinkedIn) β added metric-result aggregation and sped up
ComparisonAnnotatorwith compact masks. - David (@David-rn) β co-authored metric-result aggregation from the original proposal.
- Jabrail (@jabrailkhalil) β added
sv.match_detections. - Soumik Rakshit (@soumik12345, LinkedIn) β added Kosmos-2 support in
from_vlm. - @Xayar145 β added Gemini 3.6 and 3.7 support in
from_vlm. - @tarunbommawar27 β added MediaPipe hand landmarks to
KeyPoints.from_mediapipe. - Advait Shukla (@AdvaitS) β made
Detectionsreject non-finite or non-numeric boxes. - Avanish Garg (@avanish-garg, LinkedIn) β fixed
CSVSinkarray output,CompactMask.resizeand mask holes in dataset export. - Iuri de Silvio (@iurisilvio) β sped up
Detections.from_inferencewith compact masks. - @trueoneplusone β sped up
with_nmmfor compact masks. - max (@quotentiroler) β vectorized COCO greedy matching in mAP.
- A Aswanth Raj (@aswanth-07, LinkedIn) β fixed
box_aspect_ratiooverflow,CompactMaskconversion and resize, single-pointKeyPointsselection and NumPy-backed Ultralytics results. - Mohammad Hijjawi (@MohammadHijjawi97, LinkedIn) β fixed boolean-list
Detectionsindexing andsmart_positionlabel overlap. - NIKHIL (@Nikhi00718) β fixed Ultralytics letterbox masks, grayscale blur and pixelate,
process_videocleanup and box-area overflow in metrics. - kevin (@kevin9327) β fixed thick-line drawing without OpenCV and Gemini mask binarization, and typed the test suite.
- Kaushik Reddy Lingireddy (@Lingikaushikreddy, LinkedIn) β fixed nearest-neighbour
resizesampling without OpenCV. - peng xiang (@px12811) β fixed
fillPolyrasterization without OpenCV. - Devulapalli Naga Sri Vaishnavi (@Vaishnavi220506) β fixed integer wrap in box translation and oriented-box mAP precision.
- Muhammad Talha (@Talhax55z) β fixed per-class
MeanAverageRecallscoring. - FootysHands (@ayo0la) β converted documentation examples to doctests.
- Eesha (@eesha5) β fixed imports in docstring examples.
- Jirka Borovec (@Borda, LinkedIn) β removed deprecated APIs, fixed
from_vlmclass_iddtype, followed up onwith_nmmperformance, and maintained docs, CI and release infrastructure.
Automated contributions:@dependabot, @pre- commit-ci, @Copilot
Full changelog :
0.30.0...0.31.0 -
π exe.dev Shake to Tell Shelley rss
When I want to improve one of my iOS apps, I shake my phone, type in a prompt, and off it goes to Shelley, together with a screenshot!

Iteration (culture) is eating planning (strategy) for lunch.
I'm finding that grinding down the friction, even as minimal as getting myself to the agent input, enables iteration.
Ideally, you could just customize the app from within itself, like Pliable does, but that would be against the app store rules.
-
π 3Blue1Brown (YouTube) There's never been a better time to go into math rss
Sharing a few thoughts on the future of math These videos are funded directly by viewers: https://3b1b.co/support An equally valuable form of support is to simply share the videos. Home page: https://www.3blue1brown.com
If you want a finger on the pulse of how mathematicians are feeling right now, take a look at this post on Proofs and Prompt: https://proofsandprompts.com/2026/10/08/100-reactions-to-100-solutions/
Timestamps 0:00 - Math student angst 3:10 - How does math work? 11:24 - A proof machine 25:12 - A conjecture machine 26:59 - A theory machine 31:31 - If AI is better at everything 34:58 - The best time to enter math
Secret Endscreen Vlog: https://youtu.be/4GV1qlv_3qU
These animations are largely made using a custom Python library, manim. See the FAQ comments here: https://3b1b.co/faq#manim
Music by Vincent Rubinetti. https://vincerubinetti.bandcamp.com/album/the-music-of-3blue1brown https://open.spotify.com/album/1dVyjwS8FBqXhRunaG5W5u
3blue1brown is a channel about animating math, in all senses of the word animate. If you're reading the bottom of a video description, I'm guessing you're more interested than the average viewer in lessons here. It would mean a lot to me if you chose to stay up to date on new ones, either by subscribing here on YouTube or otherwise following on whichever platform below you check most regularly.
Mailing list: https://3blue1brown.substack.com Twitter: https://twitter.com/3blue1brown Bluesky: https://bsky.app/profile/3blue1brown.com Instagram: https://www.instagram.com/3blue1brown Reddit: https://www.reddit.com/r/3blue1brown Facebook: https://www.facebook.com/3blue1brown Patreon: https://patreon.com/3blue1brown Website: https://www.3blue1brown.com
-
π mandiant/capa v10.0.0 release
This release fixes a security issue in how capa loads vivisect workspaces, a large batch of bug fixes, a new
--reproducibleflag for freeze, dependency updates, and 12 new rules. We'd like to thank the following contributors: Ange Albertini (@corkamig), @aryanyk, Luca Schrott (@1337Name), @eversinc33, Matt Williams (@mwilliams31), Rizky Mirzaviandy Priambodo (@Xavrir), Sukesh Kumar (@SkxOverKill), lakshit verma (@vee1e), @w3lld1, and others!Security
Crafted
.vivfiles could execute code when capa analyzed a sample: either the sample itself named*.viv, or a<sample>.vivnext to it. capa now always parses samples as PE or ELF and only loads an existing<sample>.vivwhenCAPA_LOAD_VIV_WORKSPACE=1is set. Only enable this for.vivfiles you trust.Affected: v9.4.0 and earlier.
New Features
- freeze: add
--reproducibleflag that zeros dynamic header metadata
Breaking Changes
- Remove redundant
os_parameter fromcapa.loader.collect_metadata(). External scripts calling this function must be updated to remove this argument. OS metadata now relies solely on the extractor yielding it viaextract_global_features(). @mike-hunhoff #3076 - Existing
<sample>.vivvivisect workspace files are no longer loaded by default because loading them uses pickle deserialization. SetCAPA_LOAD_VIV_WORKSPACE=1to opt in. @mr-tz #3191
New Rules (12)
- nursery/decrypt-payload-stored-as-ipv6-strings corkami@google.com
- nursery/connect-to-websocket-server-in-dotnet mehunhoff@google.com
- nursery/receive-data-on-websocket-in-dotnet mehunhoff@google.com
- nursery/send-data-on-websocket-in-dotnet mehunhoff@google.com
- nursery/upload-or-download-file-via-dropbox mehunhoff@google.com
- host-interaction/network/connectivity/check-internet-connectivity-in-dotnet omurcankaya@protonmail.com
- anti-analysis/anti-debugging/check-for-time-delay-in-dotnet @aryanyk
- nursery/decode-pe-stored-as-uuid corkami@google.com
- compiler/crystal/compiled-with-crystal corkami@google.com
- compiler/odin/compiled-with-odin corkami@google.com
- load-code/dotnet/load-dotnet-assembly-via-runtimeassemblynloadimage still@teamt5.org
- nursery/search-for-file-via-winapi @w3lld1
Bug Fixes
- fix: loader: inline vivisect workspace loading and gate .viv pickle deserialization behind CAPA_LOAD_VIV_WORKSPACE @mr-tz #3191
- fix: freeze: omit null description fields from freeze JSON @SkxOverKill #3100
- fix lots of linter errors identified by pyright @williballenthin #3052
- fix: render_default always returns empty string @williballenthin #3012
- fix: elf.py vdso_guess exception handler clobbers symtab_guess @williballenthin #3013
- fix: _NoAddress.eq unconditionally returns True @williballenthin #3014
- fix: capabilities/common.py: if va: drops address 0x0 @williballenthin #3015
- fix: vverbose.py: render_call variable assigned but never used @williballenthin #3016
- fix: extract_os yields duplicate/contradictory OS values @williballenthin #3017
- fix: load_one_jsonl_from_path: finally block runs on unrelated exceptions @williballenthin #3018
- fix: find_dynamic_limitations_from_cli overwrites instead of OR-ing @williballenthin #3019
- fix: optimizer doesn't recurse into And/Or/Some children @williballenthin #3020
- fix: address classes eq and lt assert on type @williballenthin #3021
- fix: DNTokenOffsetAddress.eq lacks type guard @williballenthin #3022
- fix: elffile.py: get_base_address returns None instead of NO_ADDRESS @williballenthin #3023
- fix: base_extractor.py: metaclass is Python 2 syntax, ignored in Py3 @williballenthin #3024
- fix: freeze/init.py: NO_ADDRESS < NO_ADDRESS returns True @williballenthin #3025
- fix: dotnetfile.py: missing import for capa.features.extractors.common @williballenthin #3026
- fix: rules/init.py: duplicate bytes_features line @williballenthin #3027
- fix: EXTENSIONS_DYNAMIC has inconsistent leading dots @williballenthin #3028
- fix: loader.py reads entire file for magic byte check @williballenthin #3029
- fix: freeze/init.py: logically impossible condition @williballenthin #3030
- fix: EXTENSIONS_ELF never referenced @williballenthin #3031
- fix: correct off-by-one in get_dotnet_table_row so row_index=1 (first valid .NET metadata row) is no longer rejected @williballenthin
- fix: add missing import for assert_never in cape extractor.py to avoid NameError when call argument has unexpected type @williballenthin
- fix: stop mutating call.api in cape thread.get_calls; yield one CallHandle per call so the original API name is preserved for all handles @williballenthin
- fix: use instruction_indices in is_security_cookie to handle single-instruction basic blocks where end_index is omitted, preventing KeyError on -1 @williballenthin
- fix: guard get_operand_expressions against empty expression tree so Ghidra-exported BinExport2 files with empty operands no longer raise IndexError @williballenthin
- fix: add return after zero-offset yield in extract_insn_offset_features so Offset(0) is not emitted twice @williballenthin
- fix: use f-string in binexport2 extractor so unexpected global feature value appears in ValueError message @williballenthin
- fix: correct scale/displacement expressions in get_operand_phrase_info 5-expression branch (used expression3 operator instead of expression4 value) @williballenthin
- fix: use HasField instead of truthiness in _index_vertex_edges so call-graph edges to/from vertex 0 are not silently dropped @williballenthin
- fix: change bare
iftoelifin get_backend_from_cli DRAKVUF branch to complete the if/elif chain @williballenthin - fix: close file handle in get_file_taste using a with statement @williballenthin
- fix: correct off-by-one in dynamic analysis call_count debug log (enumerate -> explicit counter) @williballenthin
- fix: correct capa/subscope-rule key in RuleMetadata so is_subscope_rule is no longer always False @williballenthin
- fix: remove unreachable backports.functools_lru_cache fallback and dead dependency @williballenthin
- fix: Scopes.from_dict uses cls instead of self so subclasses return the correct type @williballenthin
- fix: correct wrong dict key in VMRay _compute_monitor_threads assertion (used thread_id instead of process_id) @williballenthin
- fix: replace assert with isinstance guard in get_callee for invalid MethodSpec tokens @williballenthin
- fix: remove unused imports of capa.engine, capa.helpers, and capa.features from cache-ruleset.py, detect-binexport2-capabilities.py, and show-capabilities-by-function.py @williballenthin (SURF-92)
- fix: remove dead except ValueError clause in capa2sarif.py so JSONDecodeError is caught by the specific handler @williballenthin (SURF-91)
- fix: dedent bulk-process.py main() body so explicit argv argument is used instead of silently ignored @williballenthin (SURF-90)
- fix: guard statistics.quantiles/mean in compare-backends.py report() against empty duration lists @williballenthin (SURF-89)
- fix: replace zipfile with pyzipper in minimize_vmray_results.py so output archive is AES-encrypted @williballenthin (SURF-88)
- fix: assign yara_strings/yara_condition to empty string when Some has cmin=0 to prevent UnboundLocalError @williballenthin (SURF-87)
- fix: parenthesize s_type checks in capa2yara.py so kid.name != "Some" guard applies to And/Or/Not uniformly @williballenthin (SURF-86)
- fix: correct operator precedence in FeatureRegexRegistryControlSetMatchIncomplete to avoid false positives on unrelated currentcontrolset patterns @williballenthin (SURF-85)
- fix: FeatureRegexRegistryControlSetMatchIncomplete now checks all Regex features instead of returning after the first @williballenthin (SURF-84)
- fix: MissingStaticScope and MissingDynamicScope lint checks guard against absent scopes dict to prevent TypeError @williballenthin (SURF-83)
- fix: MissingExampleOffset lint now reads scopes.static instead of obsolete scope key @williballenthin (SURF-82)
- fix: extend MissingExampleOffset lint to validate dynamic examples using (pid:N,tid:N,call:N) format @williballenthin #3058
- fix: invert scope filter in import-to-ida.py so function-scope rules are annotated instead of skipped @williballenthin (SURF-81)
- fix: remove dead string literal in test_detect_duplicate_features @williballenthin (SURF-80)
- fix: remove duplicate Rule.from_yaml call in test_scope_instruction_description @williballenthin (SURF-79)
- fix: remove unused imports of capa.helpers, capa.features.basicblock, and redundant bare capa.features.extractors.base_extractor from test_freeze_dynamic.py @williballenthin (SURF-78)
- fix: replace capa.main.find_capabilities with capa.capabilities.common.find_capabilities in test_com_feature_matching to avoid implicit transitive import dependency @williballenthin (SURF-77)
- fix: correct test_json_meta to iterate list of function dicts and use correct address format for matched_basic_blocks assertion @williballenthin (SURF-76)
- fix: remove unreachable StaticAnalysis assert in assert_meta and add dynamic fixture to test_doc_to_pb2 @williballenthin (SURF-75)
- fix: correct self-comparison sa.max == sa.max to sa.max == sb.max in test_proto assert_statement @williballenthin (SURF-74)
- fix: guard parse_node against missing "type" key to avoid TypeError crash @williballenthin (SURF-73)
- fix: allocate feat_dict per feature in parse_json to avoid shared-reference aliasing @williballenthin (SURF-72)
- fix: add missing capa.features.extractors.elf import to ghidra/helpers.py and ida/helpers.py @williballenthin (SURF-71)
- fix: remove dead view_tab_rulegen assignment from CapaExplorerForm that was never read @williballenthin (SURF-70)
- fix: remove dead reset_query method from CapaExplorerSearchProxyModel that was never called @williballenthin (SURF-69)
- fix: remove unused imports of capa.rules and capa.engine from view.py @williballenthin (SURF-68)
- fix: remove unused imports of capa.main, capa.render.json, and capa.features.extractors.ida.extractor from form.py @williballenthin (SURF-67)
- fix: remove dead trim_function_name function from form.py that was never called @williballenthin (SURF-66)
- fix: replace get_file_md5/get_file_sha256 with retrieve_input_file_md5/sha256 shims so all callers use consistent IDA version-aware API @williballenthin (SURF-65)
- fix: rename dragEventEnter to dragEnterEvent so Qt dispatches drag-enter events correctly in CapaExplorerRulegenEditor @williballenthin (SURF-64)
- fix: guard against None in lessThan else-branch so sorting columns with empty cells does not raise AttributeError @williballenthin (SURF-63)
- fix: add explicit import capa.loader in form.py to avoid fragile transitive import dependency @williballenthin (SURF-62)
- fix: initialize f=None before try block in load_capa_function_results to prevent UnboundLocalError in except handler @williballenthin (SURF-61)
- fix: fix unreachable elif for NOT CompoundStatement so NOT rules render children in IDA plugin tree view @williballenthin (SURF-60)
- fix: use next(iter(addrs)) instead of addrs.pop() to avoid mutating the feature cache in parse_features_for_tree @williballenthin (SURF-59)
- fix: use integer division in get_printable_len for UTF-16 LE operands @williballenthin (SURF-58)
- fix: break thunk chain loop after resolving import to avoid duplicate API features @williballenthin (SURF-57)
- fix: pass insn instead of oper to getOperValue/getOperAddr in viv insn extractor @williballenthin (SURF-56)
- fix: implement extract_function_loop in dnfile extractor to detect backward branches as loops @williballenthin (SURF-55)
- fix: remove dead find_process function and helpers.py from cape extractor @williballenthin (SURF-54)
- fix: remove dead interface_extract_* stub functions from viv basicblock, function, and insn extractors @williballenthin (SURF-53)
- fix: remove unused import of capa.features.extractors.strings from binexport2 intel insn.py @williballenthin (SURF-52)
- fix: remove extract_file_format from FILE_HANDLERS in five extractors to prevent duplicate Format features @williballenthin (SURF-51)
- fix: replace assert with guard so 2-operand ARM ADD/SUB instructions are skipped instead of crashing @williballenthin (SURF-50)
- fix: omit trailing
->suffix in syscall names when there is no return value @williballenthin (SURF-49) - fix: use AbsoluteVirtualAddress instead of FileOffsetAddress for string addresses in Ghidra and IDA file extractors @williballenthin (SURF-48)
- fix: use dest.value.value and indirect_src.value.value for LLIL_CONST call destinations in binja insn.py @williballenthin (SURF-47)
- fix: remove duplicate getPrevLocation call and dead loc variable in get_previous_instructions @williballenthin (SURF-46)
- fix: unpack getByteDef offset and slice buffer so ENDBRANCH check applies to target address, not segment start @williballenthin (SURF-45)
- fix: guard getByteDef against None return for unmapped addresses in viv insn extractor @williballenthin #3057
- fix: correct inverted loop structure in extract_function_loop so each block edge is recorded as (src, dest) @williballenthin (SURF-44)
- fix: initialize addr to None in Ghidra import extractors to prevent UnboundLocalError when external functions have no data references @williballenthin (SURF-43)
- fix: replace assert with isinstance guard in get_callee for invalid MethodSpec tokens @williballenthin
- fix: assign ConfigDict to model_config in ConciseModel so extra="ignore" is actually applied @williballenthin (SURF-42)
- fix: replace assert with isinstance guard in get_callee for invalid MethodSpec tokens @williballenthin (SURF-41)
- fix: incorrect bytes() constructor usage in buf_filled_with @mike-hunhoff #3077
- fix: remove redundant code related to cli loading @mike-hunhoff #3076
- fix: optimize all_zeros using fast bytes comparison @mike-hunhoff #3078
- fix: duplicate rule candidate evaluation in optimized matching engine @mike-hunhoff #3080
capa Explorer Web
capa Explorer IDA Pro plugin
- ida: display file-scope feature addresses (
file:0x...) in rule generator tree and safely handle file-offset navigation/filtering @vee1e #3009
Development
- ci: key vivisect workspace cache on vivisect, viv-utils, python-flirt versions and FLIRT signatures, shared across Python versions @mr-tz #3195
- ci: test macos-15-intel only on Python 3.10, matching the Intel build @mr-tz #3195
- tests: update binja version to 5.3 @mr-tz #3011
- ci: use explicit and per job permissions @mike-hunhoff #3002
- replace black/isort/flake8 with ruff @mike-hunhoff #2992
- ci: update GitHub Actions to support Node.js 24 (deprecate Node.js 20) @mr-tz #2984
- tests: add snapshot tests for feature extraction @williballenthin #3069
- tests: add more tests to exercise ELF OS detection @williballenthin #3098
Raw diffs
- freeze: add
-
π Kagi release notes Oct 16th, 2026 - Smarter search widgets, Privacy Pass upgrades, and a calmer Assistant rss
Search
-
We added a small animation to the coin widget β and clicking the coin does another flip! Try it for yourself!
-
We've increased the Quick Bangs and Quick Snaps limit from 20 to 50 #11480 @Kage), and known scam / phishing sites are now blocked when Safe Search is enabled, rather than just being downranked.
- The weather widget has been updated. Its triggers have been improved and now support more than 40 languages. This change closes several issues: #3348 @CrunchyFritos, #4525 @lawngnome, #4612 @laiz, #3326 @ak42, #6474 @bram
Improvements and bug fixes
- Double Quotes not working properly #11354 @LC
- News search with "Belgique (BE-fr)" region filter returns Dutch results instead of French #10236 @Renaud
- In video search order by view doesn't work #11628 @Adamant
- Blocked TLD shown in Blast from the Past #9155 @dreifach
- Localhost URL in search results #11577 @tongkun
- Kagiβs result for "parsec" is wrong #11459 @JetForMe
- Weird definition for "bar" #10384 @Tassels
- Selection option in search suggestions does not search #11512 @GreyHill
- When keyboard shortcuts are disabled,
Cstill opens the control center on the search results page #11397 @magiruuvelvet - In image search, clicking on "Advanced" doesn't do anything #11524 @smartbeach
- Navigation header graphical glitch in image results sharing page #11494 @matt-lebl
- Podcasts search tab has wrong class #11659 @MarioAichinger
- Clear icon is not centered properly #11626 @chrille0234
- Using Kagi HTML (no JS) breaks session url copy button #11399 @larke12
- Kagi Search: unable to login using EWW browser #8055 @geneg1
- Unable to sign in to account w/ password when using alternative login method #2740 @ChristenGottschlich
- Upgrading member in family to ultimate leads to missing amount copy #11639 @Salzian
Browser Extensions & Privacy Pass v1.0.13
- Kagi Search Extension Firefox Container Support #11563 @michaeljcallahan
- Provide option to disable adding context menus in Firefox extension #8139 @emptyjar
- Privacy Pass now works with Quick Answer & Inline Summarize features
- Fetching session cookies no longer fails under First-Party Isolation (
privacy.firstparty.isolate), which is the default in the Tor browser - Website Info doesn't work on Privacy Pass #11609 @Kagi_Search_User
Assistant
-
Response steps are now fully collapsible, giving you a calmer space to get all your work done.
-
A Help menu has been added to the sidebar for quick access to helpful links.

Apps
- We saw reports from users unable to send follow-up messages on the mobile apps. This issue has been resolved. We apologize for the inconvenience.
- Cannot send messages to the Assistant #11640 @spiffytech
- Canβt continue conversations on iOS #11633 @jc
- Assistant canβt send message iOS #11623 @CanadianUser73
Improvements & Bug Fixes
- Add Gemini 4 Argon #11687 @Mateo-Grgic
- Kagi Assistant Research agent crashes on specific arxiv paper #11472 @antiwashington
- Create Thread in Folder Not Working #11508 @NotNayte
- Assistant spams network requests while mousing over thread list #11637 @igakagi
- Assistant switches languages mid-conversation #11504 @jstolarek
Translate
- Kagi Translate has turned my blog post into a kagi.com page that outranks me, untranslated #11490 @AviD
- Centred, dynamically expanding YouTube subtitles are nearly unreadable #10283 @JR
Translate Extension
-
-
π DioxusLabs/blitz v0.3.0-beta.4 release
v0.3.0-beta.4
-
π HexRaysSA/plugin-repository commits sync repo: +7 releases rss
sync repo: +7 releases ## New releases - [IDA-MCP-Hub](https://github.com/captain-ai-hub/ida-mcp): 0.9.7, 0.9.6, 0.9.5, 0.9.4 - [functionloader](https://github.com/tien0246/functionloader): 0.1.1 - [mcrit-ida](https://github.com/familiary/mcrit-plugin): 2.1.1, 2.1.0 -
π smol-machines/smolvm smolvm v1.29.1 release
What's Changed
- Keep host directory mounts in checkpoints on request and always when pausing by @BinSquare in #1793
- Sweep partial downloads abandoned for a day that no pull holds, at most hourly from the pull path, so cancelled pulls no longer leave partial blobs on a node forever. by @BinSquare in #1794
- Retry image pulls cut off by a dropped connection by @BinSquare in #1798
- Let a branch set labels on its child by @BinSquare in #1799
- Record machine lifecycle events in a local usage journal by @BinSquare in #1780
- Extract a zstd-compressed agent rootfs without a zstd program by @BinSquare in #1801
- Unpack image layers with GNU tar so symlinks keep their owners by @BinSquare in #1805
- Count a macOS process's CPU time in nanoseconds instead of mach ticks by @AlixANNERAUD in #1807
- Stop
machine run -ispinning forever on macOS when stdin is /dev/null by @RitikaxG in #1804 - Record symlink owners on their parent directory in Linux host-extracted layers by @BinSquare in #1809
- Pin libkrun at the hinted free page zeroing fix, so a machine's later checkpoints, restores and branches skip memory the guest freed (2.4 GB to 0.26 GB in one test). by @BinSquare in #1800
- Pin libkrun at the symlink owner record, so .smolmachine symlinks keep their image owners on Linux hosts by @BinSquare in #1810
- Let a checkpoint capture reply once the artifact is held on the node and upload it later through POST /checkpoints/{key}/upload, so a caller no longer waits on a multi-gigabyte upload it does not need. by @BinSquare in #1795
- Add serve --guest-rollout-port by @BinSquare in #1811
- Mount the image seed behind every attached disk so exporting an image machine works when VMs run under their own uid by @BinSquare in #1812
- Mirror the pod netns gateway neighbor and route state into the guest by @quantike in #1781
- Keep the local API socket private before publishing it by @BinSquare in #1709
- Avoid UID registry warnings when deleting unassigned VMs by @BinSquare in #1708
- Resolve guest hostnames in image VMs and restored clones by @BinSquare in #1705
- Preserve source VM CPU and memory when creating a pack by @BinSquare in #1693
- Let non-root image users write to fresh workspaces by @BinSquare in #1688
- Skip unused packed-layer device for VM-mode machines by @BinSquare in #1678
- Preserve installed agent rootfs when relocating machine state by @BinSquare in #1667
- Test the DNS allow-list helper against a fixed resolver, not the host's by @BinSquare in #1665
- Fail a boot for lack of progress, not for being slow by @BinSquare in #1788
- Make file operations target the filesystem exec uses and give each image run its own overlay by @BinSquare in #1564
- Hash a published cache disk while it uploads instead of before by @BinSquare in #1814
- Pin libkrun at the macOS symlink xattr fix, rebuild every bundled libkrun, and test packed symlinks by @BinSquare in #1817
- Bump smolvm to 1.29.0 on main by @BinSquare in #1818
- Read a chain with sixteen threads when flattening it for a publish by @BinSquare in #1823
- Boot packed and cached runs on macOS in a fresh _boot-vm process so a registry pull no longer crashes the VM by @BinSquare in #1821
- Show a running machine's CPU and memory usage with machine stats by @AlixANNERAUD in #1808
- Accept a local archive, stdin or rootfs directory on pack create --image by @NickyHeC in #1797
- Restamp skill packets on v1.29.0 and remove duplicated docs by @NickyHeC in #1822
- Prepare SmolVM v1.29.1 for release by @BinSquare in #1824
New Contributors
Full Changelog :
v1.28.1...v1.29.1 -
π New Music Releases The Smashing Pumpkins - Black Stars rss
The Smashing Pumpkins - a new release is available:
- 2026-10-16: Black Stars (Single)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π New Music Releases Caspian - Caspian rss
Caspian - a new release is available:
- 2026-10-16: Caspian (Album)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π New Music Releases Max Richter - While the Flood Rages rss
Max Richter - a new release is available:
- 2026-10-16: While the Flood Rages (Album)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π New Music Releases Paul Oakenfold - Eyes on You (Big Brother Theme) rss
Paul Oakenfold - a new release is available:
- 2026-10-16: Eyes on You (Big Brother Theme) (Single)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π New Music Releases Kings of Leon - KOYSAR rss
Kings of Leon - a new release is available:
- 2026-10-16: KOYSAR (Single)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π New Music Releases Eelke Kleijn - Her Name rss
Eelke Kleijn - a new release is available:
- 2026-10-16: Her Name (Single)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π New Music Releases Kygo - Before You Know It rss
Kygo - a new release is available:
- 2026-10-16: Before You Know It (Single)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π Ampcode News See Your Runner's Desktop rss
You can now see and control your macOS or Linux runner's desktop. This is nice for trying native apps that Amp builds for you, such as iOS apps:
Turn on Share This Mac's Display under Settings βΊ Runner in the macOS app, or start your runner with
amp --no-tui --desktop.

Your Amp client connects directly to the runner, so it's nearly instant when the runner is on your local network or nearby.
Read See and Control the Runner's Desktop for more details.
-
