Repository navigation
v1.0.0
Passkey profiles made with this version will need to be set up again after the next update. Use a password profile for anything you want to keep.
1.0.0
Install
- Chrome: Chrome Web Store
- Firefox: Firefox Add-ons
The stores review each version, so they can trail this release by a few days.
Verify or load by hand
The zips below are the same builds. Verify them with shasum -a 256 -c SHASUMS256.txt. To check that this repository's release workflow built them from this commit, run gh attestation verify nulo-chrome-1.0.0.zip --repo nulo-sh/nulo --signer-workflow nulo-sh/nulo/.github/workflows/release.yml --source-digest 402be49f7762edce3d25e27bdb575257c643d960 --deny-self-hosted-runners, and the same for the Firefox zip. To load the Chrome zip by hand, unzip it, open chrome://extensions, turn on Developer mode and click Load unpacked. The Firefox zip is unsigned; the signed build comes from Firefox Add-ons.
Bug Fixes
- Vite, follow-redirects, storybook, vitest, fast-uri, zod for sixteen advisories (#1113) (deps)
247cf6d - A stage-log dir a test makes lives until that test finishes (#1084) (e2e)
76f88c4 - A backup a test imports lives until that test finishes (#1074) (e2e)
6da0337 - Onboarding titles hold still; the presto step is done on open; icons paint once (#1027) (ui)
de50024 - One card in the hand-off window; the panel reopens on the result (#1026) (firefox)
20ac73e - Keep the local network's temp files inside the run dir (#1063) (e2e)
4cc0666 - Keep a busy pxe document instead of replacing it on a slow ping (#1048) (offscreen)
33c1e37 - Deletion warnings name imported accounts; class lookup flags every class (#1015) (profile)
756b6f9 - File pickers leave the toolbar panel; backup done state; contacts export wait (#964) (firefox)
1362efa - The bridge fixtures sign l1 transactions with their own anvil account (#996) (e2e)
623a337 - Approval cancels the window's unfinished fee estimates before it closes (#995) (execute)
9d04ada - A dapp window reads cached prices and never asks for a refresh (#983) (prices)
b3d6e0a - Hold every send the person pays to the fee it showed (#979) (send)
ef5336b - A send the network refused for good ends at once (#968) (activity)
5ac883b - Answer metadata from the session and the node; bind registered classes (#971) (dapp)
85edeb8 - A restored transaction row binds to the restored profile and its accounts (#970) (backup)
41ed6c5 - Fetch the list and prices with no browser cache, credentials or referrer (#969) (token-list)
f55b7b4 - A blank token symbol inside a sentence reads as a noun, not a gap (#958) (ui)
448c033 - A deep link holds on its log; the search case reads its gap while following (#955) (logs)
ca052f0 - Keep the phrase in the get started card; show the banner only after hide (#956) (home)
01c2791 - A blank token name or symbol shows the empty-value dash where it names the token (#950) (ui)
f5b7fd5 - A migration of a store no backup carries no longer refuses old backups (#951) (backup)
057d573 - Square the remaining corners; the json viewer's search box reads in the light theme (#945) (ui)
f73ce69 - Allow closes the connect window; an app not yet connected says so (#886) (connect)
e8fe932 - The notice card has square corners (#933) (ui)
21eb968 - The token add card shows the empty-value dash for a blank name (#930) (execute)
72c6379 - An import of a passkey already in this wallet says so (#915) (passkey)
973778c - Tell a person how to restore a passkey backup with no passkey check (#909) (backup)
18c40c5 - Say an amount is over the balance and clear its fee; restore names developer mode (#877) (send)
e25f1bd - The viewer's own follow scroll no longer resumes a stopped follow (#925) (logs)
e6a68cd - The token add card reads as labelled rows while it loads (#896) (execute)
33c0aa1 - A rejected dapp send reads cancelled; record who chose a transaction's fee (#892) (tx)
4aa9d1a - Error and refusal text in
--txt-danger, aa on the light theme (#878) (ui)2439933 - Filter panels from the keyboard, closed when tab leaves them (#868) (logs)
60fde7e - A dapp send names its call before its fee estimate, so a failure keeps it (#860) (activity)
2a5960d - A balance that covers the typed amount asks for its fee (#861) (send)
691e69e - Left-align the failed token preview; restore clause for held accounts (#853) (execute)
f214e5c - Logs toolbar keys, its menu items, the recovery close, holdings error line (#852) (ui)
d0551f7 - Five list rules take home's; a dropped backup export stops before its keys (#848) (popup)
ce48691 - Keyboard send and receive, ghost rows the loaded height (#827) (popup)
948670c - Register protocol fpcs outside the fpc lock so a reset never waits (#842) (fpc)
4f99807 - Send search keys past vue's listener guard; the countdown close on button (#833) (settings)
4ae3291 - Name the fee method by the fee contract's address (#822) (tx)
0c340d3 - Start on a dead custom node, export a paused reset's accounts, re-ask send (#814) (wallet)
21ce05c - Open the logs menu, reveal verb; close three shipped fixes (#811) (popup)
97ffa08 - Show the fee card as a skeleton while it reads balances (#802) (send)
7eada4c - Fee method, fee units, settings title, fixed token hero (#788) (popup)
b53e1d4 - A dapp token add stores the details its window showed; clean token text (#795) (tokens)
767789b - Incoming chip wraps where it does not fit, app-set fee in one sentence (#793) (popup)
8a05c59 - Seven small defects: labels, wraps, log follow, copy, feed, bars (#789) (popup)
c8a423f - Bind an allow's session row to the profile it was given under (#772) (connect)
2df384c - Refuse an inner-hash authorization intent naming the signing account (#738) (dapp)
e8da7b5 - Keep restored imported accounts until their network is added (#739) (backup)
5664b9f - A nameless dapp keeps its chip when it ends; holdings waits for prices (#725) (ui)
a10a8ac - Name a paused reset's imported accounts; hold endpoint edits while it waits (#720) (network)
9d429cb - One vocabulary for a call; the grant card labels only what it read (#721) (activity)
ec40515 - Keep the authorization registry's grant functions to the wallet (#716) (dapp)
dc4a88e - Log clear, phrase error, build env guard and locked price refresh; docs match the code (#713)
356004c - Discovery admits only secure dapp origins and localhost (#712) (wallet-sdk)
34d9708 - Chain 0 is the local l1 on a loopback node; endpoint docs match the code (#685) (network)
bdb61a1 - Bind transfers to their token, record every broadcast, verify revokes (#691) (execution)
eb41255 - Key note receipts by note hash; keep local storage off content scripts (#692) (storage)
b704c0f - Display-only token hero, selectable header address, dapp chip, holdings, toasts (#678) (ui)
e6a3b09 - Check the chain on every call, bind a contract's key, roll back unlanded rows (#679) (dapp)
093fa10 - A dApp transfer's chips on one line; the journal App row breaks anywhere (#650) (activity)
623fc97 - Selectable text, back keeps scroll, 2 s success toasts, display-only home hero (#642) (ui)
f695dea - One-line activity rows, a fixed hero over a scrolling middle, a wrapping app row (#633) (home)
eb5dc14 - Read a missing price as unavailable, close chain-endpoints (#622) (home)
645cb1f - Dependency logs at warn, pxe frame logs drop 32-byte values, summary one list back (#617)
388367b - Bind key exchange to its discovery, title calls by name, own class copy first (#603) (wallet)
3dc5a06 - Read a dApp call's arguments only when they encode back to their fields (#619) (execute)
c4728e2 - Move the viewers' styles into shadow roots, drop unsafe-inline (#609) (csp)
493ff49 - Network name toggle, export names, json window lock, second duplicate warning (#610) (ui)
e2ab483 - App fee legend while estimating, queue sponsored sends (#608) (wallet)
a433c20 - Bound replies and backup rows; admit discovery only in the sdk shape (#578) (wallet)
ea8827f - Keep the tx disclosure rows at full strength on hover; regenerate store art (#573) (ui)
78b4b75 - Sponsor address check on edit, cap refusal words (#532) (wallet)
c5e9c8e - Stop node retries while a profile or chain is torn down; drop a dead rpc (#554) (wallet)
ec0204e - Keep cold imports off test timeouts and scale the e2e fee ladder (#533) (ci)
4aa0602 - Move the remaining outline-grey text to the secondary tone (#530) (ui)
71f98db - Name a token address with no contract; unlock closes any error toast (#531) (popup)
6a766f1 - Refuse hidden url characters, allow plain http only to localhost (#506) (network)
110446a - Page 17 follow-ups: link hover, import snack, send focus, contrast, singulars (#495) (ui)
c7c5ad3 - Page 15 follow-ups: log rows, sponsor and name checks, refusals, sends (#490) (wallet)
d2bb014
Build / CI
- Split e2e shards by measured file time (#978) (e2e)
8663cdd - Guard network e2e egress; take artifacts by id; jscpd from the lockfile (#838)
19399c8 - One network lane workflow; a store dispatch smokes the published zips (#732)
77aad1e - One runner config, counted retries, shared gate scripts (#604) (e2e)
f2f434f - Load the extension's vite and vitest configs as es modules (#477) (extension)
777066c
Chore
- Release 1.0.0 (#1125) (main)
402be49 - Release 1.0.0 (main)
02d1c92 - From 1.0.0 every stored-shape change ships a migration (#938) (storage)
246c885 - Run the worktree's installed biome and commitlint; refuse before install (#910) (hooks)
2ac96fd - Regenerate the listing captures after the fixed home hero (#801) (store)
fba0360 - Sync main → dev (#510)
8459699
Documentation
- The firefox network lane is required on
maintoo (#1100) (ci)95da774 - Keep the heavy-long network job out of the pool, measured (#1010) (ci)
cef87d9 - Privacy 1.2.2 names what the list and price requests carry (#974) (legal)
4ebd206
Features
- Seed aztec mainnet as the default network, testnet beside it (#1117) (network)
715a561 - Terms 1.1 take effect at 1.0.0; a production readme banner (#893) (legal)
9458838 - Move to 6.0.0 and the reset testnet, rotate the account artifact (#1107) (aztec)
dda72e3 - Seal pinned tokens, fee picks and the selected account behind the worker (#1093) (storage)
0e4bec1 - Seal accounts, tokens, networks and fee payers at rest (#1072) (storage)
2b856d1 - Seal balances, authorizations and incoming receipts at rest (#1043) (storage)
5c35ca9 - Seal the journal and transaction history at rest (#1029) (storage)
11439b1 - Every page fits down to 240 px; the popup looks the same (#986) (ui)
b88c20a - A sidebar where passkey steps run in place (#889) (firefox)
5b16ead - Seal contacts and dapp sessions at rest under a per-profile key (#924) (storage)
6d507c6 - Windows count what a grant reaches; private fee juice card; flagged token add (#981) (consent)
e7192fa - Count each app's registrations per profile chain; one refusal once used up (#976) (dapp)
94cb43a - Close the windows a restart ends and tell apps before the lock's restart (#944) (wallet)
bf6a25f - Fast-lane tab, recovery phrase step and home's get started card (#743) (onboarding)
e36474a - Restart the wallet when a lock cannot be saved (#907) (wallet)
a51ebd2 - The arrival of a new default network on existing profiles (#905) (network)
b97eae8 - Register every stored shape and guard its schema snapshot (#890) (storage)
38c449d - Offer every default network a profile was never offered when it opens (#882) (network)
ab5442d - Cap refused requests, stop a blocked token's scans, save a lock twice (#891) (wallet)
3c09ea5 - Apps grow a chain's distinct senders and accounts to at most 128 (#873) (pxe)
2f591dd - Advice once after the calls, none when refused; flag unreadable authorizations (#854) (execute)
25f2c63 - The cap's refusal reads as an app's; the fee card reads as it will (#855) (send)
1531e5f - Full dapp origin, "About" on app fees, token caveat, label mark (#806) (consent)
993b3ef - The window states a refused dapp send, and reject ends it as that refusal (#832) (execute)
fec6493 - In-flight dapp calls read as they will settle (#826) (activity)
8d9ff14 - The private and public marks become a shield and a globe (#812) (design)
c8aa037 - Fee window dollars, restore rows, holdings skeleton, call words (#805) (ui)
58e2b01 - Pending chip on grants, 11 px header chips, three 13 px wraps fixed (#782) (ui)
3818266 - One short reason per unreadable call, interface dotted, the advice once (#778) (execute)
2d9ba31 - The address row controls listing, and the app page follows the grant (#759) (connect)
9470d4e - Warn on export when imported accounts need an added network (#747) (backup)
1cff707 - One helper prints every fee as
~X FJ ($Y)(#733) (fees)f3dc18f - The flat bottom sheet, a light scrim, the full-height setting retired (#707) (ui)
76ccbd1 - Return an app-facing
executeUtilityresult; redact three log keys (#717) (execution)4ad2a80 - Return an app-facing
simulateTxresult; refuseprofileTx(#701) (execution)d4d2d34 - Retune the type scale app-wide, small caps in one role (#649) (design)
0fe841b - Draw the private and public marks and the network name row's edit glyph (#655) (design)
13d5f8d - Draw every icon in direction 2, retire icons.json and the material font (#641) (design)
111fe02 - Show the emoji check on every connection, remembered apps too (#631) (dapp)
fc510ef - Ask again when a dApp send's fee rises above the approved figure (#607) (execute)
98d51e8 - Find a setting by its title, description or a synonym (#613) (settings)
7fc8b89 - Show a public grant's arguments as the decoded rows it signs (#611) (execute)
5e2888b - Bind passkey backups to their passkey; read restored tokens from the chain (#598) (backup)
f6bd011 - Move focus to the title when the firefox permission row leaves with it (#599) (presto)
aa2cfca - Read a multi-call transaction as rows and authorizations (#594) (execute)
6349807 - Check each list entry against a public node before signing (#564) (token-list)
7697c37 - Ask Firefox for Presto's loopback permission in place of the step (#534) (presto)
5c27386 - Warn on a flagged token with a red row line and a banner (#526) (tokens)
66f34e3 - Show prices unavailable on a funded wallet when the price fetch fails (#509) (home)
2dcdad4 - Flag a token and refuse a list below a compiled floor (#489) (token-list)
afcfd71
Other
Performance
- Recipient suggestions show the first 50 matches and how many more match (#1099) (send)
7c65d15 - Icons drop their css v-bind, and a test refuses one in any component (#1080) (ui)
421bf33 - Settle every launch on its first-run surface, poll liveness at 200 ms (#1003) (e2e)
9057e1e
Refactor
- Drop the onboarding step's copy surface, banner status and style hash (#948) (presto)
05313d5 - One pair of profile-flow notices; developer rows take the shared plumbing (#817) (ui)
93e6eeb - Holdings, select token and send take home's balance-list rules (#781) (ui)
6e2f22d - One settings control row, detail hero line and hero observer (#779) (ui)
021bdc5 - Named fee and message parameters, one operation-trait table (#756) (execution)
b891848 - One fee card, handed Send's or the app windows' rule book (#755) (fees)
169550f - One journal mirror for Activity, Home and the token list (#752) (activity)
5ee6b8b - The balance-refresh outbox becomes its own class (#751) (incoming)
244badd - One balance mirror for Home, Holdings, Select token and Send (#748) (tokens)
49fba3d - Discovery in its own module, session holders in one registry (#741) (wallet-sdk)
689d093 - One
updateSettingfor display, privacy and developer (#737) (settings)46df7df - Retire the pre-opfs
IndexedDBcleanup, guard that no pxe store opens one (#731) (pxe)0ce0419 - One run object for the full-backup export; config restore via
restoreRows(#705) (backup)563b062 - Wait through the shared activation waiter, drop the copy (#703) (import)
2c0df3b - Break the fixture import cycles; split helpers by concern (#632) (e2e)
04b1007 - One confirm request helper; explicit backup selection and run fence (#623) (ui)
e021210 - Share deferred, exhaustive kind switches, composed schemas, drop dead paths (#595)
d461b05
Tests
- Drop the re-import and zero-gap restart behind two soak reds (#1105) (extension)
e0faa72 - The purge pins check both roots and await the purge's lock request (#1094) (account)
a2f9e7d - The rename-and-visibility case awaits the parked read and the queue (#1092) (account)
a552a61 - The reset and purge pins await the sweep with the registration parked (#1088) (fpc)
c49430a - The parked-send test waits for its record to read queued (#1087) (send)
6ec79be - The e2e-script tests leave no temp dir behind on any platform (#1085) (e2e)
9772278 - The 240 px gate fails a page that scrolls sideways inside its own scroller (#1031) (e2e)
d484908 - A real in-place update meets the arrival on both browsers (#1028) (e2e)
7eb5e6c - The full backup's done state and working card are checked at 240 px (#1025) (e2e)
60ecd6c - The network e2e build scans incoming and re-reads finality every 10 s (#1021) (e2e)
b20260c - Firefox all-sites access keeps loopback granted with both 127.0.0.1 toggles off (#954) (e2e)
7ef85e9 - Remaining waits and builders on shared helpers; incoming scenarios on the real repo (#953)
284543d - End the stalled stub's held calls with a refusal, not a reset (#916) (e2e)
817cce9 - Read the terminal card once the page it names has rendered (#913) (e2e)
d025d8e - Update a populated 0.31.0 install in place on both browsers (#912) (e2e)
7f1aa16 - Capture mode refuses a hidden page; the reconnect case fronts its wallet (#908) (e2e)
eb0dd17 - Send unit-test events past vue's attach-time guard (#906) (extension)
a36fd24 - Viewers-csp reads the follow and the hold where the viewer judges (#902) (e2e)
dc94581 - A reply to a request chrome cancelled is no interception failure (#876) (e2e)
b620822 - Fail the guard's close on a node call the interception missed; fix guard docs (#845) (e2e)
ced2c51 - Read the fence-entry and amount-callers guards through the shared walker and parser (#830)
5a5791f - Wait for the copy snack to leave before about's foot (#829) (e2e)
fbe440c - Make the balance-row gap with the worker stopped (#813) (e2e)
a4edec2 - Fix four e2e reds at their cause; run the passkey import row in ci (#783) (e2e)
3fe891a - Await causes not turn counts; one e2e poll helper; shared storage and balance builders (#757)
18d29f2 - One source walker and ts tokenizer for the guards; one approval-window harness (#706)
138e0de - Observe the network identifier sites and assert their coverage (#708) (e2e)
5653e89 - One owner per fixture flow; the canaries share their choreography (#644) (e2e)
1b93cbf - Observe the smoke identifier sites and assert their coverage (#621) (e2e)
966bbde - Open the execute details before reading the discovered authwit (#601) (e2e)
5ec3225 - Run the delegated-authwit send and assert its discovered transfer row (#574) (e2e)
cadc11c