How Monokulo is tested

Monokulo handles other people’s money, so it gets tested hard. Every change runs more than 2,600 automatic tests. Every night, two kinds of robot tester invent thousands of strange situations and check that no payment goes missing. This page rebuilds itself from those runs. Open any section to see the details.

Some checks failed·Tests and coverage from 4176f6b on 18 Oct 2026·Nightly properties 23 Oct 2026·Fuzzing 23 Oct 2026·Live network 22 Oct 2026
Tests2,6572,657 passed · 0 skipped
Engine and server90.5%of 92,270 Rust lines
Checkout and POS95.1%of 1,666 browser lines
Properties nightly212plus 10 fuzz targets · 27 live daily

Coverage

While the tests run, a tool watches which lines of code actually get used. Code that no test ever runs is where bugs can hide. Higher is better, but 100% isn’t the goal: some code, like the stress-test tools, never ships. A branch is each way an if can go. Open a crate (a package of Rust code) to see its files, lowest first.

Rust, shipping crates
90.5% 78.9% branches
Rust, whole workspace
88.5% 76.6% branches
Browser
95.1% 79.0% branches
CrateLinesCovered / totalBranches
monokulo 99 files
95.9%
55,363 / 57,75878.4%
FileLinesCoveredBranches
src/main.rs
0.0%
0 / 2560 / 20
src/webhooks/subscriber.rs
71.3%
87 / 1222 / 6
src/http/setup.rs
83.0%
322 / 38820 / 24
src/http/signup.rs
84.9%
107 / 12624 / 30
src/http/wallet_service.rs
85.5%
159 / 18622 / 32
src/http/query_page.rs
85.9%
244 / 28432 / 42
src/http/store_site.rs
86.3%
272 / 31525 / 38
src/http/store_settings.rs
87.2%
410 / 470114 / 132
src/webhooks/mod.rs
87.8%
86 / 9810 / 14
src/embed_domains.rs
88.2%
380 / 43150 / 60
src/db/webhooks.rs
89.7%
356 / 39716 / 18
src/webhooks/delivery.rs
89.7%
331 / 36940 / 52
src/http/connections.rs
89.7%
350 / 3908 / 18
src/abuse/proxy_protocol.rs
90.1%
163 / 18121 / 22
src/http/webhooks.rs
90.7%
262 / 28911 / 12
src/http/logout.rs
90.9%
10 / 11–
src/db/order_changes.rs
91.4%
32 / 353 / 4
src/views/engine.rs
92.0%
686 / 74665 / 104
src/views/controls.rs
92.1%
58 / 638 / 12
src/http/logs_page.rs
92.1%
1,169 / 1,269103 / 142
src/views/key_entry.rs
92.5%
147 / 15910 / 12
src/http/login.rs
92.6%
63 / 683 / 4
src/http/store_key.rs
92.7%
38 / 416 / 6
src/engine_view/relay.rs
92.8%
448 / 48335 / 46
src/live.rs
92.8%
516 / 55662 / 86
src/http/invites.rs
93.0%
760 / 81728 / 46
src/views/time.rs
93.1%
122 / 13115 / 20
src/http/dashboard.rs
93.4%
324 / 34715 / 18
src/confirmation_thresholds.rs
93.9%
340 / 36228 / 38
src/settings.rs
94.2%
878 / 93239 / 50
src/http/admin_setup.rs
94.3%
247 / 2628 / 8
src/views/webhooks.rs
94.3%
462 / 49081 / 114
src/views/query.rs
94.4%
356 / 37741 / 50
src/logs.rs
94.5%
277 / 2938 / 10
src/http/key_entry.rs
94.7%
610 / 64456 / 74
src/http/checkout.rs
94.7%
1,312 / 1,38559 / 76
src/http/wallets.rs
94.9%
1,641 / 1,73064 / 112
src/http/account.rs
95.1%
174 / 18337 / 40
src/http/embed_domains.rs
95.4%
1,619 / 1,69754 / 66
src/http/telemetry_client.rs
95.6%
129 / 13518 / 22
src/wallets.rs
95.7%
90 / 9419 / 24
src/http/engine_page.rs
95.9%
701 / 73121 / 28
src/abuse/streams.rs
95.9%
118 / 12314 / 18
src/abuse/limiter.rs
96.2%
202 / 21025 / 32
src/qr.rs
96.3%
26 / 27–
src/abuse/identity.rs
96.4%
163 / 16918 / 20
src/http/pos.rs
96.5%
2,077 / 2,15348 / 68
src/http/status_page.rs
96.7%
1,288 / 1,33292 / 118
src/engine_view/present.rs
96.8%
721 / 74577 / 84
src/http/csrf.rs
97.0%
64 / 666 / 6
src/views/orders.rs
97.1%
563 / 58047 / 54
src/http/admin_settings.rs
97.1%
3,735 / 3,847195 / 270
src/http/orders.rs
97.2%
4,677 / 4,81488 / 144
src/views/scaling.rs
97.2%
927 / 95491 / 106
src/http/pos_logs.rs
97.2%
176 / 18145 / 54
src/crypto.rs
97.5%
119 / 1222 / 2
src/engine_client.rs
97.6%
1,369 / 1,40256 / 66
src/views/setup.rs
97.8%
443 / 45335 / 38
src/http/home.rs
97.9%
324 / 33110 / 14
src/http/abuse.rs
98.0%
765 / 78139 / 48
src/abuse/challenge.rs
98.0%
300 / 30631 / 34
src/views/mod.rs
98.1%
559 / 57061 / 76
src/views/store_settings.rs
98.3%
1,199 / 1,22056 / 74
src/exchange_rate_config.rs
98.3%
635 / 64632 / 38
src/db.rs
98.3%
3,735 / 3,79937 / 48
src/http/test_support.rs
98.4%
120 / 1223 / 4
src/views/admin.rs
98.4%
2,202 / 2,238244 / 280
src/http/connect.rs
98.4%
1,268 / 1,28838 / 52
src/views/checkout.rs
98.5%
717 / 728114 / 136
src/http/pay.rs
98.5%
1,745 / 1,77121 / 32
src/currencies.rs
98.7%
151 / 1538 / 8
src/views/wallets.rs
98.7%
1,232 / 1,248109 / 138
src/fx_provider_settings.rs
98.9%
264 / 26722 / 28
src/views/logs.rs
98.9%
367 / 37155 / 66
src/http/mod.rs
99.1%
736 / 74328 / 32
src/engine_view/history.rs
99.1%
218 / 22032 / 34
src/stores.rs
99.1%
112 / 11326 / 30
src/assets.rs
99.2%
117 / 1188 / 12
src/views/store_detail.rs
99.4%
308 / 31018 / 20
src/cli.rs
99.4%
164 / 1652 / 2
src/views/domains.rs
99.5%
400 / 40240 / 46
src/views/store_site.rs
99.5%
438 / 44059 / 82
src/views/home.rs
99.6%
240 / 24114 / 18
src/engine_view/machine.rs
99.7%
624 / 62675 / 76
src/views/account.rs
99.8%
459 / 46017 / 22
src/admin_nodes.rs
99.8%
586 / 58775 / 88
src/views/status.rs
99.9%
687 / 68860 / 66
src/abuse/mod.rs
100.0%
68 / 684 / 4
src/abuse/stats.rs
100.0%
51 / 513 / 4
src/http/fx.rs
100.0%
101 / 1016 / 8
src/templates.rs
100.0%
90 / 9020 / 20
src/views/auth.rs
100.0%
189 / 18911 / 12
src/views/challenge.rs
100.0%
54 / 542 / 2
src/views/connect.rs
100.0%
77 / 773 / 4
src/views/create_order.rs
100.0%
125 / 1256 / 8
src/views/pos.rs
100.0%
49 / 492 / 2
src/views/settings.rs
100.0%
286 / 2868 / 8
src/views/shorten.rs
100.0%
38 / 38–
src/webhooks/body.rs
100.0%
157 / 1574 / 4
src/engine_view/mod.rsnot instrumented
src/http/query_page/columns.rsnot instrumented
src/lib.rsnot instrumented
src/views/logo_art.rsnot instrumented
engine 56 files
87.9%
14,806 / 16,84085.6%
FileLinesCoveredBranches
src/bin/round_sweep.rs tool binary
0.0%
0 / 3420 / 10
src/bin/stress_common/mod.rs tool binary
0.0%
0 / 370 / 2
src/bin/stress_fixture.rs tool binary
0.0%
0 / 5220 / 44
src/main.rs
0.0%
0 / 820 / 14
src/key_custody/mod.rs
13.0%
3 / 23–
src/http/logs.rs
67.5%
56 / 832 / 4
src/key_custody/snp_slot.rs
71.0%
93 / 1316 / 12
src/threads.rs
77.8%
77 / 9915 / 24
src/run.rs
81.2%
181 / 2234 / 8
src/pow/hasher.rs
83.8%
119 / 14212 / 20
src/proof/anchor.rs
84.6%
253 / 29933 / 46
src/work/reservations.rs
84.6%
33 / 394 / 4
src/daemon.rs
85.9%
73 / 85–
src/http/admin.rs
86.4%
876 / 1,01477 / 98
src/daemon_rpc.rs
88.3%
815 / 923108 / 130
src/work/observe.rs
89.8%
53 / 590 / 2
src/proof/mod.rs
90.5%
697 / 770105 / 124
src/http/query.rs
90.7%
107 / 1182 / 4
src/settings.rs
90.7%
39 / 4323 / 24
src/engine_settings.rs
90.7%
449 / 49518 / 23
src/http/mod.rs
91.4%
402 / 44019 / 22
src/daemon_fallback.rs
91.4%
363 / 39711 / 16
src/http/status_page.rs
91.4%
267 / 29223 / 26
src/store/proof.rs
91.5%
301 / 32913 / 14
src/http/order_events.rs
91.8%
78 / 856 / 8
src/work/tuning.rs
91.8%
90 / 9852 / 54
src/http/activity.rs
92.7%
102 / 1105 / 10
src/http/instance_admin.rs
93.2%
395 / 42448 / 54
src/activity.rs
93.2%
109 / 11720 / 20
src/loops.rs
93.7%
371 / 39634 / 44
src/node_events.rs
94.2%
161 / 17118 / 20
src/store/order_events.rs
95.6%
109 / 1144 / 4
src/store/conflicts.rs
95.7%
110 / 11524 / 24
src/work/chain.rs
96.0%
436 / 45487 / 96
src/work/settlement.rs
96.1%
198 / 20648 / 48
src/scanner.rs
96.4%
877 / 910111 / 114
src/store/mod.rs
96.7%
1,744 / 1,803116 / 126
src/work/upkeep.rs
96.8%
152 / 15732 / 32
src/pow/mod.rs
96.9%
186 / 19234 / 36
src/work/blocks.rs
97.1%
1,354 / 1,395204 / 216
src/work/mod.rs
97.7%
293 / 30010 / 10
src/http/orders.rs
98.2%
107 / 10919 / 20
src/store/db.rs
98.2%
163 / 16614 / 14
src/pow/test_chain.rs
98.3%
177 / 1802 / 2
src/scaling.rs
98.8%
252 / 25529 / 32
src/zmtp.rs
99.1%
222 / 22447 / 50
src/link.rs
99.2%
260 / 26211 / 14
src/work/mempool.rs
99.3%
541 / 54564 / 64
src/store/work.rs
99.6%
775 / 77842 / 42
src/cli.rs
100.0%
24 / 242 / 2
src/http/rate_limit.rs
100.0%
54 / 546 / 6
src/scanner_status.rs
100.0%
46 / 46–
src/status.rs
100.0%
39 / 3915 / 16
src/store/dispatch.rs
100.0%
7 / 7–
src/work/retry.rs
100.0%
21 / 212 / 2
src/work/scheduler.rs
100.0%
96 / 9618 / 18
src/auth.rsnot instrumented
src/lib.rsnot instrumented
src/network.rsnot instrumented
src/store/query_columns.rsnot instrumented
shared 25 files
94.3%
4,794 / 5,08481.6%
FileLinesCoveredBranches
src/shutdown.rs
0.0%
0 / 180 / 2
src/ids.rs
87.8%
43 / 49–
src/sqlite_query.rs
89.2%
257 / 28827 / 32
src/dns.rs
89.9%
382 / 42573 / 90
src/monero_tx.rs
90.1%
91 / 1018 / 16
src/resources.rs
90.5%
218 / 24113 / 18
src/supervise.rs
92.0%
196 / 2137 / 12
src/haveno.rs
94.3%
910 / 96548 / 60
src/exchange_rate.rs
94.4%
654 / 69339 / 48
src/coinmarketcap.rs
95.2%
319 / 33517 / 18
src/xmr_amount.rs
95.7%
111 / 11615 / 16
src/migrations.rs
96.2%
127 / 13213 / 14
src/network.rs
96.6%
28 / 29–
src/unreachable.rs
96.6%
28 / 29–
src/rate_limit.rs
96.9%
124 / 12811 / 12
src/sqlite.rs
97.0%
224 / 2314 / 4
src/log.rs
97.3%
73 / 753 / 4
src/auth.rs
97.4%
114 / 1173 / 4
src/http_cache.rs
98.8%
331 / 3357 / 8
src/activity.rs
100.0%
96 / 96–
src/order_status.rs
100.0%
27 / 27–
src/password.rs
100.0%
96 / 962 / 2
src/scaling.rs
100.0%
46 / 464 / 4
src/time.rs
100.0%
17 / 17–
src/webhook_sign.rs
100.0%
282 / 28244 / 50
src/announcements.rsnot instrumented
src/lib.rsnot instrumented
src/proof.rsnot instrumented
ui 20 files
20.7%
719 / 3,47226.9%
FileLinesCoveredBranches
src/book.rs
0.0%
0 / 2950 / 22
src/components/mod.rs
0.0%
0 / 91–
src/solid.rs
0.0%
0 / 6030 / 126
src/components/settings.rs
7.7%
15 / 194–
src/components/actions.rs
9.0%
9 / 100–
src/components/data.rs
9.3%
9 / 97–
src/components/steps.rs
9.4%
18 / 1912 / 4
src/components/items.rs
10.6%
9 / 85–
src/components/tabs.rs
11.5%
6 / 52–
src/components/forms.rs
13.8%
41 / 2972 / 2
src/components/chrome.rs
15.4%
24 / 156–
src/components/dialog.rs
15.6%
12 / 77–
src/components/sortable.rs
16.7%
9 / 54–
src/components/content.rs
19.2%
92 / 479–
src/components/copy.rs
26.6%
17 / 64–
src/components/select.rs
44.6%
86 / 19320 / 20
src/ir.rs
66.7%
40 / 602 / 4
src/json.rs
77.3%
51 / 662 / 2
src/lib.rs
78.2%
86 / 1103 / 4
src/render.rs
93.8%
195 / 20827 / 32
src/assets.rsnot instrumented
telemetry 9 files
90.3%
2,082 / 2,30680.6%
FileLinesCoveredBranches
src/store/api.rs
75.0%
21 / 284 / 4
src/lib.rs
86.5%
283 / 32737 / 50
src/store/mod.rs
87.1%
425 / 48843 / 60
src/query.rs
88.6%
473 / 53482 / 96
src/otlp.rs
89.4%
245 / 27427 / 36
src/json.rs
90.6%
173 / 19123 / 30
src/trace.rs
98.2%
54 / 5516 / 20
src/http.rs
99.5%
209 / 21013 / 14
src/redact.rs
100.0%
199 / 19955 / 62
live-settings 8 files
89.4%
1,777 / 1,98781.9%
FileLinesCoveredBranches
src/section.rs
73.6%
39 / 53–
src/setting.rs
84.5%
326 / 38649 / 70
src/store.rs
87.5%
21 / 24–
src/options.rs
88.0%
433 / 49257 / 68
src/paths.rs
92.1%
70 / 7611 / 12
src/registry.rs
92.3%
515 / 55877 / 86
src/cli.rs
92.3%
180 / 19513 / 16
src/value.rs
95.1%
193 / 20319 / 24
src/lib.rsnot instrumented
key-custody 8 files
91.4%
1,559 / 1,70682.9%
FileLinesCoveredBranches
src/property_support.rs
78.6%
33 / 423 / 4
src/custody.rs
86.7%
189 / 21810 / 12
src/snp.rs
87.0%
395 / 45426 / 36
src/test_log.rs
89.2%
33 / 371 / 2
src/plain.rs
93.3%
168 / 18025 / 28
src/router.rs
93.8%
167 / 17811 / 14
src/transport.rs
96.0%
522 / 54429 / 32
src/outputs.rs
98.1%
52 / 5311 / 12
src/lib.rsnot instrumented
src/plain_properties.rsnot instrumented
src/router_properties.rsnot instrumented
src/wasm.rsnot instrumented
snp-attest 7 files
67.8%
908 / 1,34047.8%
FileLinesCoveredBranches
src/bin/verify-snp-attestation.rs tool binary
0.0%
0 / 149–
src/kds.rs
60.0%
81 / 1350 / 12
src/verify.rs
68.4%
322 / 47126 / 50
src/guest.rs
72.0%
195 / 2717 / 14
src/report.rs
98.1%
205 / 20910 / 14
src/id_block.rs
100.0%
93 / 93–
src/pinned_ark.rs
100.0%
12 / 12–
src/lib.rsnot instrumented
ui-macros 1 file
89.2%
1,127 / 1,26480.4%
FileLinesCoveredBranches
src/lib.rs
89.2%
1,127 / 1,264225 / 280
key-custody-cli 2 files
55.9%
128 / 22966.7%
FileLinesCoveredBranches
src/main.rs
0.0%
0 / 82–
src/lib.rs
87.1%
128 / 1474 / 6
short-id 1 file
100.0%
106 / 106100.0%
FileLinesCoveredBranches
src/lib.rs
100.0%
106 / 1068 / 8
wallet-setup 1 file
87.3%
89 / 10237.5%
FileLinesCoveredBranches
src/lib.rs
87.3%
89 / 1023 / 8
src/wasm.rsnot instrumented
static-assets 1 file
98.7%
75 / 76100.0%
FileLinesCoveredBranches
src/lib.rs
98.7%
75 / 764 / 4
Test tools
cli-wallet 13 files
56.4%
3,185 / 5,64843.8%
FileLinesCoveredBranches
src/bin/refresh_decoy_pool.rs tool binary
0.0%
0 / 40–
src/bin/cli/commands.rs
17.4%
232 / 1,33215 / 136
src/wallet.rs
27.0%
224 / 83013 / 78
src/bin/cli/editor.rs
47.6%
305 / 64130 / 76
src/lib.rs
73.5%
581 / 79016 / 36
src/bin/cli/main.rs
75.1%
127 / 16924 / 30
src/file.rs
88.3%
218 / 24714 / 20
src/faucet.rs
91.1%
246 / 2709 / 16
src/store.rs
93.0%
535 / 57512 / 14
src/amount.rs
93.9%
92 / 9816 / 16
src/meta.rs
94.0%
109 / 1165 / 8
src/bin/cli/args.rs
94.3%
395 / 41961 / 76
src/block_range.rs
100.0%
121 / 12112 / 12
engine-test-support 2 files
75.6%
867 / 1,14739.6%
FileLinesCoveredBranches
src/bin/fake-monerod.rs tool binary
0.0%
0 / 1810 / 22
src/lib.rs
89.8%
867 / 96619 / 26
mock-woocommerce 2 files
92.2%
942 / 1,02272.9%
FileLinesCoveredBranches
src/main.rs
0.0%
0 / 28–
src/lib.rs
94.8%
942 / 99435 / 48
Other reports
Browser checkout, embed, POS
95.1%
1,584 / 1,66679.0%

Measured with cargo-llvm-cov 0.9.1 and istanbul-lib-instrument 6.0.3. Files that can’t be instrumented are listed under their crate rather than counted as 0%.