Skip to content

Instantly share code, notes, and snippets.

@billywhizz
Last active March 3, 2026 21:43
Show Gist options
  • Select an option

  • Save billywhizz/710b5d876577efa1155753802583d0a2 to your computer and use it in GitHub Desktop.

Select an option

Save billywhizz/710b5d876577efa1155753802583d0a2 to your computer and use it in GitHub Desktop.
node lo module loader hooks example
$ bun test.js 
bun_1.3.9        addon-rust           time    11618 rate      4303448 rate/core      4260839 ns/iter       232.37 rss     87433216 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon-rust           time    11579 rate      4318019 rate/core      4318019 ns/iter       231.58 rss     87961600 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon-rust           time    11668 rate      4285064 rate/core      4285064 ns/iter       233.36 rss     88092672 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon-rust           time    11549 rate      4329047 rate/core      4286185 ns/iter       230.99 rss     88092672 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon-rust           time    11559 rate      4325584 rate/core      4325584 ns/iter       231.18 rss     88092672 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon-rust           time    11513 rate      4342626 rate/core      4342626 ns/iter       230.27 rss     88092672 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon-rust           time    11550 rate      4328696 rate/core      4328696 ns/iter       231.01 rss     88092672 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon-rust           time    11647 rate      4292846 rate/core      4292846 ns/iter       232.94 rss     88092672 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon-rust           time    11574 rate      4319733 rate/core      4319733 ns/iter       231.49 rss     88092672 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon-rust           time    11572 rate      4320590 rate/core      4320590 ns/iter       231.44 rss     88092672 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon                time    10775 rate      4640188 rate/core      4640188 ns/iter       215.50 rss     88453120 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon                time    10780 rate      4637793 rate/core      4591874 ns/iter       215.61 rss     91271168 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon                time    10791 rate      4633126 rate/core      4633126 ns/iter       215.83 rss     88915968 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon                time    10851 rate      4607471 rate/core      4607471 ns/iter       217.03 rss     88915968 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon                time    10761 rate      4646329 rate/core      4600326 ns/iter       215.22 rss     88915968 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon                time    10735 rate      4657269 rate/core      4611157 ns/iter       214.71 rss     89047040 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon                time    10750 rate      4651089 rate/core      4605038 ns/iter       215.00 rss     89178112 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon                time    10738 rate      4656276 rate/core      4610174 ns/iter       214.76 rss     89178112 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon                time    10824 rate      4619188 rate/core      4619188 ns/iter       216.48 rss     89309184 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon                time    10739 rate      4655686 rate/core      4655686 ns/iter       214.79 rss     89571328 usr 100.00 sys   0.00 tot 100.00
bun_1.3.9        addon-cpp            time    17778 rate      2812442 rate/core      2757296 ns/iter       355.56 rss     90570752 usr 101.00 sys   1.00 tot 102.00
bun_1.3.9        addon-cpp            time    17764 rate      2814623 rate/core      2786756 ns/iter       355.28 rss     91947008 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon-cpp            time    17752 rate      2816555 rate/core      2761329 ns/iter       355.04 rss     92602368 usr 100.00 sys   2.00 tot 102.00
bun_1.3.9        addon-cpp            time    17962 rate      2783636 rate/core      2756075 ns/iter       359.24 rss     93650944 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon-cpp            time    17997 rate      2778235 rate/core      2723760 ns/iter       359.94 rss     94568448 usr 100.00 sys   2.00 tot 102.00
bun_1.3.9        addon-cpp            time    17785 rate      2811239 rate/core      2783405 ns/iter       355.71 rss     95223808 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon-cpp            time    17871 rate      2797821 rate/core      2770120 ns/iter       357.42 rss     96272384 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon-cpp            time    17905 rate      2792470 rate/core      2764822 ns/iter       358.10 rss     97058816 usr 100.00 sys   1.00 tot 101.00
bun_1.3.9        addon-cpp            time    17910 rate      2791612 rate/core      2736875 ns/iter       358.21 rss     98107392 usr 100.00 sys   2.00 tot 102.00
bun_1.3.9        addon-cpp            time    17827 rate      2804715 rate/core      2776945 ns/iter       356.54 rss     99155968 usr 100.00 sys   1.00 tot 101.00

$ node test.js
node_v24.13.1    addon-rust           time     8065 rate      6198933 rate/core      6198933 ns/iter       161.31 rss     55676928 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-rust           time     7968 rate      6274384 rate/core      6274384 ns/iter       159.37 rss     55939072 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-rust           time     8006 rate      6245176 rate/core      6245176 ns/iter       160.12 rss     55939072 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-rust           time     7959 rate      6281979 rate/core      6281979 ns/iter       159.18 rss     56070144 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-rust           time     8088 rate      6181432 rate/core      6181432 ns/iter       161.77 rss     56070144 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-rust           time     8008 rate      6243519 rate/core      6243519 ns/iter       160.16 rss     56070144 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-rust           time     8009 rate      6242943 rate/core      6306003 ns/iter       160.18 rss     56070144 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon-rust           time     7978 rate      6266503 rate/core      6266503 ns/iter       159.57 rss     56070144 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-rust           time     7985 rate      6261349 rate/core      6261349 ns/iter       159.71 rss     56070144 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-rust           time     8021 rate      6233589 rate/core      6296555 ns/iter       160.42 rss     56201216 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon                time     6811 rate      7340150 rate/core      7414292 ns/iter       136.23 rss     56463360 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon                time     6812 rate      7339792 rate/core      7339792 ns/iter       136.24 rss     57380864 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon                time     6782 rate      7372088 rate/core      7446553 ns/iter       135.64 rss     57380864 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon                time     6737 rate      7421686 rate/core      7421686 ns/iter       134.74 rss     57380864 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon                time     6743 rate      7414845 rate/core      7489743 ns/iter       134.86 rss     57380864 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon                time     6687 rate      7476263 rate/core      7476263 ns/iter       133.75 rss     57380864 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon                time     6706 rate      7455126 rate/core      7530430 ns/iter       134.13 rss     57380864 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon                time     6721 rate      7438798 rate/core      7438798 ns/iter       134.43 rss     57511936 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon                time     6753 rate      7403829 rate/core      7478615 ns/iter       135.06 rss     57511936 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon                time     6732 rate      7426589 rate/core      7501605 ns/iter       134.65 rss     57511936 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon-cpp            time    12127 rate      4123029 rate/core      4123029 ns/iter       242.54 rss     57774080 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-cpp            time    12185 rate      4103112 rate/core      4103112 ns/iter       243.71 rss     57794560 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-cpp            time    12147 rate      4116150 rate/core      4116150 ns/iter       242.94 rss     58449920 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-cpp            time    12100 rate      4132157 rate/core      4132157 ns/iter       242.00 rss     58449920 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-cpp            time    12156 rate      4113096 rate/core      4154642 ns/iter       243.12 rss     58449920 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon-cpp            time    12200 rate      4098080 rate/core      4139475 ns/iter       244.01 rss     58449920 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon-cpp            time    12111 rate      4128417 rate/core      4170118 ns/iter       242.22 rss     58449920 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon-cpp            time    12101 rate      4131719 rate/core      4173453 ns/iter       242.03 rss     58449920 usr  99.00 sys   0.00 tot  99.00
node_v24.13.1    addon-cpp            time    12135 rate      4120209 rate/core      4120209 ns/iter       242.70 rss     58449920 usr 100.00 sys   0.00 tot 100.00
node_v24.13.1    addon-cpp            time    12187 rate      4102520 rate/core      4102520 ns/iter       243.75 rss     58449920 usr 100.00 sys   0.00 tot 100.00

$ deno -A test.js
deno_2.6.9       addon-rust           time     8892 rate      5622922 rate/core      5622922 ns/iter       177.84 rss     68677632 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-rust           time     8879 rate      5630872 rate/core      5630872 ns/iter       177.59 rss     69201920 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-rust           time     8939 rate      5592890 rate/core      5592890 ns/iter       178.79 rss     69332992 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-rust           time     8917 rate      5607046 rate/core      5663683 ns/iter       178.34 rss     69332992 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-rust           time     8805 rate      5678317 rate/core      5678317 ns/iter       176.10 rss     69332992 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-rust           time     8871 rate      5635793 rate/core      5692720 ns/iter       177.43 rss     69332992 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-rust           time     8757 rate      5709120 rate/core      5766788 ns/iter       175.15 rss     69332992 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-rust           time     8823 rate      5666926 rate/core      5666926 ns/iter       176.46 rss     69332992 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-rust           time     8801 rate      5680933 rate/core      5738316 ns/iter       176.02 rss     69332992 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-rust           time     8793 rate      5686177 rate/core      5743613 ns/iter       175.86 rss     69332992 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon                time     7424 rate      6734207 rate/core      6734207 ns/iter       148.49 rss     69332992 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon                time     7424 rate      6734708 rate/core      6734708 ns/iter       148.48 rss     69857280 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon                time     7425 rate      6733662 rate/core      6801679 ns/iter       148.50 rss     69988352 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon                time     7547 rate      6624365 rate/core      6624365 ns/iter       150.95 rss     69988352 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon                time     7716 rate      6479502 rate/core      6544951 ns/iter       154.33 rss     69988352 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon                time     7596 rate      6582052 rate/core      6582052 ns/iter       151.92 rss     69988352 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon                time     7519 rate      6649141 rate/core      6716304 ns/iter       150.39 rss     69988352 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon                time     7590 rate      6587327 rate/core      6653866 ns/iter       151.80 rss     69988352 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon                time     7609 rate      6570385 rate/core      6570385 ns/iter       152.19 rss     69988352 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon                time     7449 rate      6712289 rate/core      6712289 ns/iter       148.98 rss     69988352 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-cpp            time     9939 rate      5030536 rate/core      5030536 ns/iter       198.78 rss     70250496 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-cpp            time     9992 rate      5003667 rate/core      5054209 ns/iter       199.85 rss     70512640 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-cpp            time    10133 rate      4934124 rate/core      4983963 ns/iter       202.67 rss     70512640 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-cpp            time    10054 rate      4972819 rate/core      4972819 ns/iter       201.09 rss     70512640 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-cpp            time    10015 rate      4992456 rate/core      5042884 ns/iter       200.30 rss     70512640 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-cpp            time    10029 rate      4985096 rate/core      4985096 ns/iter       200.59 rss     70512640 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-cpp            time    10129 rate      4936076 rate/core      4936076 ns/iter       202.59 rss     70512640 usr 100.00 sys   0.00 tot 100.00
deno_2.6.9       addon-cpp            time     9982 rate      5008624 rate/core      5059216 ns/iter       199.65 rss     70512640 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-cpp            time    10092 rate      4954336 rate/core      5004380 ns/iter       201.84 rss     70512640 usr  99.00 sys   0.00 tot  99.00
deno_2.6.9       addon-cpp            time    10295 rate      4856510 rate/core      4905566 ns/iter       205.90 rss     70512640 usr  99.00 sys   0.00 tot  99.00

$ node --require ./hooks.js ccb.js 
lo_0.0.22-pre    c-test               time     3621 rate     13806763 rate/core     13768728 ns/iter        72.42 rss     53059584 usr 100.28 sys   0.00 tot 100.28
lo_0.0.22-pre    c-test               time     3536 rate     14138386 rate/core     14138386 ns/iter        70.72 rss     55681024 usr 100.00 sys   0.00 tot 100.00
lo_0.0.22-pre    c-test               time     3408 rate     14669759 rate/core     14669759 ns/iter        68.16 rss     55681024 usr 100.00 sys   0.00 tot 100.00
lo_0.0.22-pre    c-test               time     3413 rate     14647251 rate/core     14647251 ns/iter        68.27 rss     55681024 usr 100.00 sys   0.00 tot 100.00
lo_0.0.22-pre    c-test               time     3447 rate     14501460 rate/core     14501460 ns/iter        68.95 rss     55681024 usr 100.00 sys   0.00 tot 100.00
lo_0.0.22-pre    c-test               time     3413 rate     14648590 rate/core     14648590 ns/iter        68.26 rss     55681024 usr 100.00 sys   0.00 tot 100.00
lo_0.0.22-pre    c-test               time     3404 rate     14687285 rate/core     14687285 ns/iter        68.08 rss     55681024 usr 100.00 sys   0.00 tot 100.00
lo_0.0.22-pre    c-test               time     3459 rate     14451781 rate/core     14451781 ns/iter        69.19 rss     55681024 usr 100.00 sys   0.00 tot 100.00
lo_0.0.22-pre    c-test               time     3419 rate     14620681 rate/core     14620681 ns/iter        68.39 rss     55681024 usr 100.00 sys   0.00 tot 100.00
lo_0.0.22-pre    c-test               time     3422 rate     14608517 rate/core     14608517 ns/iter        68.45 rss     55681024 usr 100.00 sys   0.00 tot 100.00

$ lo ccb.js 
lo_0.0.23-pre    c-test               time     3476 rate     14381977 rate/core     14381977 ns/iter        69.53 rss     32112640 usr 100.00 sys   0.00 tot 100.00
lo_0.0.23-pre    c-test               time     3445 rate     14511011 rate/core     14511011 ns/iter        68.91 rss     32223232 usr 100.00 sys   0.00 tot 100.00
lo_0.0.23-pre    c-test               time     3394 rate     14729230 rate/core     14729230 ns/iter        67.89 rss     32485376 usr 100.00 sys   0.00 tot 100.00
lo_0.0.23-pre    c-test               time     3554 rate     14068411 rate/core     14068411 ns/iter        71.08 rss     32485376 usr 100.00 sys   0.00 tot 100.00
lo_0.0.23-pre    c-test               time     3399 rate     14709704 rate/core     14709704 ns/iter        67.98 rss     32485376 usr 100.00 sys   0.00 tot 100.00
lo_0.0.23-pre    c-test               time     3412 rate     14653228 rate/core     14696199 ns/iter        68.24 rss     32485376 usr  99.71 sys   0.00 tot  99.71
lo_0.0.23-pre    c-test               time     3398 rate     14713147 rate/core     14669873 ns/iter        67.96 rss     32485376 usr 100.29 sys   0.00 tot 100.29
lo_0.0.23-pre    c-test               time     3400 rate     14705630 rate/core     14705630 ns/iter        68.00 rss     32485376 usr 100.00 sys   0.00 tot 100.00
lo_0.0.23-pre    c-test               time     3403 rate     14690701 rate/core     14690701 ns/iter        68.07 rss     32485376 usr 100.00 sys   0.00 tot 100.00
lo_0.0.23-pre    c-test               time     3437 rate     14544912 rate/core     14587317 ns/iter        68.75 rss     32485376 usr  99.71 sys   0.00 tot  99.71
import { createRequire } from "node:module";
const require = createRequire(import.meta.url);
const { registerHooks } = require('node:module');
function resolve(specifier, context, nextResolve) {
if (typeof specifier === 'string' && specifier.startsWith('lib/')) {
const url = `lo:${specifier}`;
return {
shortCircuit: true,
url,
};
}
return nextResolve(specifier, context);
}
function load(url, context, nextLoad) {
if (url.startsWith('lo:')) {
const name = url.split('lo:')[1];
return {
format: "module",
source: lo.builtin(name),
shortCircuit: true,
};
}
return nextLoad(url, context);
}
/**
* @param {Error} err
*/
function fix_stack (err) {
err.stack = err.stack.split('\n')
.filter(line => !line.match(/\s+at assert \(main\.js.+/))
.join('\n')
}
/**
* @param {string} condition
* @param {function} message
*/
function assert (condition, message, ErrorType = Error) {
if (!condition) {
if (message && message.constructor.name === 'Function') {
const err = new ErrorType(message(condition))
fix_stack(err)
throw(err)
}
const err = new ErrorType(message || "Assertion failed")
fix_stack(err)
throw(err)
}
return condition
}
function addr (u32) {
return u32[0] + ((2 ** 32) * u32[1])
}
function get_address (buf) {
getAddress(buf, handle)
return addr(handle)
}
function ptr (u8) {
if (u8.ptr) return u8
u8.ptr = get_address(u8)
return u8
}
const { lo } = require('./build/Release/addon.node')
const { getAddress } = lo
const handle = new Uint32Array(2)
handle.ptr = get_address(handle)
const { hrtime } = lo
lo.hrtime = function () {
hrtime(handle.ptr)
return handle[0] + ((2 ** 32) * handle[1])
}
lo.args = process.argv
globalThis.lo = lo
lo.core = lo.library('core').core
lo.core.arch = lo.arch()
lo.core.os = lo.os()
lo.ptr = ptr
lo.assert = assert
lo.get_address = get_address
lo.register_callback = lo.registerCallback
lo.require = require
registerHooks({ resolve, load });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment