222 KiB
Changelog
All notable changes to the Bitcoin Research Kit (BRK) project will be documented in this file.
This changelog was generated by Claude Code
v0.2.3 - 2026-03-26
New Features
brk_computer
- Added new
investingmodule with complete Dollar-Cost Averaging (DCA) and lump-sum investment analysis — computes DCA stack (cumulative sats purchased at $100/day), cost basis, returns, and CAGR by rolling period (1w, 1m, 3m, 6m, 1y through 10y); lump-sum stack and returns by rolling period; and DCA stack, cost basis, and returns by year class (2015 through 2026). Extracted frommarket::dcainto a standalone top-level module with parallel import and compute (source) - Added
RealizedEnvelopeindicator that computes the tightest percentile bounds across 10 pricing models (realized price, investor price, STH/LTH variants, cointime vaultedness/activity/true market mean/cointime price), producing 8 envelope price bands (0.5th through 99.5th percentile), a zone index (-4 to +4) based on spot price position relative to envelope bands, and a composite score (-40 to +40) summing band crossings across all models (source) - Expanded
RatioPerBlockPercentilesfrom 6 to 8 percentile bands, adding 0.5th and 99.5th percentiles alongside the existing 1st/2nd/5th/95th/98th/99th —ExpandingPercentilesFenwick tree computation also widened from 6-quantile to 8-quantile output (source) - Consolidated timestamp data into a new
indexes::timestamp::Timestampsstruct — movedtimestamp_monotonic,date, and per-resolution timestamp lookups fromblocks::time::Vecsinto the indexes module, making timestamp data accessible without depending on the blocks module (source)
brk_indexer
- Added
take_all_pending_ingests()to batch all KV store puts/deletes into closures that can be executed on a background thread, enabling the indexer to hand off fjall store commits torun_bg()instead of blocking the main indexing loop (source) - Extracted
stamped_write()fromflush()so vec stamping can happen on the main thread while compaction and store ingests run in the background (source)
brk_store
- Added
take_pending_ingest()method that drains buffered puts/deletes and returns aSendclosure for background ingestion into the fjall keyspace (source)
website
- Added range preset buttons (1w, 1m, 3m, 6m, 1y, 4y, 8y, YTD, all) to the chart that automatically select the appropriate sub-day resolution index (30min through 1w) and scroll the visible range to that time window (source)
- Added value-dependent coloring support (
colorFn) for histogram and baseline chart series, enabling per-bar colors based on data values (source) - Added "Realized Envelope" chart to market indicators showing 8-level percentile price bands as dashed lines, a color-coded zone index histogram, and a score baseline (source)
- Added
percentileBands()andpriceBands()shared helpers for displaying 8-level percentile bands with dedicated colors per level, reusable across ratio and price chart types (source) - Added subtle grid lines to charts using a new
offBordercolor variable (source)
Internal Changes
brk_computer
- Switched all module
compute()methods to usedb.run_bg()for background compaction instead of synchronousdb.compact(), and addeddb.sync_bg_tasks()at compute entry to await prior background work — applies to blocks, cointime, distribution, indicators, inputs, investing, market, mining, outputs, pools, positions, prices, scripts, supply, and transactions (source) - Removed
market::dcasub-module — DCA types (ByDcaClass,ByDcaPeriod,ByDcaCagr) and computation logic moved to the new top-levelinvestingmodule;market::returnsnow importsByDcaPeriodfrominvesting(source) - Removed
blocks::timesub-module —timestamp_monotoniccompute logic and per-resolution timestamp imports relocated toindexes::timestamp::Timestamps(source) - Changed
lookback::compute()to take&indexes::Vecsinstead of&time::Vecs, sourcing monotonic timestamps from the indexes module (source) - Changed
market::compute()parameter order: now takes(prices, indexes, blocks)instead of(indexes, prices, blocks)(source)
brk_indexer
- Moved indexer store ingest and fjall persist to background via
run_bg(), running compaction, store commit, and fjallSyncDatapersist concurrently with the next indexing batch (source)
brk_client
- Added
Pct0Pct1Pct2Pct5Pct95Pct98Pct99PatternreplacingPct1Pct2Pct5Pct95Pct98Pct99Patternto include the new 0.5th and 99.5th percentile bands (source) - Added
SeriesTree_Investingwith full period/class sub-trees for DCA stack, cost basis, returns, CAGR, and lump-sum series (source) - Added
SeriesTree_Indicators_RealizedEnvelopewith percentile price bands, index, and score series (source) - Added
SeriesTree_Indexes_Timestampwith monotonic and per-resolution timestamp series (source) - Removed
dateandtimestamp_monotonicfromSeriesTree_Blocks_Time, simplified to only exposetimestampas a per-resolution pattern (source)
brk_query
- Updated all mining query endpoints (
day1_iter,difficulty,epochs,hashrate) and series timestamp resolution to read fromindexes.timestampinstead ofblocks.time.timestamp(source)
website
- Refactored investing chart options to use the new
investingtree path instead ofmarket.dca(source) - Added dedicated percentile color palette (
_0_5through_99_5) replacing the previous 6-color scheme with 8 distinct colors (source) - Added
createRatioChart()andgroupedWindowsCumulative()shared chart builders for reuse across ratio-based chart options (source)
docker
- Switched health check from
curl http://localhost:3110/healthtopgrep -x brk, replacingcurlpackage dependency withprocpsand reducing start period from 60s to 10s (source)
workspace
- Bumped Rust toolchain from 1.94.0 to 1.94.1 (source)
- Bumped
quickmatch-jsfrom 0.4.0 to 0.4.1 (source)
v0.2.2 - 2026-03-23
New Features
website
- Created a comprehensive LLM-readable API reference (
llms-full.txt) documenting every endpoint with curl examples, response shapes, parameter descriptions, and series categories — enabling LLM agents to discover and use the BRK API via the llms.txt standard (source) - Rewrote
llms.txtfrom a minimal overview into a structured quick-start guide with live links to key endpoints (search, series data, blocks, transactions, addresses, fees, live price) and links to the full reference, OpenAPI specs, and interactive docs (source) - Added
llms-full.txttorobots.txtas a sitemap entry so crawlers and LLM agents can discover it (source)
brk_server
- Added Open Graph and Twitter Card meta tags to the Scalar API documentation page, providing proper title, description, and image for social media link previews (source)
- Renamed the API docs page title from "BRK API" to "BRK API — Bitcoin Research Kit" with a richer meta description emphasizing the free, no-auth nature of the API (source)
Internal Changes
workspace
- Re-enabled
cargo build --workspace --releasein the release script (was previously commented out) (source)
v0.2.1 - 2026-03-23
Breaking Changes
brk_rpc
- Made
corepcthe default feature —brk_rpcnow uses thebrk-corepc-clientRPC backend by default instead of requiring explicit feature opt-in; users relying onbitcoincore-rpcmust now explicitly enable it (source)
v0.2.0 - 2026-03-23
This is a major architectural release. The most significant changes are:
-
Self-contained, oracle-only pricing: The computation pipeline no longer uses exchange APIs for price data. All prices are now derived on-chain via the
brk_oraclecrate from block 550,000 onward, with pre-computed historical prices embedded for earlier blocks.brk_fetcherremains as a crate but is no longer used bybrk_computerorbrk_cli. Bitcoin Core is now the only runtime dependency — the toolkit runs fully offline and produces deterministic, reproducible results. -
Height-only storage: All series now store only the per-block (height-indexed) vec on disk. Previously each series stored both a height vec and a date-indexed vec. All non-height resolutions (minute10 through year10, halving, epoch — 15 total, up from 8) are now computed lazily on demand from the height data using
LazyAggVecwith flat height-to-period mappings. This roughly halves on-disk vec count while nearly doubling the number of available resolutions. -
Flat index architecture: The old cascading index hierarchy (height → date → week → month → quarter → year → decade) is replaced by a flat system where every period type maps directly to Height. This eliminates intermediate stored mappings and enables sub-day resolutions (10min, 30min, 1h, 4h, 12h) that were previously impossible.
-
Profitability cohorts: New UTXO bucketing by unrealized profit/loss percentage — 25 ranges from ">1000% in profit" to "90-100% in loss", plus 14 aggregate profit thresholds and 9 loss thresholds, powered by a 190K-bucket Fenwick tree for O(log N) per-block computation.
As a consequence of height-only storage, temporal aggregation shifted from date-based (daily sum, daily last, daily cumulative) to rolling windows (24h, 1w, 1m, 1y) computed from height data using precomputed lookback start positions (CachedWindowStarts). Most series now expose a block value, cumulative sum, and RollingComplete (rolling sums + rolling averages + rolling distribution with min/max/median/percentiles per window) — all derived from the single height vec.
Resolution data is served through a popularity-based caching layer: up to 256 height-source vecs are cached in memory with LRU eviction based on access frequency, while period-to-height index mappings are always cached since they're small and shared across all series.
Breaking Changes
brk_types
- Renamed all
Address/Addressestypes toAddr/Addrsacross the entire public API:Address→Addr,AddressBytes→AddrBytes,AddressHash→AddrHash,AddressStats→AddrStats,AddressChainStats→AddrChainStats,AddressMempoolStats→AddrMempoolStats,AddressParam→AddrParam,AddressValidation→AddrValidation,AnyAddressIndex→AnyAddrIndex,FundedAddressData→FundedAddrData,EmptyAddressData→EmptyAddrData, etc. (source) - Renamed all
Metric/Metricstypes toSeries:MetricParam→SeriesParam,MetricData→SeriesData,MetricOutput→SeriesOutput,MetricCount→SeriesCount,MetricSelection→SeriesSelection,MetricsPaginated→SeriesPaginated,MetricWithIndex→SeriesNameWithIndex(source) - Renamed
DateIndextoDay1and removedDecadeIndex,WeekIndex,MonthIndex,QuarterIndex,SemesterIndex,YearIndex— replaced with a comprehensive resolution system:Minute10,Minute30,Hour1,Hour4,Hour12,Day1,Day3,Week1,Month1,Month3,Month6,Year1,Year10(source) - Renamed
DifficultyEpochtoEpochandHalvingEpochtoHalving(source) - Renamed
CentsUnsignedtoCentsandCentsUnsignedCompacttoCentsCompact(source) - Adopted snake_case for all module file names (e.g.
blockinfo→block_info,blocktimestamp→block_timestamp,feeratepercentiles→feerate_percentiles,txstatus→tx_status,poolslug→pool_slug, etc.)
brk_computer
- All series now store height-indexed data only on disk — previously each metric stored both a
height: EagerVecand adateindex: EagerVec(and sometimes cumulative/sum variants at each level). NowPerBlock<T>hasheight: EagerVec+resolutions: Box<Resolutions<T>>where all 15 resolutions areLazyAggVecinstances computed on demand. This roughly halves the on-disk vec count per series (source) - Replaced cascading index hierarchy with flat height-to-period mappings — old system chained height→dateindex→weekindex→monthindex→yearindex→decadeindex; new system maps every period type directly to Height via
EagerIndexes, enabling all resolutions to derive from height data without intermediate stored vecs (source) - Restructured
internal/SDK fromsingle/multihierarchy to concept-oriented modules:per_block/,per_tx/,algo/,transform/,containers/,indexes/(source) - Moved
blocks/mining/andblocks/rewards/into a dedicated top-levelmining/module withrewards/andhashrate/sub-modules (source) - Moved
market/indicators/to a top-levelindicators/module with expanded scope (source) - Renamed
pricemodule topriceswith restructured sub-modules:by_unit.rs(multi-currency structs),ohlcs.rs(OHLC aggregation),compute.rs(oracle-based price computation) (source) - Renamed
cointime/pricingtocointime/prices(source) - Renamed
distribution/addresstodistribution/addranddistribution/cohorts/addresstodistribution/cohorts/addr - Replaced all
Clone-derivedVecsstructs with genericStorageModeparameter (Vecs<M: StorageMode = Rw>) across every computation module (blocks, transactions, market, distribution, supply, etc.) for type-safe read-only sharing - Removed
brk_fetcherdependency — price computation is now fully on-chain via the oracle, eliminating exchange API calls (Binance, Kraken) and the 12-hour retry/HAR-import fallback logic - Removed
traits/module (pricing traits) andutils.rs Computer::forced_importno longer accepts aFetcherparameter — signature simplified from(path, indexer, fetcher)to(path, indexer)- Restructured all market sub-modules with new type-safe containers replacing ad-hoc naming:
price_1w_sma→sma._1w,price_ath→high,price_drawdown→drawdown,price_returns→periods,price_ago→price_past, etc. - Restructured ATH vecs:
price_ath→high.cents,price_drawdown→drawdown,days_since_price_ath→days_since,max_days_between_price_aths→max_days_between(source) - Restructured DCA vecs: split into
PeriodVecs(stack, cost_basis, return, cagr, lump_sum) andClassVecs(stack, cost_basis, return), removing explicit days-in-profit/loss and min/max return fields (source) - Restructured volatility vecs: replaced individual
price_Xw_volatility,sharpe_Xw,sortino_Xwfields withWindows<LazyPerBlock<StoredF32>>(source) - Restructured returns vecs: replaced individual period fields with
ByLookbackPeriod<PercentPerBlock>, addedsd_24h: Windows<StdDevPerBlock>replacing explicit 1w/1m/1y standard deviation and downside fields (source) - Restructured range vecs: replaced 8 individual min/max price fields with
PriceMinMaxVecscontainingmin/maxgroups, and added choppiness index asPercentPerBlock(source) - Restructured moving average vecs: split into
SmaVecsandEmaVecsusingPriceWithRatioPerBlock<M>for each period, added Mayer Multiple bands (_200d_x2_4,_200d_x0_8) (source) - Restructured burned supply: merged
opreturnandunspendableinto singletotal: AmountPerBlockCumulativewith inline computation (source) - Restructured transaction volume: replaced
sent_sum/received_sum/annualized_volumewith singletransfer_volume: AmountPerBlockCumulativeRolling, wrapped throughput metrics inWindows<PerBlock>(source) - Removed
distribution/compute/aggregates.rs— aggregate computation moved into metric tiers - Removed
distribution/range_map.rs— range mapping moved tobrk_types::RangeMap
brk_query
- Renamed
address()/address_txids()/address_utxos()methods toaddr()/addr_txids()/addr_utxos()(source) - Renamed
metricsquery module toseries(source) - Removed
resolved.rs— resolution handling moved inline
brk_server
- Renamed
/api/address/*routes andAddressRoutestrait toAddrRoutes(redirects preserved from old paths) (source) - Renamed
/api/series/*routes (previously/api/metrics/*) — legacy/api/metrics/*routes preserved as redirects (source) - Removed
brk_fetcherdependency - Removed
ClientfromAppState— server no longer holds a direct RPC client reference
brk_client
- Switched HTTP backend from
minreqtoureq - Removed
fetch_prices.rsexample
brk_fetcher
- Switched HTTP backend from
minreqtoureq
brk_rpc
- Added
corepcfeature integratingbrk-corepc-clientandbrk-corepc-jsonrpcas alternative RPC backends (source)
brk_cohort
- Renamed
AddressGroupstoAddrGroupswith renamed fields:ge_amount→over_amount,lt_amount→under_amount,ByGreatEqualAmount→OverAmount,ByLowerThanAmount→UnderAmount,ByAmountRange→AmountRange(source) - Renamed
ByAgeRangetoAgeRangewith renamed fields:up_to_1h→under_1h,from_15y→over_15y(source) - Renamed file names from concatenated (
by_age_range.rs,by_amount_range.rs) to snake_case (age_range.rs,amount_range.rs)
New Features
brk_computer
- Added
indicators/module computing on-chain indicators: Puell Multiple, RHODL Ratio, NVT Ratio, Thermocap Multiple, Supply-Adjusted CDD, Supply-Adjusted CYD, Supply-Adjusted Dormancy, Dormancy Flow, Stock-to-Flow, Seller Exhaustion Constant, and Gini coefficient (source) - Added
mining/module with dedicated hashrate computations: hash rate with 1w/1m/2m/1y SMAs, hash rate ATH and drawdown, hash price and hash value per TH/s and PH/s, hash price/value minimums and rebound metrics (source) - Added
mining/rewards/with coinbase rewards, subsidy, fee dominance, unclaimed rewards — each with block/cumulative/rolling views and sats/btc/usd units (source) - Added
market/technical/module implementing RSI with Stochastic RSI (RSI, StochRSI, K-line, D-line with configurable RMA/SMA periods) and MACD (fast/slow EMA, signal line, histogram) (source) - Added Fenwick tree (Binary Indexed Tree) data structure supporting O(log N) point-update, prefix-sum, and multi-target kth walk-down queries (source)
- Added
ExpandingPercentilestracker using Fenwick tree for O(log N) percentile queries with 0.1% resolution, supporting bulk-load initialization (source) - Added
CostBasisFenwick— 4-field Fenwick tree (all_sats, sth_sats, all_usd, sth_usd) for per-block accurate cost basis percentiles, supply density queries (±5% of spot price), and profitability range computation across 25 ranges with all/STH splits (source) - Added sliding distribution, sliding median, sliding window, and drawdown algorithms in
internal/algo/(source) - Added
Resolutions<T>— aPerResolutionof 15LazyAggVecinstances that lazily derive all supported resolutions from a single height-indexed source vec, using flat height-to-period mappings and a "last value in period" aggregation strategy (source) - Added
DerivedResolutions<T, S1T>— doubly-lazy resolution system forLazyPerBlockthat chainsUnaryTransformon top of source resolutions, enabling zero-storage derived series at all 15 resolutions (source) - Added popularity-based resolution caching:
CachedVecwrapping with a global budget of 256 slots, minimum 2 accesses before caching, and LRU eviction that replaces the least-accessed cached vec when a more popular one requests caching (source) - Added
prices/module withSplitByUnit(open/high/low/close in USD/cents/sats),OhlcByUnit, andPriceByUnitstructured types for multi-currency price access (source) - Added
ProfitabilityMetricscomputing per-block supply, realized cap, unrealized PnL, and NUPL across 25 profitability ranges plus 14 profit thresholds and 9 loss thresholds, each with all/STH splits (source) - Restructured distribution metrics into trait-based tiered system with
ActivityLike,RealizedLike,UnrealizedLiketrait hierarchies — each metric type has core/basic/minimal/full variants enabling flexible per-cohort metric composition (source) - Added
distribution/metrics/relative/sub-module with 6 variants:RelativeToAll,RelativeForAll,RelativeWithExtended,RelativeFull,RelativeExtendedOwnMarketCap,RelativeExtendedOwnPnlfor cohort-to-total ratio metrics (source) - Added
distribution/addr/activity.rstracking per-block address activity counts (receiving, sending, reactivated, both) globally and per address type, with rolling averages (source) - Added
distribution/addr/delta.rscomputing rolling address count deltas with change magnitude and basis-point rates (source) - Added
distribution/state/pending.rswithPendingDelta,PendingCapDelta,PendingInvestorCapDeltafor batched cost basis state updates - Added maturation tracking to age cohorts:
tick_tock_next_blocknow returnsAgeRange<Sats>tracking how many sats mature from each age range into the next older one per block, stored asmatured: AgeRange<AmountPerBlockCumulativeRolling>onUTXOCohortswith cumulative and rolling window views for all 21 age ranges (source) - Added
pools/major.rsandpools/minor.rsseparating major pools (with cumulative rolling rewards and dominance rolling windows) from minor pools (blocks mined with cumulative rolling and dominance ratio) (source) - Added
blocks/lookback.rsfor precomputed rolling window lookback start vectors used across all windowed computations - Added
cache_budget.rssystem for managing memory cache allocation across vecs - Added
tree.rsexample for inspecting the full series tree structure
brk_types
- Added 11 new resolution index types expanding from 8 resolutions (day, week, month, quarter, semester, year, decade, difficulty epoch) to 15:
Minute10,Minute30,Hour1,Hour4,Hour12(sub-day — entirely new),Day3,Month3,Month6(new intermediate periods),Year10(replaces decade), plus renamedDay1(was DateIndex),Week1(was WeekIndex),Month1(was MonthIndex),Year1(was YearIndex),Halving(was HalvingEpoch),Epoch(was DifficultyEpoch) (source) - Added
FromCoarsertrait enabling automatic derivation of finer-grained resolution data from coarser sources (source) - Added basis points types:
BasisPoints16,BasisPoints32,BasisPointsSigned16,BasisPointsSigned32for precision ratio/percentage storage without floating point (source) - Added
StoredI64type for signed 64-bit stored values (source) - Added
RangeIndexandRangeMaptypes for range-based lookups (source) - Added
SearchQuerytype for series full-text search (source) - Added
SeriesInfotype carrying metadata about each data series (source) - Added
DataRangeas a dedicated type (previously inline) (source) - Added
pools-v2.jsonwith expanded mining pool identification data - Added
SeriesListandSeriesNametypes for typed series enumeration
brk_server
- Added structured JSON error responses with RFC 9457-inspired format:
type(error category),code(machine-readable),message(human-readable),doc_url(link to API docs) — covers all BRK error variants with proper HTTP status mapping (source) - Added
X-Response-Timeheader (in microseconds) on all responses for latency observability - Added Vary header consolidation middleware merging duplicate Vary headers into a single comma-separated value
- Added custom panic handler extracting panic messages into structured JSON error responses instead of empty 500s
- Added
ContentEncodingmodule with server-side content encoding negotiation (zstd > br > gzip > identity) and transparent pre-compression of cached responses via brotli, flate2, and zstd (source) - Added pre-compressed Brotli encoding for the Scalar API documentation viewer (
scalar.js.br) (source) - Extracted
finish_openapi()andgenerate_bindings()as public functions for external use (source) - Made
ApiRoutestrait public for external router composition
brk_query
- Added
list.rsexample for enumerating all available series names (source)
brk_cohort
- Added
ProfitabilityRange<T>with 25 buckets from ">1000% in profit" to "90-100% in loss", with boundary prices computed dynamically from spot price viacompute_profitability_boundaries()(source) - Added
Profit<T>with 14 aggregate "at least X% profit" thresholds (prefix sums over ranges) andLoss<T>with 9 aggregate "at least X% loss" thresholds (suffix sums over ranges) (source) - Added
AgeRange::from_array()constructor for building age range structs from fixed-size arrays (source) - Derived
TraversableonAddrGroupsvia proc macro (previously manualTraversableimpl onAddressGroups)
brk_traversable
- Added
iter_any_visible()method to theTraversabletrait — allows structs to expose all vecs for disk operations while hiding some from the public series tree (source) - Added
Traversableimpls forLazyAggVec,LazyDeltaVec,ReadOnlyCompressedVec,ReadOnlyRawVec— enabling lazy and read-only vecs to appear in the series tree
brk_traversable_derive
- Added
#[traversable(hidden)]attribute at struct and field level — hidden structs return empty tree nodes and emptyiter_any_visible()while still participating initer_any_exportable()for disk I/O (source) - Added automatic
ReadOnlyClonederive generation — the proc macro now generatesimpl ReadOnlyClonealongsideimpl Traversable, mappingRwtoRostorage mode for all fields withStorageModeparameters - Added multi-level
wrappaths (#[traversable(wrap = "a/b")]) for creating nested tree structure - Preserved struct field declaration order in tree key ordering (previously normal and flattened fields were separated)
brk_oracle
- Lowered
START_HEIGHTfrom 575,000 to 550,000 — oracle begins computing 25,000 blocks earlier (source)
brk_reader
- Added timestamp-based pre-filtering in block decoding — blocks are skipped by header timestamp before computing block hash, avoiding expensive RPC calls for out-of-range blocks (source)
- Added
find_magic()function with XOR-decoded sliding window for blk file scanning, replacing byte-by-byte loop - Replaced batch-based block decoding pipeline (accumulated blocks, sleep-based backpressure) with direct
par_bridge()streaming — simpler, no sleep delays
brk_bindgen
- Added template-based pattern system with discriminator support —
try_detect_template()handles suffix discriminators (e.g.ratio_sdvsratio_sd_4y) and embedded discriminators (e.g.ratio_pct99_bpsvsratio_pct1_bps) for smarter client code generation (source) - Added two-pass field part analysis: first pass collects instance analyses bottom-up, second pass fills mixed-empty field parts using shortest leaf names
- Added
owned_expr(),disc_arg_expr(),template_expr()toLanguageSyntaxtrait for language-specific discriminator formatting - Fixed pattern normalization to only erase leaf types when all leaves share the same type (prevents incorrect genericization of mixed-type signatures)
brk_client (Rust)
- Switched HTTP backend from
minreqtoureq - Removed
fetch_prices.rsexample
brk_client (JavaScript)
- Added
tests/consistency.js— verifies all series sharing the same index have the same length (catches stale state after reorg rollback) - Upgraded
quickmatch0.3.1 → 0.4.0: expanded default separators (_- :/), added prefix indexing and compound word indexing (e.g. "hashrate" now matches "hash_rate"), addedminScorethreshold to reduce false positives, replaced per-match object allocation with pre-allocatedUint32Arrayscoring
brk_client (Python)
- Added
DateSeriesDatasubclass with date-aware methods (.dates(),.date_items(),.to_date_dict()) — date-based indexes returnDateSeriesData, non-date indexes returnSeriesData - Added new API methods:
get_series_data(),get_series_latest(),get_series_len(),get_series_version(),date_to_index() - Added
DetailedSeriesCountwithdistinct_series,total_endpoints,lazy_endpoints,stored_endpointsfields - Added
ErrorDetail/ErrorBodytypes matching the server's structured error responses - Range parameters now accept
dateanddatetimeobjects in addition to integers
Internal Changes
brk_computer
- Rewrote the
internal/SDK: replaced thesingle/multihierarchy (160+ files with per-combination types likelazy_binary_computed_full,value_lazy_sum_cum,ComputedFromHeightAndDateLast,ComputedFromHeightSumCum) with a composable system organized by concept (per_block/,per_tx/,algo/,transform/,containers/,indexes/). Concrete example: block count went from ~15 on-disk vecs (ComputedFromHeightSumCum+ 4 rolling start vecs + 4ComputedFromHeightLast) down to ~2 on-disk vecs (PerBlockCumulativeRolling) with all resolutions lazy - Added
UnaryTransformtrait system ininternal/transform/replacing ad-hoc closures:arithmetic.rs,bps.rs,currency.rs,derived.rs,ratio.rs,specialized.rs - Added container types in
internal/containers/:per_resolution,windows,windows_from_1w,windows_to_1m,window_24h,distribution_stats,constant,percent - Added per-block type variants:
PerBlock,PerBlockFull,PerBlockCumulative,PerBlockCumulativeWithSums,PerBlockRolling,PerBlockAggregated,LazyPerBlock,LazyPerBlockRolling, plusAmountPerBlock,AmountPerBlockCumulative,AmountPerBlockCumulativeRolling,AmountPerBlockWithDeltas,FiatPerBlock,PercentPerBlock,RatioPerBlock,PerBlockRollingAverage,PercentRollingWindows,PriceWithRatioPerBlock,StdDevPerBlock - Added rolling types:
RollingComplete,LazyRollingComplete,RollingDistribution,LazyRollingSums,LazyRollingDeltasFromHeight - Added per-tx types:
PerTxDerived,PerTxDistribution,LazyPerTxDerived,LazyPerTxDistribution,LazyPerTxDistributionTransformed - Added eager/lazy index helpers in
internal/indexes/ - Introduced
CachedWindowStartsfor shared precomputed lookback window start positions across all modules - Split distribution UTXO cohort vecs into
core.rs,minimal.rs,type.rssub-modules for tiered storage - Added
sum_othersmacro in distribution metrics for computing aggregate cohort fields by summing constituent cohorts - Removed
brk_fetcherdependency — oracle prices are computed directly in theprices/module - Removed
distribution/compute/aggregates.rs— aggregate computation replaced bycompute_from_stateful/compute_sum_of_otherswithin each metric tier
brk_indexer
- Bumped reindex version 24 → 25 (forces full reindex on upgrade)
- Added
StorageModegeneric parameter onIndexer<M>andVecs<M>withReadOnlyCloneimpl producingIndexer<Ro>for type-safe read-only sharing - Parallelized block processing pipeline: inputs and outputs now processed in parallel via
rayon::join, finalization of outputs+inputs runs in parallel with tx metadata storage - Added
BlockBuffersstruct with reusableFxHashMap/FxHashSetallocations cleared per block, eliminating per-block allocation overhead - Added
AddrTypeVecs<I, B>andScriptTypeVecs<I>generic sub-structs for uniform per-type vec organization, replacing individually named fields - Added
TxMetadataVecssub-struct withsplit_for_finalize()for separating tx metadata vecs from index vecs during parallel finalization - Added
AddrReaderswithscript_pubkey(&self, output_type, type_index) -> ScriptBuffor typed address-to-script lookup - Block size and weight now computed from pre-computed
ComputedTx.base_size/total_sizefields instead of re-serializing transactions - Removed 512MB thread stack size workaround — main function runs directly
- Added
schemarsandserdedependencies for OpenAPI-compatible schema generation
brk_server
- Applied
NormalizePathLayeras an outer wrapping layer (viaServiceExt) instead of an inner router layer, fixing route matching for trailing slashes - Reduced in-memory response cache from 5,000 to 1,000 entries
- Moved
CatchPanicLayerafter compression in the middleware stack with a custom handler - Restructured response caching to include content encoding in cache keys, pre-compressing responses per-encoding for cache-friendly serving
- Added
brotli,flate2, andzstddependencies for server-side compression - Added
color-eyrefor panic reporting
brk_query
- Removed thread stack-size workaround in the query example — main function now runs directly
- Added
parking_lotandserde_jsondependencies
brk_rpc
- Added
serdeandserde_jsondependencies forcorepcfeature
brk_store
- Removed
insert_if_needed()andremove_if_needed()— callers now use plaininsert()/remove() - Changed
clear_caches()to drop allocations entirely (FxHashMap::default()) instead of clearing in place
brk_reader
- Removed batch-based block decoding pipeline — simplified to streaming
par_bridge() - Removed
AnyBlockenum, replaced withdecode_block()standalone function - Added
find_magic()with XOR-decoded sliding window for efficient blk file scanning
brk_logger
- Replaced
EnvFilterwithTargetsfor simpler log filter configuration - Separated
LOG(default level) fromRUST_LOG(full directive control) environment variables - Added
corepc=offto default filter list
brk_error
- Added
brk-corepc-clientandureqerror conversions, removedminreqerror conversions
brk_cli
- Removed
--fetchCLI flag andbrk_fetcherdependency — price fetching handled by the oracle - Removed 512MB thread stack size workaround
docker
- Switched base image from
rustlang/rust:nightlytorust:1.93-bookworm(stable, pinned) - Replaced
pgrep + nchealthcheck withcurl -sf http://localhost:3110/health - Removed
docker-build.shhelper script and docker-specific.dockerignore - Removed all
environment:variables fromdocker-compose.yml— configuration now viacommand:args only
scripts
- Added
pool_major_threshold.py— utility to determine major vs minor pool classification based on rolling dominance thresholds across multiple time windows
workspace
- Upgraded Rust toolchain to edition 2024
- Updated
.dockerignoreto excludedocker/directory
v0.1.9 - 2026-02-13
New Features
brk
- Added
oraclefeature flag re-exportingbrk_oraclefrom thebrkumbrella crate, making the on-chain price oracle available viabrk::oracle(source) - Added
brk_oracleto the crates table in the umbrella crate README (source)
Internal Changes
brk
- Added
brk_oracleto the Rust publish script ordering (source)
v0.1.8 - 2026-02-13
Breaking Changes
brk_types
- Renamed
Sats::is_round_btc()tois_common_round_value()and rewrote the algorithm: replaces a hardcoded array of 19 specific round sat values with a general integer-based approach usingilog10()to detect any value matchingd × 10^nwhered ∈ {1, 2, 3, 5, 6}(source)
brk_server
- Renamed
CacheStrategy::MaxAge(u64)toCacheStrategy::MempoolHash(u64), switching mempool endpoints from time-basedCache-Control: max-age=Nto content-addressed ETags derived from the next projected block hash (source)
New Features
brk_oracle
- Added new
brk_oraclecrate: a pure on-chain BTC/USD price oracle that derives the bitcoin price from round-dollar transaction output patterns ($1, $5, $10, ... $10,000) without any exchange data (source) - Algorithm maps outputs to a log-scale histogram (2,400 bins, 200 per decade), smooths with an EMA over a 12-block ring buffer, then slides a 19-point stencil representing round-dollar spikes to find the best-fit price with parabolic sub-bin interpolation
- Operates from height 575,000 (May 2019) onward; pre-oracle exchange prices for heights 0–630,000 included in
prices.txtfor bootstrapping - Median per-block error 0.10%, 95th percentile 0.55%; zero blocks exceed 10% error since 2022
- Inspired by UTXOracle by @SteveSimple, with per-block resolution, single-pass stencil scoring, and rolling EMA operation
brk_computer
- Enabled oracle price computation with full OHLC data at all period levels (date, week, month, quarter, semester, year, decade, height, difficulty epoch) (source)
- Added
live_oracle()method that seeds an oracle from the last committed price and replays recent blocks for real-time price estimation (source) - Added
market_cap_growth_ratemetric: 365-day percentage change of market cap (source) - Added
realized_cap_growth_ratemetric: 365-day percentage change of realized cap - Added
cap_growth_rate_diffmetric: lazy difference between market cap and realized cap growth rates - Added net sentiment computation for UTXO cohorts: computes greed minus pain per separate cohort, weighted average for aggregate cohorts, and dateindex for all cohorts (source)
brk_server
- Added server-side response caching via
get_or_insert()onAppState, backed byquick_cachewith 50ms guard timeout for request deduplication (source) - Added
GET /api/mempool/priceendpoint returning the current BTC/USD price in dollars, derived from on-chain round-dollar output patterns in the last 12 blocks plus mempool (source) - Added
CF-Connecting-IPheader detection for requests arriving from loopback addresses through Cloudflare, rewriting the socket address to apply non-loopback rate limits (source) - Switched address mempool endpoint to content-based cache invalidation using a hash of the address's mempool state
brk_query
- Added
live_price()method returning the oracle-derived BTC/USD price, seeded from the last committed price with replay of the last window of blocks and mempool transactions (source) - Added
address_mempool_hash()method returning au64hash of an address's mempool state for content-based cache invalidation (source)
brk_mempool
- Added
Snapshot::next_block_hash()returning a hash of the first projected block for content-based cache keys (source) - Added
Sync::next_block_hash()andSync::address_hash()for exposing content hashes at the sync layer (source)
brk_types
- Derived
HashonSatsfor use in content-based cache invalidation (source) - Derived
HashonAddressMempoolStatsfor per-address mempool hashing (source)
brk_client
- Added
get_live_price()method for the/api/mempool/priceendpoint (source) - Added
MetricsTree_Price_Oraclestruct exposing oracle price metrics (price_cents,ohlc_cents,split,ohlc,ohlc_dollars) - Added
market_cap_growth_rate,realized_cap_growth_rate, andcap_growth_rate_difffields toMetricsTree_Supply
website
- Replaced Kraken WebSocket price feed with HTTP polling to the oracle-based
/api/mempool/priceendpoint every 5 seconds, with re-poll on tab visibility change (source) - Added Oracle candlestick chart under the Market section showing on-chain derived BTC/USD price (source)
- Expanded Capitalization into a tree with Market Cap, Realized Cap, and Growth Rate sub-charts showing market cap growth rate, realized cap growth rate, and their difference
- Added dynamic color assignment via
at(index, length)for palette-aware spacing andseq(keys)for named color maps, replacing hardcoded color mappings across all chart options (source)
Internal Changes
brk_computer
- Flattened supply submodules (
circulating/,inflation/,market_cap/) into the parent supply module, inlining their logic directly intovecs.rs,import.rs, andcompute.rs(source) - Changed
CostBasisDistribution::serialize_iterto acceptmerged.into_iter()and write to a path variable
brk_server
- Centralized response caching in
state.rswithcached_json(),cached_text(), andcached_bytes()now accepting aUriparameter for server-side cache keying, removing per-handlerGuardResultboilerplate - Removed
ResponseExtended::new_text_cached()andnew_bytes_cached()in favor of inline handling in the state caching methods - Updated all API handlers to destructure
State(state)and pass&urifor cache keying
website
- Split monolithic
components.cssinto separate files:main.css,nav.css,search.css,chart.cssfor better organization - Converted chart option
topandbottomproperties from eager values to lazy functions with memoized evaluation for faster startup (source) - Refactored chart component: simplified pane management, converted legends from named object to array, consolidated time data into a single object with
setIndex()andfetch()methods (source) - Optimized navigation highlight tracking to only clear previously highlighted items instead of iterating all entries
- Removed shadow divs from HTML and
<div id="simulation">pane - Removed unused utility files (
ws.js,date.js,serde.js) and functions (range(),numberToDollars(),numberToPercentage(),createShadow(),localhost)
clients
- Bumped JavaScript and Python client versions
v0.1.7 - 2026-02-07
New Features
brk_computer
- Added
lower_price_bandmetric per cohort, computed as realized_price² / investor_price, representing a floor price estimate (source) - Added
upper_price_bandmetric per cohort, computed as investor_price² / realized_price, representing a ceiling price estimate - Added
LazyBinaryPriceFromHeightcomposite type for fully lazy binary price metrics providing both USD and sats representations at all time levels (source) - Added
DollarsSquaredDividebinary transform implementinga² / bfor Dollars values (source)
brk_types
- Added
Log200variant toCostBasisBucketfor logarithmic bucketing with 200 buckets per decade (source) - Added
From<CentsSigned> for i128andFrom<i128> for CentsSignedconversions for wider arithmetic operations (source)
brk_website
- Added ETag-based HTTP 304 Not Modified responses for HTML pages in release mode, reducing bandwidth by returning empty body when content hasn't changed (source)
- Compute and cache a hash-based ETag for index.html on first request, used for subsequent conditional requests (source)
website
- Added upper price band (I²/R) and lower price band (R²/I) series to the price comparison chart (source)
Bug Fixes
brk_types
- Fixed unrealized value calculation in cost basis distribution to compute
(spot - cost_basis) × supplyinstead ofspot × supply, correctly reflecting unrealized profit/loss per bucket (source) - Fixed
Dollars * Satsmultiplication to usei128intermediate values, preventing overflow on large values (source)
Internal Changes
brk_computer
- Moved price rounding logic and unrealized state cache from
CohortStateintoCostBasisData, encapsulating all cost basis concerns in a single structure (source) - Added
compute_unrealized_states()method onCostBasisDatathat combines cache management and unrealized computation in one call - Removed
CachedUnrealizedStatefrom public API, making itpub(super)only - Removed
range()method fromCostBasisData(unrealized computation now accesses the map directly) - Added binary transform constructors (
from_block_last_and_lazy_block_last,from_lazy_block_last_and_block_last,from_binary) across height, date, and height-derived lazy metric levels to support mixed computed/lazy binary operations
website
- Changed shared time data type from
number[]toMetricData<number>throughout the chart system, propagating stamp metadata alongside data - Added
lastTimeStamptracking to prevent redundant chart updates when time data hasn't changed
clients
- Bumped JavaScript and Python client versions
v0.1.6 - 2026-02-05
New Features
brk_types
- Added
CostBasisDistributionstruct with pco-compressed serialization/deserialization for storing price-to-sats distributions, and aformat()method supporting bucket aggregation and value type transformation (source) - Added
CostBasisBucketenum with 7 aggregation strategies:raw(no aggregation),lin200/lin500/lin1000(linear buckets by dollar amount), andlog10/log50/log100(logarithmic buckets per decade) (source) - Added
CostBasisValueenum with three output modes:supply(BTC at each price),realized(USD cost basis),unrealized(USD at spot price) (source) - Added
Cohort,CostBasisParams,CostBasisCohortParam, andCostBasisQuerytypes for cost basis API path and query parameters (source) - Added
round_to()andround_to_dollar()methods onCentsUnsignedandCentsUnsignedCompactfor rounding prices to N significant digits (source) - Implemented
FromStrforDatetype enabling parsing from "YYYY-MM-DD" format (source)
brk_computer
- Added daily cost basis snapshot writing for all, sth, and lth UTXO cohorts, persisting the merged price-to-sats distribution to disk per date for historical querying (source)
- Added configurable price rounding for cost basis data: UTXO cohorts use 5 significant digits and address cohorts use 4 significant digits, reducing unique price points for more efficient storage and aggregation (source)
brk_query
- Added cost basis query methods:
cost_basis_cohorts()to list available cohorts,cost_basis_dates()to list available dates per cohort,cost_basis_distribution()to retrieve raw data, andcost_basis_formatted()to get bucketed/value-transformed output (source)
brk_server
- Added three new API endpoints for cost basis distribution:
GET /api/metrics/cost-basis(list cohorts),GET /api/metrics/cost-basis/{cohort}/dates(list dates), andGET /api/metrics/cost-basis/{cohort}/{date}?bucket=&value=(get distribution data) (source)
brk_client
- Added
get_cost_basis_cohorts(),get_cost_basis_dates(), andget_cost_basis()methods to the Rust client for querying cost basis distributions (source)
brk_bindgen
- Added wildcard (
*) andObjecttype mapping toserde_json::Valuein Rust type generation (source)
Bug Fixes
website
- Fixed chart range restoration on Safari by wrapping the range-set logic in
requestAnimationFramefor browser compatibility (source)
Internal Changes
brk_computer
- Reorganized cost basis state storage: height-based snapshots now stored under
by_height/subdirectory, renamedcost_basis_datamodule todata - Moved pco compression dependency from
brk_computertobrk_typesfor reuse across crates - Refactored the K-way merge in aggregate percentile computation to collect merged entries with price deduplication during the merge pass
brk_error
- Added
pcofeature flag andPcoerror variant for pco compression errors (source)
workspace
- Added
*.csvto.gitignore
clients
- Bumped JavaScript and Python client versions
v0.1.5 - 2026-02-05
New Features
website
- Added in-memory data cache for chart metric and time data, enabling instant visual feedback when switching between chart indexes without re-fetching from the server (source)
- Implemented cache-first loading strategy: cached data is rendered immediately while fresh data is fetched in the background, making index switching feel instantaneous
Bug Fixes
website
- Fixed URL range being overwritten during chart initialization by adding an
initialLoadCompleteguard that prevents range persistence until the first data load completes, and resets on rebuild (source) - Fixed temporal dead zone (TDZ) error by moving zoom handler registration (
onZoomChange.add) to after series creation instead of before it (source)
Internal Changes
website
- Simplified showLine visibility calculation to use the already-tracked
visibleBarsCountvariable instead of re-reading the visible logical range from the chart
clients
- Bumped JavaScript and Python client versions
v0.1.4 - 2026-02-04
Breaking Changes
brk_computer
- Changed VOCDD (Value of Coin Days Destroyed) calculation to be supply-adjusted:
price × (CDD / circulating_supply)instead ofprice × CDD, accounting for growing supply over time (source) - Changed Reserve Risk calculation to use 365-day rolling median instead of 365-day SMA for VOCDD smoothing, providing more robust values resistant to outliers (source)
- Changed
net_sentimentcomputation for aggregate cohorts to use capital-weighted average of component cohorts instead of simple greed - pain formula, producing values that properly represent the weighted contribution of each cohort (source) - Changed drawdown computation formula from
(ath - current) / ath * -100to(current - ath) / ath * 100, where positive values now indicate performance above ATH and negative values indicate drawdown below ATH (source)
New Features
brk_computer
- Added
hash_rate_athmetric tracking the all-time high hash rate at each block (source) - Added
hash_rate_drawdownmetric showing percentage drawdown from hash rate all-time high (source) - Added
_30d_changemetric for all address type counts (p2pkh, p2sh, p2wpkh, p2wsh, p2tr, p2pk33, p2pk65, p2a), tracking 30-day percentage change in address counts (source) - Added
utxo_count_30d_changemetric to OutputsMetrics tracking 30-day percentage change in UTXO count per cohort (source)
brk_types
- Added
From<StoredU64>conversion forStoredF64enabling direct u64 to f64 stored value conversion (source)
Internal Changes
brk_computer
- Generalized
ComputeDrawdowntrait to work with any value types convertible to f64, not justClose<Dollars>(source) - Removed
NegRatio32transform (no longer needed after drawdown formula change) (source) - Separated net_sentiment computation into
compute_net_sentiment_heightfor separate cohorts andcompute_net_sentiment_from_othersfor aggregate cohorts (source) - Added
AddrCountVecsstruct grouping address count with its 30d_change metric (source) - Refactored aggregate UTXO cohort computation with
for_each_aggregatehelper method for cleaner code organization - Added unit tests for HODL Bank and Reserve Risk formula verification (source)
brk_indexer
- Removed debug logging from transaction metadata storage for cleaner logs (source)
website
- Reorganized chart options into new module structure with dedicated files for activity, profitability, cost-basis, holdings, prices, and valuation
- Consolidated color utilities into
website/scripts/utils/colors.jsmodule
clients
- Bumped JavaScript and Python client versions
v0.1.3 - 2026-02-03
Breaking Changes
brk_types
- Renamed
LoadedAddressIndextoFundedAddressIndexthroughout the codebase (source) - Renamed
LoadedAddressDatatoFundedAddressData(source) - Renamed
OHLCCentstoOHLCCentsUnsignedfor consistency with unsigned cents types (source) - Removed
Cents,CentsCompact, andCentsSignedCompacttypes (consolidated into unsigned variants)
New Features
brk_types
- Added
SatsSignedtype (i64-based) for signed satoshi values used in changes, deltas, and profit/loss calculations (source) - Added
CentsSatstype (u128-based) for price × sats calculations with widening multiplication to prevent overflow (source) - Added
CentsSquaredSatstype (u128-based) for price² × sats calculations used in investor cap metrics (source)
brk_computer
- Added
investor_pricemetric - dollar-weighted average acquisition price with both USD and sats representations (source) - Added
cap_rawmetric storing raw Σ(price × sats) for precise realized cap aggregation across cohorts - Added
investor_cap_rawmetric storing raw Σ(price² × sats) for precise investor_price aggregation - Added
realized_profit_7d_ema,realized_loss_7d_ema, andnet_realized_pnl_7d_emametrics for smoothed realized PnL analysis - Added
profit_value_createdandprofit_value_destroyedmetrics splitting value flows by profit transactions - Added
loss_value_createdandloss_value_destroyedmetrics splitting value flows by loss transactions - Added
capitulation_flowas a lazy alias for loss_value_destroyed (coins sold at a loss) - Added
profit_flowas a lazy alias for profit_value_created (coins sold at a profit) - Added
peak_regretmetric: Σ((peak - sell_price) × sats) measuring how much more could have been made by selling at peak (source) - Added
peak_regret_rel_to_realized_capexpressing peak regret as percentage of realized cap - Added
invested_capital_in_profitandinvested_capital_in_lossmetrics tracking cost basis of UTXOs by profit/loss status (source) - Added raw aggregation values for unrealized metrics:
invested_capital_in_profit_raw,invested_capital_in_loss_raw,investor_cap_in_profit_raw,investor_cap_in_loss_raw - Added
pain_indexmetric: investor_price_of_losers - spot, measuring average distance underwater weighted by USD invested - Added
greed_indexmetric: spot - investor_price_of_winners, measuring average distance in profit weighted by USD invested - Added
net_sentimentmetric: greed_index - pain_index, positive values indicate greedy market, negative indicate painful market - Added
unrealized_peak_regretmetric for age-range UTXO cohorts - Added
invested_capitalpercentiles providing USD-weighted cost basis distribution (complementing sat-weighted percentiles) (source) - Added
spot_cost_basis_percentilemetric showing what percentile of cost basis is below current spot price (sat-weighted) - Added
spot_invested_capital_percentilemetric showing what percentile of invested capital is below current spot price (USD-weighted) - Added
ValueChangeFromDatemodule for computing N-day value changes stored as signed sats (source) - Added
LazyValueChangeDateDerivedmodule for lazy computation of bitcoin and dollar values from signed sats changes (source) - Added
LazyPriceFromCentsmodule providing lazy price wrapper with both USD and sats representations from a cents base (source) - Added
CentsUnsignedToDollarstransform for converting cents to dollars (source) - Added
CentsUnsignedToSatsFracttransform for converting cents to sats exchange rate (source)
brk_cohort
- Added
compute_relative()method toFilterthat returns false for edge-case output types (Empty, P2MS, Unknown) which have insufficient volume for meaningful ratio analysis (source)
Internal Changes
brk_computer
- Replaced
PriceToAmountstruct withCostBasisDataproviding more efficient storage with raw cap and investor_cap values for precise aggregation (source) - Added
Percentilesstruct that computes both sat-weighted and USD-weighted percentiles in a single pass (source) - Changed
UnrealizedStateto useCentsUnsignedinstead ofDollarsfor unrealized profit/loss values - Changed
realized_capto derive fromrealized_cap_centsvia lazy transform for consistent precision - Aggregate percentile computation now supports both sat-weighted and USD-weighted metrics with spot price parameter
- Removed
ClosePriceTimesRatiotransform (functionality consolidated into other transforms)
brk_bindgen
- Added pattern deduplication by name to prevent duplicate patterns when different signatures normalize to the same name (source)
- Changed to BTreeMap/BTreeSet for deterministic pattern generation order
- Changed pattern naming to generate stable names from first word of each field (deduped, sorted)
brk_fetcher
- Changed return types from
OHLCCentstoOHLCCentsUnsignedfor consistency (source)
brk_traversable
- Changed
TreeNode::Branchinternal storage fromBTreeMaptoIndexMapto preserve insertion order in API tree responses (source)
website
- Removed
website/scripts/options/market/subdirectory structure (averages.js, bands.js, index.js, investing.js, momentum.js, onchain.js, performance.js, volatility.js) - Consolidated market options into top-level
market.jsandinvesting.jsfiles - Added new
mining.jsandnetwork.jsoption modules - Removed
chain.jsmodule
v0.1.2 - 2026-01-29
New Features
brk_bindgen
- Added
indexToDate(index, i)andisDateIndex(index)helper functions to JavaScript client for converting index values to Date objects (source) - Added
index_to_date(index, i)andis_date_index(index)helper functions to Python client (source) - Added rich helper methods to JavaScript
MetricDataresponse object:dates()- convert index range to Date arrayindexes()- get index range as number arraytoDateMap()/toIndexMap()- convert to Map keyed by date or indexdateEntries()/indexEntries()- get as[key, value]pair arraysiter()/iterDates()- generator functions for iteration[Symbol.iterator]()- enablefor...ofloop support
- Added rich helper methods to Python
MetricDatadataclass:dates()- convert index range to date listindexes()- get index range as listto_date_dict()/to_index_dict()- convert to dictdate_items()/index_items()- get as tuple listsiter()/iter_dates()- iterators for (index, value) or (date, value)to_polars(with_dates)/to_pandas(with_dates)- convert to DataFrame with optional date column
- Added
indexfield to MetricData JSON response indicating the index type used for the query
brk_types
- Added
CentsSignedtype (i64-based) for signed cent values used in profit/loss calculations (source) - Added
CentsSignedCompacttype (i32-based) for memory-efficient signed cents in map keys (source) - Added
CentsUnsignedtype (u64-based) for unsigned cent values used in invested capital and realized cap (source) - Added
CentsUnsignedCompacttype (u32-based) for memory-efficient unsigned cents (source) - Added
is_date_based()method toIndexenum to check if an index type represents dates (source) - Added
index_to_date(i)method toIndexenum for converting index values toDate(source) - Added
Fromimplementations to convert date-based index types (WeekIndex,MonthIndex,YearIndex,QuarterIndex,SemesterIndex,DecadeIndex) toDate(source)
brk_computer
- Added
invested_capital_in_profitandinvested_capital_in_lossfields toUnrealizedStatefor tracking cost basis of positions (source)
brk_server
- Added higher API weight limit (50MB) for localhost requests compared to remote requests (650KB) to support larger local data queries (source)
brk_logger
- Added
LOGenvironment variable support for simple log level control (e.g.,LOG=debug brk) (source)
brk_cli
- Added
ENVIRONMENTandCONFIGsections to help output documentingLOG/RUST_LOGvariables and config file location (source)
workspace
- Added GitHub Actions workflow to check for outdated dependencies daily (source)
- Added SIMD instruction flags (BMI1, BMI2, AVX2) for x86_64 targets to accelerate pcodec decompression (source)
Bug Fixes
brk_indexer
- Fixed rollback consistency: deduplicate
addressindex_txindexremovals to prevent double deletion when same address appears multiple times in a transaction (source) - Fixed rollback cache consistency: clear txid caches after rollback to prevent stale reads (source)
brk_computer
- Fixed rollback recovery to use actual consistent height instead of target height for state imports (source)
- Fixed detection of failed rollbacks when height lands ahead of target, now falls back to fresh start (source)
- Fixed address index lookups to use
get_any_or_read_at_unwrapinstead ofget_pushed_or_read_at_unwrapto properly check updated layer after rollback (source) - Fixed height subtraction overflow using
saturating_subin computer example (source)
brk_cli
- Fixed config file not being overwritten on every startup, preserving user modifications (source)
Internal Changes
brk_bindgen
- Switched from
HashMaptoBTreeMapin pattern analysis for deterministic code generation order (source) - Added
write_if_changed()utility to skip file writes when content is unchanged, avoiding unnecessary cargo rebuilds (source)
brk_store
- Added
clear_caches()method to clear all partition caches after bulk removals like rollback (source)
brk_indexer
- Removed unused
COLLISIONS_CHECKED_UP_TOconstant (source) - Added debug logging for transaction metadata storage showing inserted/skipped counts (source)
- Added error logging for unknown TXID cases with full context including store result and current txindex (source)
brk_computer
- Added extensive debug and warning logging throughout rollback recovery process (source)
brk_server
- Added middleware to extract client socket address and pass to API handlers (source)
brk_logger
- Changed log file naming format from
{prefix}.{date}to{prefix}_{date}.txt(source)
brk_cli
- Increased server startup delay from 3 to 10 seconds when indexing is far behind (source)
- Added separator lines around "Indexing blocks" message for visibility (source)
brk_types
- Added comprehensive unit tests for
Datefrom index type conversions (source)
v0.1.1 - 2026-01-27
Bug Fixes
brk_website
- Fixed HTML file caching rules to properly detect
.htmlfiles and applymust-revalidatecache policy instead of immutable caching (source)
brk_client
- Fixed metric name mappings in
ClassDaysInLossPattern(changed frommax_drawdowntodays_in_profit) - Regenerated client code with corrected metric patterns
Internal Changes
scripts
- Split release scripts into separate components for better modularity
v0.1.0 - 2026-01-27
New Features
brk_computer
- Added sats-denominated versions of all price metrics alongside USD versions (source)
- New
Pricewrapper struct provides both.dollarsand.satsrepresentations - Derefs to dollars for backward compatibility with existing code
- Sats values computed via
DollarsToSatsFracttransform
- New
- Added address activity tracking metrics (source)
receiving- Unique addresses that received funds in each blocksending- Unique addresses that sent funds in each blockreactivated- Addresses that were empty and now have fundsboth- Addresses that both sent AND received in same blockbalance_increased- Receive-only addressesbalance_decreased- Send-only addresses- Available globally and per address type (P2PKH, P2SH, P2WPKH, etc.)
- Added address growth rate metrics (source)
- Computes
new_addr_count / total_addr_countratio globally and per type - Includes distribution statistics (min, max, average, percentiles)
- Computes
- Added new address count metrics per block
- Added total address count tracking
- Added
RatioU64F32transform for u64 to f32 ratio calculations - Added
U64Plustransform for u64 addition operations - Added price-aware multi modules:
lazy_binary_price,lazy_price,unary_last - Added height-based distribution and price modules
v0.1.0-beta.1 - 2026-01-26
New Features
brk_types
- Added
SatsFracttype for fractional satoshi representation (source)- Stores f64 values representing sub-satoshi amounts
- Useful for expressing USD prices in sats when price is high (e.g., at $100k, $0.0001 = 0.1 sats)
- Includes arithmetic operations and NaN handling
brk_computer
- Added
DollarsToSatsFracttransform for converting USD prices to sats exchange rate (source) - Added
CloseDollarsToSatsFractvariant for close price conversion
website
- Added more investing data and charts
Internal Changes
scripts
- Updated release workflow scripts
v0.1.0-beta.0 - 2026-01-25
Breaking Changes
brk_mcp
- Removed
brk_mcpcrate from workspace (MCP server functionality removed)
New Features
brk_computer
- Added Reserve Risk metric to cointime module (source)
- Computes VOCDD 365-day SMA (Value-weighted Outstanding Coin Days Destroyed)
- Calculates HODL Bank accumulation metric
- Derives Reserve Risk indicator for market cycle analysis
- Added
return_i8transform for small integer returns
brk_website (New Crate)
- Created standalone website serving crate without BRK data layer dependencies (source)
- Supports both embedded website and filesystem path serving
- Provides
router()function for Axum integration - Added example demonstrating standalone server usage
brk_playground (New Standalone Crate)
- Created experimental playground crate for on-chain price analysis (not published to crates.io) (source)
- Implements phase histogram analysis of UTXO patterns
- Provides filter-based output selection for price signal extraction
- Includes on-chain OHLC price oracle derivation with confidence metrics
- Features anchor-based price calibration using weekly OHLC data
brk_logger
- Added log hook system for custom log message handling (source)
- Added rate-limited file writer (100 writes/second max) to prevent log flooding (source)
- Added custom log format module
brk_client
- Added
fetch_prices.rsexample demonstrating price data fetching
brk_types
- Added
StoredI8type for signed 8-bit integer storage
brk_server
- Added Scalar API documentation JavaScript
Internal Changes
brk_computer
- Refactored vecs.rs files to remove verbose comments
- Reduced verbosity and switched to vecdb cumulative function for cleaner code
website
- Replaced uFuzzy search library with quickmatch for better performance
- Major cleanup and refactoring of frontend code
scripts
- Updated release scripts with improved workflow
v0.1.0-alpha.6 - 2026-01-18
Bug Fixes
brk_client
- Fixed minreq HTTP client feature flag: changed from
serde_jsontojson-using-serdefor proper JSON serialization support - Regenerated client code with corrected HTTP handling
scripts
- Added full workspace compilation check to release script to catch feature flag errors before publishing
v0.1.0-alpha.5 - 2026-01-17
Bug Fixes
brk_query
- Fixed
tokiofeature flag to properly propagate tobrk_errordependency, enabling async error handling when tokio feature is enabled
v0.1.0-alpha.4 - 2026-01-17
New Features
brk_computer
- Implemented Phase Oracle V2 algorithm using round USD template cross-correlation for on-chain price discovery (source)
- Uses 200-bin phase histogram with weighted round USD template ($1, $5, $10, $20, etc.)
- Weekly OHLC anchors constrain search range for accuracy
- Cross-correlates satoshi values with expected USD fingerprint patterns
- Added
cents_to_dollarstransform for price conversions (source)
brk_query
- Added
ResolvedQuerystruct for efficient metric query resolution with ETag generation (source) - Two-phase query processing: resolve metadata (cheap) then format output (expensive, cached)
brk_server
- Added bulk metrics API endpoint with ETag-based caching and 304 Not Modified support (source)
- Implemented
CacheStrategymodule with Height, Static, and MaxAge caching strategies (source) - Added compact OpenAPI spec generator optimized for LLM consumption (source)
- Removes redundant fields (error responses, descriptions, examples)
- Simplifies schemas and flattens allOf/anyOf constructs
- Compacts responses to "returns": "Type" format
- Added dedicated error handling module
- Added website file serving module with symlink to website directory
brk_types
- Added
Etagtype for HTTP ETag header handling (source) - Added
Outputenum for JSON and CSV metric output formats (source) - Added
MetricOutputstruct wrapping output with metadata for ETag generation (source) - Added
OracleBinstype for 100-bin phase histogram storage used in price discovery (source) - Added
PairOutputIndexfor indexing 2-output transactions (oracle pair candidates) (source) - Added
Porttype with default server port 3110 (source)
brk_fetcher
- Added fetcher example demonstrating price data fetching
Internal Changes
brk_server
- Reorganized OpenAPI generation into dedicated
openapi/module - Added Scalar API documentation HTML template
modules/brk-client
- Regenerated documentation with new types (OracleBins, PairOutputIndex, SyncStatus)
- Added README with usage examples
packages/brk_client
- Regenerated documentation and updated README
v0.1.0-alpha.3 - 2026-01-14
Breaking Changes
brk_bundler
- Removed
brk_bundlercrate from workspace (JavaScript bundling functionality removed)
New Features
brk_computer
- Implemented UTXOracle trustless on-chain price discovery algorithm that derives Bitcoin prices from transaction data without external price feeds (source)
- Detects round USD amounts ($10, $20, $50, $100, etc.) in transaction outputs
- Uses histogram-based stencil matching with Gaussian smoothing
- Refines prices via geometric median convergence
- Filters "clean" transactions: 2 outputs, ≤5 inputs, no OP_RETURN, simple signatures
- Added
price/cents/module for cent-based price storage with split components (source) - Created dedicated index modules for time-based metric aggregation:
indexes/dateindex.rs- Daily index with date, first_height, height_count, weekindex, monthindex mappingsindexes/weekindex.rs- Weekly aggregationindexes/monthindex.rs- Monthly aggregationindexes/quarterindex.rs- Quarterly aggregationindexes/semesterindex.rs- Semester (half-year) aggregationindexes/yearindex.rs- Yearly aggregationindexes/decadeindex.rs- Decade aggregationindexes/halvingepoch.rs- Halving epoch indexingindexes/difficultyepoch.rs- Difficulty adjustment epoch indexingindexes/height.rs- Block height indexingindexes/txindex.rs,txinindex.rs,txoutindex.rs- Transaction-level indexingindexes/address.rs- Address type indexing with vecs for all output types (P2PK33, P2PK65, P2PKH, P2SH, P2TR, P2WPKH, P2WSH, P2A, P2MS, empty, unknown, OP_RETURN)
- Added comprehensive
internal/multi/module with 100+ metric aggregation strategies (source):from_height/- Height-based metric derivation with lazy, binary, and value variantsfrom_date/- Date-based aggregation with percentiles, ratios, statisticsfrom_height_and_date/- Combined height+date metrics including OHLCfrom_tx/- Transaction-level distributionsheight_derived/- Height-to-higher-index derivationsdate_derived/- Date-to-higher-index derivations (average, first, last, min, max, spread, sum)tx_derived/- Transaction-derived distributionsheight_and_date/- Combined aggregations for OHLC and bytes
- Added
internal/single/module with specialized metric computations (source):transform/- 35+ value transformations (price conversions, ratios, percentages, RSI, volatility)lazy/- Lazy evaluation for sum, average, cumulative, first, last, min, max, spreadlazy_transform/- Lazy binary operations with percentiles and statisticsvec/- Vector-based aggregations (percentiles, sum, average)group/- Group statistics (min/max, average, percentiles, distribution)height/- Height-indexed value derivationstx/- Transaction-level distributionsdifficultyepoch/- Difficulty epoch lazy values
- Added
internal/compute.rsfor unified computation orchestration - Added
internal/traits.rsfor shared metric computation traits - Added
distribution/metrics/outputs.rsfor output-specific distribution metrics
brk_client
- Added
basic.rsexample demonstrating typed metrics API with method chaining (source) - Added
tree.rsexample for navigating the metrics tree structure
brk_fetcher
- Implemented retry mechanism for network requests with exponential backoff (source)
- Added permanent network error detection to skip retries for blocked endpoints
brk_indexer
- Added
vecs/addresses.rsfor address-specific vector storage - Added
vecs/inputs.rsfor input vector organization - Added
vecs/outputs.rsfor output vector organization - Added
vecs/transactions.rsfor transaction vector organization - Added
vecs/scripts.rsfor script vector organization
brk_types
- Added
DiskUsagetype for tracking storage consumption per component (source) - Added
FormatResponsetype for API response formatting (source) - Added
SyncStatustype for indexer synchronization status (source)
brk_bindgen
- Added
generate/constants.rsfor constant generation - Added
generate/tree.rsfor tree structure generation - Added catalog test suite (source)
brk_server
- Added
/api/server/syncendpoint returningSyncStatuswith indexed_height, tip_height, blocks_behind, and last indexed timestamp (source) - Added
/api/server/diskendpoint returningDiskUsagewith storage consumption per component - Added
/api/server/healthendpoint for health checks
brk_store
- Added
any.rsfor type-erased store access
modules/brk-client
- Generated comprehensive TypeScript-style documentation with 300+ interface and type definitions
- Added test suites:
basic.jsandtree.js - Added CLAUDE.md with development instructions
packages/brk_client
- Added Python documentation generation with pydoc-markdown
- Added DOCS.md with generated API documentation
- Added test suites:
test_basic.py,test_tree.py
website
- Restructured from
websites/bitview/to unifiedwebsite/directory - Added Progressive Web App (PWA) support with manifest and service worker (source)
- Added 40+ Apple splash screen images for iOS home screen support
- Added search pane (
panes/search.js) and navigation pane (panes/nav.js) - Added units utility (
utils/units.js) for value formatting - Reorganized options system with dedicated modules for chain, cohorts, cointime, market, and series configuration
scripts
- Added
js-docs.shfor JavaScript documentation generation - Added
js-publish.shfor JavaScript package publishing - Added
python-docs.shfor Python documentation generation - Added
python-publish.shfor Python package publishing to PyPI - Added
rust-publish.shfor Rust crate publishing - Added
release.shfor coordinated multi-language releases
Internal Changes
workspace
- Added build.rs scripts to all crates for consistent build configuration
- Shortened percentiles path in metric tree for cleaner API
brk_computer
- Reorganized traits into dedicated
traits/module withpricing.rs - Removed specialized percentiles, ratio, stddev modules from
internal/specialized/
brk_logger
- Added example demonstrating logger usage
v0.1.0-alpha.2 - 2026-01-04
Breaking Changes
brk_binder → brk_bindgen
- Replaced
brk_bindercrate with completely rewrittenbrk_bindgencrate featuring new architecture with separategenerators/,backends/, andanalysis/modules (source)
brk_grouper → brk_cohort
- Migrated cohort filtering functionality from
brk_grouperto newbrk_cohortcrate with expanded filtering capabilities (source)
brk_computer
- Replaced
brk_grouperdependency withbrk_cohortthroughout the crate - Removed monolithic
chain/module containing compute.rs, import.rs, and mod.rs - Removed monolithic
cointime.rsin favor of modularcointime/directory structure - Removed
stateful/module tree including address cohorts, UTXO cohorts, and state management - Removed
fetched.rs,grouped/,indexes.rs, andprice.rsmodules
New Features
brk_alloc (New Crate)
- Created global allocator crate using mimalloc for consistent memory allocation across all brk crates (source)
- Added
Mimalloc::collect()function for eager memory release back to OS at natural pause points
brk_bindgen (New Crate)
- Implemented
ClientOutputPathsbuilder for configuring output file paths per language (source) - Added
generate_clients()function that generates all configured language clients from OpenAPI spec - Created analysis module with name resolution, pattern detection, position tracking, and tree traversal (source)
- Implemented language-specific backends for JavaScript, Python, and Rust code generation (source)
- Created generators module with separate API, client, tree, and types generation per language (source)
- Added syntax utilities for code generation formatting
- Implemented schema extraction and type metadata handling (source)
brk_client (New Crate)
- Created Rust client crate with build-time CPU optimization for release builds (source)
- Generated client library using brk_types for strong typing
brk_cohort (New Crate)
- Implemented comprehensive UTXO and address cohort filtering system (source)
- Added address type filtering for all output types: P2PK65, P2PK33, P2PKH, P2SH, P2WPKH, P2WSH, P2TR, P2A (source)
- Added spendable and unspendable type filtering (source)
- Implemented
CohortContextfor automatic metric name prefix generation based on cohort type (source) - Added
CohortNamesystem for generating consistent cohort identifiers - Implemented
StateLeveltracking for cohort state management - Added year-based filtering with
ByYeargrouper - Added
ByAnyAddressfor filtering across all address types - Migrated and extended age range, amount range, epoch, term, min/max age, ge/lt amount filters from brk_grouper
brk_computer
- Created modular
blocks/module with separate submodules for count, difficulty, halving, interval, mining, rewards, size, time, and weight metrics (source) - Created modular
cointime/module with submodules for activity, adjusted, cap, pricing, supply, and value calculations (source) - Created
distribution/module for UTXO distribution metrics with address, block, cohorts, compute, metrics, and state submodules (source) - Reorganized
indexes/into modular structure with address, block, time, and transaction submodules - Reorganized
inputs/into count and spent submodules - Reorganized
outputs/into count and spent submodules - Reorganized
market/into ath, dca, indicators, lookback, moving_average, range, returns, and volatility submodules - Reorganized
price/into ohlc, sats, and usd submodules - Reorganized
supply/into burned, circulating, inflation, market_cap, and velocity submodules - Reorganized
transactions/into count, fees, size, versions, and volume submodules - Reorganized
scripts/into count and value submodules - Added internal module with builder, computed, lazy, specialized, and value submodules for metric computation infrastructure
brk_indexer
- Refactored processor into modular structure with separate metadata, tx, txin, txout, and types submodules (source)
brk_bundler
- Added bundle example demonstrating bundler usage (source)
brk_types
- Added
Agetype for UTXO age representation - Added
CentsCompacttype for compact cent storage - Added
Hextype for hexadecimal string handling - Added
Indexesmodule for index type collections - Added
OptionExttrait for option extensions - Added
Percentiletype for percentile values - Added
SupplyStatetype for supply tracking state - Added
Termtype for short-term/long-term holder classification
packages/brk_client (Python)
- Created Python client package with httpx for HTTP requests (source)
- Added typed dataclass-based client with full metric catalog support
- Included test suite for client functionality
Internal Changes
brk_computer
- Removed debug_indexer.rs and pools.rs examples
- Simplified constants.rs by removing unused constant definitions
- Consolidated address data structures into distribution module
brk_indexer
- Removed BENCH.md benchmarking documentation
brk_mempool
- Removed DESIGN.md design documentation
workspace
- Added brk_alloc as dev-dependency for benchmarks using mimalloc
v0.1.0-alpha.1 - 2025-12-21
New Features
brk_binder
- Implemented complete multi-language client generation system that produces typed API clients from the metric catalog and OpenAPI specification (source)
- Added JavaScript client generator with full JSDoc type annotations for IDE autocomplete support across 20k+ metrics (source)
- Added Python client generator with type hints and httpx for HTTP requests (source)
- Added Rust client generator with strong typing using reqwest (source)
- Implemented OpenAPI 3.1 integration using the
oas3crate for parsing endpoint definitions (source) - Created structural pattern detection system that identifies repeating tree structures for type reuse (source)
- Added generic pattern detection that groups type-parameterized structures to reduce generated code size
- Created
ClientMetadatafor extracting catalog structure, patterns, and index sets frombrk_query::Vecs(source)
brk_types
- Added
MetricLeafstruct containing metric name, value type, and available indexes (source) - Added
MetricLeafWithSchemathat wrapsMetricLeafwith a JSON Schema for client type generation - Changed
TreeNode::LeaffromStringtoMetricLeafWithSchemato carry full metadata through the tree - Added
JsonSchemaderive to byte array types (U8x2,U8x20,U8x32) with custom implementations forU8x33andU8x65 - Added
JsonSchemaderive to OHLC types (OHLCCents,OHLCDollars,OHLCSats,Open,High,Low,Close) - Added
JsonSchemaderive to all index types (date, week, month, quarter, semester, year, decade, halving epoch, difficulty epoch) - Added
JsonSchemaderive to address index types (P2PKH, P2SH, P2WPKH, P2WSH, P2TR, P2PK33, P2PK65, P2A, OP_RETURN, empty, unknown) - Implemented index merging when collapsing tree nodes with the same metric name
brk_traversable
- Added
make_leafhelper function that generatesMetricLeafWithSchemanodes with schemars-based JSON Schema generation (source) - Updated all
Traversableimplementations to requireJsonSchemabound and generate full leaf metadata
brk_computer
- Added
neg_realized_lossmetric (realized_loss * -1) for charting convenience (source) - Added
net_realized_pnlmetric (realized_profit - realized_loss) - Added
realized_valuemetric (realized_profit + realized_loss) - Added
total_realized_pnlat both height and dateindex levels - Added
realized_pricemetric (realized_cap / supply) - Added
realized_cap_30d_deltafor 30-day realized cap changes - Added
sopr(Spent Output Profit Ratio) with 7-day and 30-day EMA variants - Added
adjusted_soprwith EMA variants for coinbase-adjusted analysis - Added
sell_side_risk_ratio(realized_value / realized_cap) with 7-day and 30-day EMAs - Added realized profit/loss ratios relative to realized cap
- Added
net_realized_pnl_cumulative_30d_deltawith ratios relative to realized cap and market cap - Added
neg_unrealized_loss_rel_to_market_capandnet_unrealized_pnl_rel_to_market_capmetrics (source) - Added
supply_in_profit/loss_rel_to_circulating_supplymetrics - Added unrealized profit/loss relative to own market cap at both height and indexes levels
- Added full benchmark example with indexer, computer, and bencher integration (source)
brk_grouper
- Added public constants for age boundaries (
DAYS_1D,DAYS_1W,DAYS_1M, etc.) for external use (source) - Added
get_mut_by_days_old()method toByAgeRangefor O(1) direct bucket access by days - Added
AmountBuckettype for O(1) amount range classification (source) - Added
amounts_in_different_buckets()helper for cheap bucket comparison - Optimized
get()andget_mut()inByAmountRangeusing match on bucket index instead of if-else chain
brk_server
- Integrated automatic client generation on startup when
brk_binder/clients/directory exists (source) - Added panic catching for client generation to prevent server startup failures
brk_cli
- Enabled distribution via cargo-dist (
dist = truein package metadata) - Added performance benchmarks section to README with timing and resource usage data
workspace
- Added
rust-toolchain.tomlpinning toolchain to Rust 1.92.0 - Created comprehensive
scripts/publish.shfor automated crate publishing in dependency order (source) - Updated
scripts/update.shto also update rust-toolchain version
Internal Changes
brk_computer
- Removed
FenwickTreestate module (O(log n) prefix sum data structure) - Removed
PriceBucketsstate module (logarithmic price bucket distribution) - Simplified cohort state management after removal of Fenwick-based percentile computation
brk_indexer
- Renamed
push_if_needed()tochecked_push()throughout for API consistency (source) - Renamed
Indexes::push_if_needed()toIndexes::checked_push()
brk_cli
- Updated
zipdependency from 6.0.0 to 7.0.0
v0.1.0-alpha.0 - 2025-12-18
Breaking Changes
brk_structs → brk_types
- Renamed
brk_structscrate tobrk_typeswith complete reorganization of all Bitcoin data types into 150+ dedicated modules (source)
brk_parser → brk_reader
- Renamed
brk_parsercrate tobrk_readerwith simplified scope focused exclusively on BLK file reading and XOR decryption (source) - Moved block iteration logic to new
brk_iteratorcrate
brk_interface
- Removed
brk_interfacecrate entirely, replacing it with the more comprehensivebrk_querycrate
brk_store
- Upgraded storage backend from fjall v2.11.2 to fjall v3.0.0-rc.6 with breaking API changes (source)
brk_indexer
- Replaced
brk_parser::Parserwithbrk_iterator::Blocksfor block iteration (source) - Renamed
OutputIndexandInputIndextoTxOutIndexandTxInIndexthroughout the codebase for clarity - Changed address indexing from
addressindex->txoutindextoaddressindex->txindexandaddressindex->outpointpatterns for more flexible queries
brk_computer
- Replaced
brk_parser::Parserwithbrk_reader::Readerfor block file access - Reorganized stateful computation architecture with new cohort-based grouping system
- Removed
statesmodule, integrating state management directly intostatefulmodule
New Features
brk_mempool (New Crate)
- Created comprehensive mempool monitoring crate with real-time transaction tracking and fee estimation (source)
- Implemented CPFP-aware block builder algorithm using dependency graph analysis and heap-based transaction selection (source)
- Created
Selectorcomponent that greedily selects highest fee-rate transactions while respecting ancestor dependencies - Implemented
Partitionerthat groups selected transactions into projected blocks of ~1MB vsize each (8 blocks projected) - Added
Packageabstraction for atomic transaction groups where children pay for parents (CPFP) - Created
Graphstructure tracking transaction dependencies with ancestor fee/size aggregation - Implemented
RecommendedFeescomputation providing fee estimates for fastest, half-hour, hour, economy, and minimum confirmation targets (source) - Created
AddressTrackerfor monitoring mempool transactions affecting specific addresses with add/remove tracking (source) - Implemented
EntryPoolwith slot-based entry management using generation counters for efficient reuse - Added
Snapshotsystem capturing point-in-time mempool state with per-block statistics (tx count, vsize, fees, fee range) (source) - Created
TxStorefor mempool transaction storage with prefix-based lookups using TxidPrefix - Implemented
MempoolInfotracking aggregate statistics: tx count, total vsize, total fees - Added automatic synchronization loop with 1-second update interval and rate-limited rebuilds (minimum 1 second between rebuilds) (source)
- Created dirty flag mechanism for efficient change detection and rebuild triggering
brk_query (New Crate)
- Created unified query interface combining indexer, computer, reader, and mempool access into single
Querystruct (source) - Implemented address query methods (source):
address()- ReturnsAddressStatswith chain stats (funded/spent txo counts and sums, tx count) and optional mempool statsaddress_txids()- Returns paginated transaction IDs for an address withafter_txidcursor supportaddress_utxos()- Returns all unspent outputs for an address with full status informationaddress_mempool_txids()- Returns up to 50 unconfirmed transaction IDs affecting an addressresolve_address()- Helper converting address string to output type and type_index
- Implemented block query methods (source):
block()/block_by_height()- ReturnsBlockInfowith hash, height, timestamp, difficulty, size, weight, tx countblocks()- Returns last 10 blocks, optionally starting from a specific heightblock_status()- ReturnsBlockStatuswith in_best_chain flag, height, and next_best hashblock_timestamp()- ReturnsBlockTimestampfor timestamp-based block lookupblock_txids()- Returns all transaction IDs in a blockblock_txs()- Returns paginated full transactions (25 per page)block_txid_at_index()- Returns single txid at specific index within blockblock_raw()- Returns raw block bytes read directly from blk file with XOR decodingblock_by_timestamp()- Finds block closest to given UNIX timestamp using binary search
- Implemented transaction query methods (source):
transaction()- Returns fullTransactionwith inputs (including prevout values), outputs, fee, status; checks mempool first for unconfirmed txstransaction_by_index()- Internal method reading tx from blk file and reconstructing full transaction objecttransaction_status()- ReturnsTxStatuswith confirmed flag, block height/hash/timetransaction_hex()- Returns raw transaction as hex stringoutspend()- ReturnsTxOutspendfor single output with spending tx details if spentoutspends()- Returns spend status for all outputs in a transactionoutspend_details()- Helper computing spending txid, vin, and status from txinindex
- Implemented mempool query methods (source):
mempool_info()- ReturnsMempoolInfowith aggregate statisticsmempool_txids()- Returns all transaction IDs currently in mempoolrecommended_fees()- ReturnsRecommendedFeeswith fee rate targetsmempool_blocks()- ReturnsVec<MempoolBlock>with projected block statistics
- Implemented mining query methods (source):
mining_pools()- ReturnsPoolsSummarywith pool statistics for time period (24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y)all_pools()- ReturnsVec<PoolInfo>with all 166 known mining poolspool_detail()- ReturnsPoolDetailwith block counts/shares for all time, 24h, and 1 weekhashrate()- ReturnsHashrateSummarywith network hashrate and difficulty datadifficulty_adjustment()- Returns currentDifficultyAdjustmentwith epoch progress and retarget estimatedifficulty_adjustments()- Returns historicalVec<DifficultyAdjustmentEntry>(timestamp, height, difficulty, change%)block_fees()- ReturnsVec<BlockFeesEntry>with average fees per time periodblock_rewards()- ReturnsVec<BlockRewardsEntry>with average coinbase rewardsblock_sizes_weights()- ReturnsBlockSizesWeightswith average sizes and weightsreward_stats()- ReturnsRewardStatsfor last N blocks
- Implemented metrics query methods (source):
metric_count()- Returns count of available metricsindexes()- Returns all available index types with accepted aliasesmetrics()- Returns paginated list of metrics with offset/limit supportmetrics_catalog()- Returns hierarchicalTreeNodeof all metrics organized by categorymatch_metric()- Fuzzy search for metrics by name with configurable result limitmetric_to_indexes()- Returns supported indexes for a specific metricmetric_data()- ReturnsMetricDatawith values for metric/index combination and date range
- Added async query support via optional
tokiofeature for non-blocking database access
brk_iterator (New Crate)
- Created
Blocksfactory for iterating over Bitcoin blocks with smart source selection (source) - Implemented three source modes:
Smart- Auto-selects RPC for ranges ≤10 blocks, Reader for larger rangesRpc- Always uses Bitcoin Core RPC for block retrievalReader- Always uses BLK file reader for block retrieval
- Created flexible range specifications:
range(start, end)- Iterate over specific block range (inclusive)start(height)- Iterate from height to chain tipend(height)- Iterate from genesis to heightlast(n)- Iterate over last n blocksafter(hash)- Iterate after a specific block hash (for incremental syncing)
- Implemented
BlockIteratorwith chain reorganization detection that stops iteration on prev_hash discontinuity - Added
BlockRangeenum for type-safe range specification - Created
Statestruct managing iteration progress with RPC or Reader backend
brk_rpc (New Crate)
- Created Bitcoin Core RPC client wrapper with automatic retry logic and configurable timeouts (source)
- Implemented comprehensive RPC methods:
get_blockchain_info()- Chain state and sync statusget_block()/get_block_count()/get_last_height()- Block retrieval and chain heightget_block_hash()/get_block_header()/get_block_info()/get_block_header_info()- Block metadataget_transaction()/get_raw_transaction()/get_raw_transaction_hex()- Transaction retrievalget_tx_out()- UTXO lookup with optional mempool inclusionget_raw_mempool()- Mempool transaction IDsget_raw_mempool_verbose()- ReturnsVec<MempoolEntryInfo>with fee/ancestor data for all mempool entriesget_mempool_transaction()- ReturnsTxWithHexwith full transaction data including resolved prevoutsis_in_main_chain()- Check if block is in best chainget_closest_valid_height()- Find closest valid ancestor for reorg recoverywait_for_synced_node()- Block until node headers == blocks
- Created
ClientInnerwith retry mechanism (default 1M retries, 1s delay) (source) - Added default path resolution for macOS (
~/Library/Application Support/Bitcoin) and Linux (~/.bitcoin)
brk_types (New Crate)
- Created comprehensive type library with 150+ Bitcoin-related types organized into dedicated modules (source)
- Added mempool types:
MempoolBlock(tx_count, total_vsize, total_fee, fee_range),MempoolEntryInfo,MempoolInfo,RecommendedFees(fastest_fee, half_hour_fee, hour_fee, economy_fee, minimum_fee) - Created API parameter types with serde deserialization:
AddressParam,AddressTxidsParam,BlockHashParam,BlockCountParam,HeightParam,TxidParam,TxidVout,LimitParam,TimePeriodParam,PoolSlugParam,TimestampParam,ValidateAddressParam - Added mining types:
Pool(id, name, slug, addresses, tags, link),PoolDetail,PoolDetailInfo,PoolInfo,PoolStats,PoolBlockCounts,PoolBlockShares,PoolsSummary,HashrateSummary,HashrateEntry,DifficultyAdjustment,DifficultyAdjustmentEntry,DifficultyEntry,DifficultyEpoch,RewardStats - Implemented metric types:
Metric,MetricCount,MetricData,MetricParam,Metrics,MetricSelection,MetricSelectionLegacy,MetricWithIndex,PaginatedMetrics,DataRange,DataRangeFormat - Added block types:
BlockInfo,BlockStatus,BlockTimestamp,BlockSizesWeights,BlockFeesEntry,BlockFeeRatesEntry,BlockRewardsEntry,BlockSizeEntry,BlockWeightEntry - Created transaction types:
Transaction,TxIn,TxOut,TxStatus,TxOutspend,TxWithHex,TxIndex,TxInIndex,TxOutIndex - Added address types:
Address,AddressBytes,AddressHash,AddressChainStats,AddressMempoolStats,AddressStats,AddressValidation,AnyAddressIndex,EmptyAddressIndex,LoadedAddressIndex, with separate types for each output type (P2PKH, P2SH, P2WPKH, P2WSH, P2TR, P2PK33, P2PK65, P2A, P2MS, OpReturn, Unknown) - Implemented index types:
Indexenum (Height, DateIndex, WeekIndex, MonthIndex, QuarterIndex, SemesterIndex, YearIndex, DecadeIndex, TxIndex, P2PKHIndex, etc.),IndexInfo - Added stored numeric types:
StoredBool,StoredF32,StoredF64,StoredI16,StoredU8,StoredU16,StoredU32,StoredU64,StoredString - Created utility types:
Health,TreeNode,Unit,Pagination,PaginationIndex,Limit,OutPoint,Utxo,Vin,Vout
brk_grouper (New Crate)
- Created cohort filtering and grouping infrastructure for UTXO and address analysis (source)
- Implemented filter modules:
ByAddressType- Filter by output type (P2PKH, P2SH, P2WPKH, etc.)ByAgeRange- Filter by UTXO age in blocksByAmountRange- Filter by satoshi value rangeByEpoch- Filter by halving epochByTerm- Filter by holder term classification (STH/LTH)ByYear- Filter by creation yearByMinAge/ByMaxAge- Filter by minimum/maximum UTXO ageByGeAmount/ByLtAmount- Filter by amount thresholdsBySpendableType/ByUnspendableType- Filter by spendabilityByAnyAddress- Filter by specific address membershipByType/ByValue- Generic type and value filters
- Created
AmountFilterandTimeFilterbase traits for composable filtering - Implemented
CohortContextfor managing filter state during cohort analysis - Added
Filteredwrapper for filtered iterators with lazy evaluation - Created
StateLevelenum for controlling computation granularity - Implemented
Termtype for STH (Short Term Holder) / LTH (Long Term Holder) classification - Added
AddressCohortandUtxoCohorttraits for cohort membership testing
brk_traversable and brk_traversable_derive (New Crates)
- Created
Traversabletrait for vector tree navigation (source):to_tree_node()- Converts struct to hierarchicalTreeNoderepresentationiter_any_exportable()- Returns iterator over all exportable vectors in the tree
- Implemented trait for all vecdb vector types:
BytesVec,ZeroCopyVec,PcoVec,LZ4Vec,ZstdVec,EagerVec,LazyVecFrom1/2/3 - Added implementations for container types:
Box<T>,Option<T>,BTreeMap<K, V> - Created derive macro for automatic
Traversableimplementation on structs (source) - Added
TreeNodetype withLeaf(String)andBranch(BTreeMap<String, TreeNode>)variants
brk_bencher and brk_bencher_visualizer (New Crates)
- Created benchmarking infrastructure with multi-metric monitoring (source):
DiskMonitor- Tracks directory size changes over timeMemoryMonitor- Tracks process RSS memory using system APIsIoMonitor- Tracks read/write bytes using process I/O statisticsProgressionMonitor- Tracks computation progress via log message pattern matching
- Implemented
Bencherstruct with:- Automatic benchmark directory creation under
workspace_root/benches/{crate_name}/{timestamp}/ - Background monitoring thread with 5-second sample interval
- Logger hook registration for progress tracking
- CSV output for all metrics with millisecond timestamps
- Automatic benchmark directory creation under
- Created
brk_bencher_visualizerfor generating SVG charts from benchmark data (source):Chartstruct for SVG chart generation with configurable dimensionsDatamodule for CSV parsing and data transformationFormatmodule for human-readable byte/number formatting- Command-line tool for batch chart generation from benchmark directories
brk_reader (Renamed from brk_parser)
- Implemented thread-safe BLK file reader with parallel block decoding (source)
- Created multi-stage pipeline:
- Stage 1: Sequential BLK file reading with magic byte detection and XOR decoding
- Stage 2: Parallel block parsing using dedicated rayon thread pool (half of available threads)
- Stage 3: Block ordering with future block buffering for out-of-order handling
- Added binary search optimization for finding starting BLK file index when parsing from specific heights
- Created
read_raw_bytes()method for reading arbitrary byte ranges from blk files with XOR decoding - Implemented chain continuity verification that detects prev_hash discontinuities and logs errors
- Added
BlkIndexToBlkPathmapping with automatic BLK file discovery and caching - Created
XORBytesandXORIndextypes for efficient XOR decryption state management
brk_server - REST API
- Added comprehensive OpenAPI documentation using aide with Scalar UI at
/apiendpoint (source) - Created Address API endpoints (source):
GET /api/address/{address}- Address information with chain and mempool statsGET /api/address/{address}/txs- Paginated transaction IDs withafter_txidandlimitparamsGET /api/address/{address}/utxo- Unspent transaction outputsGET /api/address/{address}/txs/mempool- Unconfirmed transactions (max 50)GET /api/validate-address/{address}- Address validation with type detection
- Created Block API endpoints (source):
GET /api/blocks- Last 10 blocksGET /api/blocks/{height}- 10 blocks backwards from heightGET /api/block/{hash}- Block information by hashGET /api/block/{hash}/status- Block status (in_best_chain, next_best)GET /api/block/{hash}/txids- All transaction IDs in blockGET /api/block/{hash}/txs/{start_index}- Paginated transactions (25 per page)GET /api/block/{hash}/txid/{index}- Single txid at indexGET /api/block/{hash}/raw- Raw block bytesGET /api/block-height/{height}- Block by heightGET /api/v1/mining/blocks/timestamp/{timestamp}- Block by timestamp
- Created Transaction API endpoints (source):
GET /api/tx/{txid}- Full transaction data with inputs/outputsGET /api/tx/{txid}/status- Confirmation statusGET /api/tx/{txid}/hex- Raw transaction hexGET /api/tx/{txid}/outspend/{vout}- Single output spend statusGET /api/tx/{txid}/outspends- All output spend statuses
- Created Mempool API endpoints (source):
GET /api/mempool/info- Mempool statistics (tx count, vsize, fees)GET /api/mempool/txids- All mempool transaction IDsGET /api/v1/fees/recommended- Recommended fee rates for confirmation targetsGET /api/v1/fees/mempool-blocks- Projected blocks with fee statistics
- Created Mining API endpoints (source):
GET /api/v1/difficulty-adjustment- Current difficulty adjustment infoGET /api/v1/mining/pools- List all known mining poolsGET /api/v1/mining/pools/{time_period}- Pool statistics for time periodGET /api/v1/mining/pool/{slug}- Detailed pool informationGET /api/v1/mining/hashrate/GET /api/v1/mining/hashrate/{time_period}- Network hashrateGET /api/v1/mining/difficulty-adjustments/GET /api/v1/mining/difficulty-adjustments/{time_period}- Historical adjustmentsGET /api/v1/mining/blocks/fees/{time_period}- Block fee statisticsGET /api/v1/mining/blocks/rewards/{time_period}- Block reward statisticsGET /api/v1/mining/blocks/sizes-weights/{time_period}- Block size/weight statisticsGET /api/v1/mining/reward-stats/{block_count}- Reward stats for last N blocks
- Created Metrics API endpoints (source):
GET /api/metrics/count- Total metric countGET /api/metrics/indexes- Available indexes with aliasesGET /api/metrics/list- Paginated metric listGET /api/metrics/catalog- Hierarchical metric treeGET /api/metrics/search/{metric}- Fuzzy metric searchGET /api/metric/{metric}- Supported indexes for metricGET /api/metric/{metric}/{index}- Metric data with date range filteringGET /api/metrics/bulk- Bulk metric query (max 650KB response weight)GET /api/vecs/{variant}- Legacy variant endpoint (deprecated, sunset 2027-01-01)GET /api/vecs/query- Legacy query endpoint (deprecated)
- Created Server API endpoints:
GET /version- API versionGET /health- Health check with timestampGET /api.json- OpenAPI specificationGET /api- Scalar API documentation UI
- Implemented
CacheStrategyenum for response caching:Static(immutable),Height(ETag based on block height),MaxAge(seconds)(Cache-Control max-age) - Added response transformations in
extendedmodule:HeaderMapExtended,ResponseExtended,TransformResponseExtended
brk_computer
- Achieved ~3x computation speed improvement through optimized vecdb iterators and major stateful processing optimizations
- Added
Traversablederive macro support for automatic vector tree generation - Implemented parallel import for indexes, fetched data, and blks vectors using 512MB stack-size threads (source)
- Created new
blksmodule withtxindex_to_positionandtxindex_to_lenvectors for transaction location tracking
brk_indexer
- Achieved ~4x indexing speed improvement (~12h → ~3h for full chain) through parallel TXID computation, parallel input/output processing, efficient same-block spend detection, fjall v3, and mimalloc
- Implemented parallel import for vecs and stores using scoped threads (source)
- Added
Readersstruct providing typed vector iterators for efficient batch data access - Created
Processorfor block processing with address and transaction indexing - Added automatic file handle limit increase at startup (minimum 10,000 via rlimit)
brk_binder
- Added Rust binding generator for type-safe metric access alongside existing JavaScript generator (source)
Internal Changes
brk_indexer
- Split indexer code into dedicated modules:
constants,indexes,processor,readers,stores,vecs - Moved address vector handling into nested
vecs/address.rsmodule - Separated block, transaction, txin, and txout vectors into dedicated submodules
brk_computer
- Major refactoring of stateful computation architecture with new module structure
- Split
cohortsintoaddress.rs,address_cohorts.rs,traits.rs,utxo.rs, andutxo_cohorts/(mod, receive, send, tick_tock) - Created
computemodule withaggregates,block_loop,context,readers,recover, andwritesubmodules - Reorganized
metricsintoactivity,config,price_paid,realized,relative,supply, andunrealizedsubmodules - Added
processmodule withaddress_updates,cache,inputs,lookup,outputs,range_map,received,sent,tx_counts,with_source - Created
statesmodule withaddress_cohort,block,cohort,fenwick,price_buckets,price_to_amount,realized,supply,transacted,unrealized,utxo_cohort - Added
addressmodule in stateful withaddress_count,any_address_indexes,data,height_type_vec,type_index_map,type_vec - Created
addresstypemodule withaddresscount,height_to_addresscount,height_to_vec,indexes_to_addresscount,typeindex_tree,vec
brk_fetcher
- Restructured fetcher into dedicated source modules:
binance.rs,brk.rs,kraken.rs - Added
retry.rsmodule for fetch retry logic with exponential backoff - Created
ohlc.rsmodule for OHLC data aggregation and transformation - Added
source.rsmodule for abstracting data source selection
brk_store
- Simplified store implementation to use
brk_typesinstead ofbrk_structs - Added
rustc-hashfor faster FxHashMap operations
brk_logger
- Added hook registration system via
register_hook()for external log message monitoring (source)
Documentation
Benchmarks
- Added benchmark data and visualizations for
brk_computerandbrk_indexeracross multiple hardware configurations - Created benchmark directories with disk, I/O, memory, and progress CSV/SVG files:
benches/brk_computer/- Computer benchmark visualizationsbenches/brk_indexer/mac_mini_m4_16gb_ext_ssd/- Mac Mini M4 with external SSDbenches/brk_indexer/mbp_m3_pro_36gb_int_ssd/- MacBook Pro M3 Pro with internal SSD
v0.0.111 - 2025-10-03
Breaking Changes
brk_interface
- Renamed
metric_count()method todistinct_metric_count()andvec_count()tototal_metric_count()for clearer API semantics distinguishing between unique metric names versus total metric-index combinations (source) - Consolidated indexes data structure from separate
indexesvector andaccepted_indexesmap into singleindexesBTreeMap containing index names as keys and their accepted variants as values - Removed redundant
index_count()method in favor of accessingindexes.len()directly
brk_mcp
- Removed
get_index_count()tool from Model Context Protocol interface as index count can be derived from indexes map length (source) - Removed
get_accepted_indexes()tool, consolidating functionality into enhancedget_indexes()tool that returns complete mapping - Updated
get_metric_count()description to clarify it returns count of unique metrics - Updated
get_vec_count()description to explain it returns total metrics (distinct metrics multiplied by supported indexes)
New Features
Website (bitview)
- Enhanced "Coins Destroyed" chart organization by separating "Sum" and "Cumulative" views into distinct sub-charts when comparing multiple cohorts, improving visual clarity and reducing chart clutter (source)
- Maintained backward compatibility with single-cohort view showing both sum and cumulative series in one chart
Internal Changes
brk_fetcher
- Migrated JSON parsing from
sonic_rs::from_str()to standardserde_jsonwith updated response handling using.as_str()instead of.json()for improved compatibility and maintainability (source)
brk_interface
- Switched from
sonic_rstoserde_jsonfor JSON value handling in metrics deserialization for consistent JSON processing across the codebase - Streamlined internal data structures eliminating duplicate index tracking mechanisms
brk_server
- Updated metrics API endpoint
/api/metrics/indexesto use consolidatedget_indexes()method returning complete index-to-variants mapping (source)
Workspace
- Updated all crate versions from 0.0.110 to 0.0.111 across the workspace
v0.0.110 - 2025-10-02
New Features
brk_binder
- Created new crate for generating language binding files to facilitate integration with other programming languages (source)
- Implemented JavaScript binding generator with compressed metric-to-index mappings using base62 encoding for optimized frontend bundle sizes (source)
- Added automatic generation of TypeScript-compatible pool ID mappings with sorted pool names for improved developer experience
- Implemented word frequency analysis to create compressed metric names, reducing JavaScript bundle size and improving load times
- Added version file generation to track binding file compatibility with backend versions
brk_server
- Implemented comprehensive address lookup API endpoint supporting all Bitcoin address types including P2PK, P2PKH, P2SH, P2WPKH, P2WSH, P2TR, and P2A (source)
- Added transaction lookup endpoint with raw transaction decoding from blk files including position-based seeking and XOR decryption
- Created address balance and statistics API providing UTXO counts, sent/received amounts, realized value, and average cost basis
- Implemented real-time USD balance calculation using latest price data for address endpoints
- Reorganized API structure into dedicated
metrics/andexplorer/modules for better code organization and maintainability (source) - Added metrics count endpoint exposing both distinct and total metric counts for API discovery
- Created bulk metrics query endpoint for efficient batch data retrieval
brk_interface
- Implemented
MaybeMetricstype for handling multiple metric queries with automatic sanitization and validation (source) - Added support for both comma-separated string and array formats for metric parameters with configurable size limits (max 32 metrics, 2KB total)
- Implemented automatic metric name normalization converting hyphens to underscores and enforcing lowercase for consistent API usage
- Added metric-to-indexes mapping functionality for discovering available data dimensions per metric
brk_bundler
- Restructured bundler to use centralized
modules/directory instead of website-specific packages for better code reuse (source) - Implemented automatic module copying from
modules/to website source directories before bundling - Added inline constant optimization configuration for improved runtime performance through compile-time constant evaluation
- Enhanced HTML generation with dynamic script path injection based on bundled entry point hashes
Frontend Modules
- Created
brk-clientmodule providing type-safe BRK API client with metrics catalog, pool mappings, and idle callback utilities - Implemented
brk-resourcesmodule for managing shared resources and dependencies across frontend applications - Added
brk-signalsmodule for reactive state management with SolidJS signals compatibility - Centralized third-party dependencies including lightweight-charts 5.0.9, lean-qr 2.6.0, ufuzzy 1.0.19, and solidjs-signals 0.6.3
Internal Changes
brk_cli
- Removed legacy bridge generation code in favor of new
brk_bindercrate for cleaner separation of concerns (source) - Integrated
brk_binderfor automated JavaScript binding file generation during CLI operations
brk_computer
- Removed unused profit/loss metrics from stateful computations to streamline calculation pipelines
- Cleaned up cohort analysis code removing obsolete breakeven metrics for better performance
brk_interface
- Removed legacy
MaybeIdstype in favor ofMaybeMetricsfor more accurate API parameter naming - Enhanced deserialization logic with better error messages for invalid metric formats
- Restructured interface to expose metric catalog and index mappings for API documentation
brk_mcp
- Updated Model Context Protocol integration to use new metrics infrastructure with improved parameter handling
Workspace
- Reorganized project structure moving website packages to centralized
modules/directory for better maintainability - Removed historical asset files reducing repository size and focusing on active development
- Updated solidjs-signals from 0.4.1 to 0.6.3 with enhanced TypeScript definitions and reactive primitives
v0.0.109 - 2025-09-20
New Features
brk_parser
- Implemented new typed block parsing architecture with
AnyBlockenum supporting Raw, Decoded, and Skipped states (source) - Added
ParsedBlockwrapper that combines block data with position metadata and transaction metadata vectors - Introduced binary search optimization for finding starting block indices when parsing from specific heights
- Added concurrent parsing pipeline with parallel block decoding using rayon for improved performance
brk_structs
- Added comprehensive
BlockandParsedBlockdata structures with proper height, hash, and metadata tracking (source) - Implemented
BlkPositionandBlkMetadatatypes for precise block and transaction positioning within blk files - Added
coinbase_tag()method to Block for extracting coinbase transaction script signatures - Migrated
Pool,PoolId, andPoolsstructs from brk_computer for better code organization and reusability
brk_computer
- Created dedicated
blks.rsmodule for tracking block positions and lengths with compressed vector storage (source) - Added
height_to_position,height_to_len,txindex_to_position, andtxindex_to_lencompressed vectors for efficient block data access - Implemented forced import functionality with automatic region retention for optimized storage management
brk_server
- Added scaffolding for new explorer API endpoints in dedicated
explorer.rsmodule (implementation commented for future development) - Renamed
interface.rstovecs.rsand restructured API module organization for better separation of concerns
Internal Changes
brk_parser
- Removed complex
BlkIndexToBlkRecapstate tracking system and associated recap file management to simplify parsing logic - Eliminated
BlkMetadata,BlkRecap,BlockState, and error handling modules that were causing parsing complexity - Streamlined XOR decryption handling with direct byte manipulation instead of state machine patterns
- Replaced tuple-based return types with structured
ParsedBlockobjects for better type safety
brk_interface
- Removed table formatting functionality and simplified output handling for cleaner API design
- Updated format and output modules to work with new parsing architecture
Workspace
- Updated all crate versions from 0.0.107 to 0.0.109 across the workspace
- Optimized development profile settings: reduced opt-level to 2, increased codegen-units to 16, and added split-debuginfo for faster builds
- Updated dependencies: serde (1.0.219 <20> 1.0.225), serde_json (1.0.143 <20> 1.0.145), vecdb (0.2.14 <20> 0.2.16)
- Added
sonic-rsdependency for high-performance JSON processing - Removed
allocative_derivedependency that was no longer needed
Documentation
All Crates
- Comprehensive rewrite of all crate README files with detailed API documentation, usage examples, and installation instructions
- Standardized README format across workspace with consistent structure: overview, features, installation, usage, API reference
- Added professional crates.io badges and proper technical documentation for each crate's purpose and capabilities
- Enhanced code examples with practical use cases and proper error handling patterns
Project Structure
- Reorganized documentation into dedicated
docs/directory withCHANGELOG.md,README.md,TODO.md, andLICENSE.md - Added comprehensive project-level documentation explaining the Bitcoin Research Kit architecture and component relationships
- Moved and updated scripts to
scripts/directory for better project organization
v0.0.107 - 2025-09-13
New Features
brk_computer
- Added comprehensive hash rate analytics with THS (TeraHash/Second) and PHS (PetaHash/Second) pricing models for mining profitability analysis (source)
- Implemented hash price and hash value calculations including minimum thresholds and rebound metrics for market analysis
- Added difficulty adjustment tracking with block and day countdown to next adjustment for network monitoring
- Implemented halving countdown functionality with blocks and days remaining until next halving event
- Added 24-hour rolling coinbase sum tracking in both BTC and USD for mining reward analysis
- Created comprehensive SOPR (Spent Output Profit Ratio) analytics with multi-timeframe standard deviation analysis
- Implemented inflation rate calculations and annualized volume metrics in BTC and USD
- Added transaction velocity, per-second transaction metrics, and input/output rate tracking for network activity analysis
brk_structs
- Enhanced OHLC (Open, High, Low, Close) data structures with StoredF64 conversion capabilities for improved financial data handling (source)
- Added CheckedSub implementation for Bitcoin struct to enable safe arithmetic operations between Bitcoin amounts
- Enhanced StoredF32 and StoredF64 types with additional mathematical utility methods
Internal Changes
brk_computer
- Removed complex ComputedVecBuilder system and streamlined computation architecture for better maintainability
- Refactored lazy and eager vector builders to eliminate redundant computed builder patterns
- Reorganized stateful computation modules with improved address and UTXO cohort management
- Simplified chain computation logic by consolidating version handling and removing unused computation paths
- Enhanced market data processing with better price integration and SOPR calculation efficiency
Workspace
- Added new clippy development profile with optimized settings for faster linting during development
Website Enhancements
Frontend
- Improved ratio-based chart options with cleaner naming conventions (removed "_in_usd" suffix for better readability)
- Enhanced SOPR visualization options with multi-timeframe standard deviation displays
- Added new data series configurations for hash rate analytics and mining profitability charts
- Updated chart legends and color schemes for better user experience and data clarity
v0.0.106 - 2025-09-09
New Features
brk_computer
- Added mathematical constants
constant_38_2andconstant_61_8for precise financial ratio calculations (source) - Standardized percentile naming from
p10,p25,p75,p90topct10,pct25,pct75,pct90for improved code clarity (source)
brk_structs
- Enhanced Dollars struct with comprehensive OHLC (Open, High, Low, Close) conversion support for better financial data integration (source)
- Added proper type conversions between OHLC price components and dollar amounts
Internal Changes
Workspace
- Added explicit Rust toolchain specification pinned to version 1.89.0 for consistent compilation across development environments
- Improved statistical calculation accuracy with standardized percentile naming conventions
Website Enhancements
Frontend
- Enhanced chart visualization capabilities with improved data presentation
- Updated statistical displays to use standardized percentile naming for better user understanding
v0.0.105 - 2025-09-08
New Features
Distribution System
- Added cargo-dist configuration for automated cross-platform binary distribution with GitHub CI integration
- Enabled pre-built binary releases for aarch64-apple-darwin (macOS ARM64), aarch64-unknown-linux-gnu (Linux ARM64), and x86_64-unknown-linux-gnu (Linux x86_64)
- Configured automated release workflow with Rust toolchain version 1.89 for consistent builds
Internal Changes
Workspace
- Integrated cargo-dist v0.30.0 for streamlined release management and binary distribution
- Added distribution metadata configuration to simplify installation process for end users
v0.0.104 - 2025-09-08
Internal Changes
CI/CD Infrastructure
- Updated GitHub Actions release workflow to use cargo-dist v0.30.0 for improved release automation (source)
- Added foundational cargo-dist metadata configuration to prepare for automated binary distribution
- Enhanced release pipeline reliability with updated tooling and workflow improvements
v0.0.103 - 2025-09-08
New Features
brk_computer
- Added comprehensive price volatility analytics with 1-week, 1-month, and 1-year standard deviation calculations for returns analysis (source)
- Implemented advanced market risk metrics including rolling volatility indicators for better risk assessment
- Enhanced standard deviation calculations with optional z-score support and configurable statistical analysis (source)
- Refactored statistical computation modules to make calculations optional for improved performance and flexibility
brk_bundler
- Updated bundler configuration for optimized JavaScript asset compilation and improved frontend performance
Internal Changes
brk_computer
- Converted fixed standard deviation bands to optional calculations, reducing computational overhead when specific metrics aren't needed
- Streamlined market analysis architecture with better separation between volatility calculations and price analysis
- Enhanced statistical accuracy in ratio and standard deviation computations
Website Enhancements
Frontend
- Added support for new volatility and risk metrics in chart configurations
- Enhanced data visualization capabilities for displaying standard deviation bands and volatility indicators
- Improved chart options to accommodate advanced market analysis features
v0.0.101 - 2025-09-07
New Features
brk_structs
- Added Sum trait implementation for StoredF64 to enable collection aggregation and improved mathematical operations (source)
- Implemented division by Dollars for StoredF64 to support ratio calculations in financial analysis
brk_computer
- Upgraded SOPR (Spent Output Profit Ratio) calculations from StoredF32 to StoredF64 for enhanced precision in profit/loss analysis (source)
- Enhanced SOPR-related metrics including 7-day and 30-day exponential moving averages with double precision
- Improved adjusted SOPR calculations for more accurate short-term holder analysis
Internal Changes
brk_computer
- Removed unused imports and streamlined module dependencies for improved compilation efficiency
- Updated SOPR computation version handling to ensure proper recalculation with enhanced precision
brk_interface
- Simplified interface ID handling and reduced code complexity for better maintainability
Website Enhancements
Frontend
- Improved chart titles and interface labels for better user clarity, particularly for mining dominance displays
- Enhanced user experience with more descriptive chart naming conventions
v0.0.100 - 2025-09-07
New Features
brk_computer
- Created comprehensive mining pool analytics system with dedicated pools tracking module (source)
- Implemented mining pool dominance analysis with 1-day, 1-week, 1-month, and 1-year timeframes
- Added mining pool subsidy, fee, and coinbase reward tracking for economic analysis
- Created days-since-block mining for pool activity monitoring and mining frequency analysis
brk_structs
- Enhanced mathematical operations across all stored numeric types with comprehensive arithmetic support (source)
- Added StoredU32 to StoredF32 conversions and cross-type division operations for better data interoperability
- Implemented utility methods including
is_zero()checks and mathematical constants for improved API consistency - Added allocative trait derivations across all data structures for detailed memory usage tracking and performance optimization
brk_cli
- Expanded bridge system with automated pools data export for website integration (source)
- Enhanced website generation workflow with comprehensive data bridge file creation
- Improved CLI configuration and data export capabilities for better development workflow
Internal Changes
brk_computer
- Restructured pools module architecture with dedicated vector storage and computation systems
- Enhanced pool identification and tracking systems with improved data organization
- Streamlined computation workflows with better separation of mining pool analytics
brk_indexer
- Simplified indexer architecture and reduced code complexity for better maintainability
- Enhanced data processing efficiency with streamlined storage operations
Multiple Crates
- Added comprehensive allocative memory tracking across all major data structures for performance monitoring
- Standardized arithmetic operations and type conversions across the entire numeric type system
- Enhanced error handling and validation in mathematical operations
Website Enhancements
Frontend
- Major improvements to mining pool visualization with enhanced chart displays and dominance tracking
- Expanded table functionality with better data presentation and user interaction
- Enhanced chart options with comprehensive mining pool analytics integration
- Improved performance and user experience with updated data visualization libraries
v0.0.98 - 2025-09-05
New Features
brk_computer
- Created foundational mining pools system with comprehensive database of 166 predefined mining pools including identification by coinbase tags and addresses (source)
- Implemented target block count analytics for all time intervals including daily, weekly, monthly, quarterly, semester, yearly, and decade targets (source)
- Added mining pool identification system using coinbase transaction analysis and known pool addresses
- Created pools example demonstrating mining pool analysis capabilities
brk_interface
- Implemented robust MaybeIds system for handling multiple ID parameter formats with comprehensive validation and sanitization (source)
- Enhanced API parameter handling with support for both string and array formats
- Added input validation with configurable limits for string size and array length
Internal Changes
brk_computer
- Enhanced stateful computation organization with improved efficiency for complex analytics
- Restructured chain computation constants with better mathematical precision for target calculations
- Streamlined pools module architecture for better data organization and access patterns
brk_store
- Optimized store operations with reduced complexity and improved data access efficiency
- Removed unused functionality and streamlined storage interfaces
brk_fetcher
- Minor improvements to BRK API integration for better data fetching reliability
Website Enhancements
Frontend
- Added foundational support for mining pool visualization in chart configurations
- Enhanced website structure with mining pool data integration capabilities
- Improved chart options to accommodate future mining pool analytics displays
v0.0.96 - 2025-09-03
New Features
brk_structs
- Created comprehensive StoredString data type with ByteView integration for efficient string storage and serialization (source)
- Enhanced FeeRate calculations with improved mathematical operations and precision handling
- Added utility methods to Date and Timestamp structs for better temporal data manipulation
- Expanded StoredF64 with additional mathematical operations and conversion capabilities
brk_computer
- Major module restructuring: consolidated blocks and mining functionality into unified chain module for better Bitcoin blockchain analysis organization (source)
- Renamed
transactions.rstochain.rsto better reflect comprehensive blockchain transaction and block analysis - Enhanced market analysis with improved price calculations and volatility metrics
- Streamlined stateful computations with better organization of address and UTXO cohort analysis
brk_interface
- Enhanced API interfaces with improved data access patterns and better error handling
- Added support for new data types and expanded parameter handling capabilities
- Improved index management with more robust validation and processing
Internal Changes
brk_computer
- Consolidated blockchain analysis modules for better code organization and reduced complexity
- Enhanced computation efficiency across market, price, and stateful analysis modules
- Improved memory management and data flow in complex analytical operations
brk_indexer
- Streamlined indexing operations with better data processing efficiency
- Enhanced vector storage and retrieval operations for improved performance
- Improved indexer examples with clearer demonstration of functionality
brk_parser
- Enhanced block parsing capabilities with better error handling and validation
- Improved parser examples demonstrating advanced blockchain data extraction techniques
brk_server
- Enhanced API module organization with improved interface handling
- Better integration with updated interface and data access patterns
Website Enhancements
Typography and Design
- Updated to modern GeistMono and Lilex font families for improved readability and professional appearance
- Enhanced asset management with optimized font loading and better file organization
- Improved service worker functionality for better offline capabilities
Chart and Visualization
- Major improvements to chart rendering capabilities with enhanced interactivity and data visualization
- Expanded chart options with new data series types and better configuration flexibility
- Enhanced table functionality with improved data presentation and user interaction
- Added support for new data types including hash rate (H/s) and address data visualization
Development Environment
- Added Zed editor configuration for improved development workflow
- Enhanced development tooling and editor integration
Documentation
Multiple Crates
- Comprehensive README updates across brk, brk_indexer, brk_mcp, brk_parser, and brk_server crates
- Improved documentation clarity with better examples and usage instructions
- Enhanced project-level documentation with updated architecture descriptions
v0.0.95 - 2025-08-28
New Features
brk_computer
- Added comprehensive unrealized profit and loss analytics with advanced relative metrics calculations (source)
- Implemented unrealized profit plus loss aggregation metrics for comprehensive holder analysis
- Created relative profitability metrics including ratios to own market cap and own unrealized profit plus loss
- Added multi-dimensional profit/loss analysis with separate positive and negative unrealized loss tracking
- Enhanced holder profitability analysis with extensive cross-referencing between different calculation methods
Website Enhancements
Chart and Visualization
- Added new unit types for advanced profit/loss visualization:
%cmcap(relative to own market cap) and%cp+l(relative to own unrealized profit plus loss) - Enhanced price line functionality with configurable colors and line styles for improved chart customization
- Improved chart options with better visual distinction between different profitability metrics
- Added support for displaying complex relative profitability calculations with proper unit labeling
User Interface
- Enhanced chart configuration with more flexible price line customization options
- Improved data visualization clarity for sophisticated profit/loss analytics
- Better integration of advanced metrics into existing chart framework
v0.0.94 - 2025-08-28
New Features
brk_computer
- Added comprehensive SOPR (Spent Output Profit Ratio) analytics with 7-day and 30-day exponential moving averages (source)
- Implemented adjusted SOPR calculations with exponential moving averages for enhanced transaction profitability analysis
- Created sell-side risk ratio metrics with 7-day and 30-day exponential moving averages for advanced market risk assessment
- Enhanced unrealized profit/loss analytics with relative calculations to market cap for comprehensive holder analysis
- Added extended configuration options for stateful computations with improved flexibility and performance
Website Transformation
Major Rebranding
- Complete rebrand from "default" to "bitview" with new domain reference (bitview.space) and professional identity
- Updated README and documentation to reflect new branding and simplified domain structure
- Reorganized website assets and structure for better organization and scalability
Progressive Web App (PWA) Implementation
- Added comprehensive PWA support with complete Apple touch icon and splash screen sets for all device sizes
- Implemented web app manifest with proper configuration for native app-like installation experience
- Created device-specific splash screens for optimal mobile user experience across iPhone and iPad variants
- Added proper PWA metadata and configuration for improved mobile usability
Asset and Structure Organization
- Moved website from
websites/defaulttowebsites/bitviewfor better project organization - Added modern font assets (GeistMono and Lilex) for improved typography and readability
- Reorganized packages and dependencies with better structure and maintainability
- Simplified TypeScript configuration and reduced development complexity
Internal Changes
brk_computer
- Enhanced UTXO cohort analysis with improved parameter handling and configuration flexibility
- Streamlined stateful computation architecture with better organization of advanced metrics
- Improved computational efficiency for complex profit/loss and risk calculations
Development Workflow
- Simplified frontend development approach with reduced TypeScript complexity
- Improved asset management and build processes for better development experience
- Enhanced website configuration and deployment processes
v0.0.93 - 2025-08-26
New Features
Website Screenshot Capabilities
- Added comprehensive screenshot functionality using modern-screenshot package for high-quality chart and data visualization capture (source)
- Implemented 2x scale rendering for crisp, professional-quality screenshot output
- Added automatic screenshot opening in new tabs with proper URL cleanup for optimal user experience
Chart Enhancement and Branding
- Added domain watermarking to charts for proper attribution and source identification (source)
- Enhanced chart presentation with integrated branding for professional appearance
- Improved chart layout and visual organization for better data presentation
Website Enhancements
User Interface Improvements
- Enhanced website styling with dedicated screenshot mode support for clean capture
- Improved visual presentation with better element spacing and layout optimization
- Added screenshot button integration with conditional display logic for better user experience
Package and Dependency Updates
- Updated ufuzzy dependency from v1.0.18 to v1.0.19 for improved search functionality
- Added modern-screenshot v4.6.6 package for advanced screenshot capabilities
- Enhanced package management with better organization and dependency handling
Internal Changes
Development Workflow
- Streamlined TODO list by removing completed tasks and outdated development items
- Simplified project roadmap focus with cleaner task organization
- Improved development priorities and task tracking
Website Structure
- Enhanced HTML structure with better CSS organization for screenshot functionality
- Improved element styling and layout for optimal visual presentation
- Better integration of new features with existing website architecture
v0.0.91 - 2025-08-26
New Features
brk_computer
- Added comprehensive Exponential Moving Average (EMA) calculations for all major timeframes matching SMA counterparts (source)
- Implemented EMA support for 1w, 8d, 13d, 21d, 1m, 34d, 55d, 89d, 144d, 200d, 1y, 2y, 200w, and 4y periods
- Enhanced technical analysis capabilities with both Simple Moving Averages (SMA) and Exponential Moving Averages (EMA) for sophisticated trend analysis
- Added mathematical constants 144 and 600 for Bitcoin-specific calculations (blocks per day and standard analysis periods) (source)
- Simplified constants computation with loop-based implementation for better maintainability and performance
brk_structs
- Enhanced OHLC (Open, High, Low, Close) data structures with improved mathematical operations for better financial analysis
- Improved Sats and StoredF32 types with additional utility methods for enhanced precision in calculations
Website Enhancements
Typography and Design
- Added Lilex font family for improved code readability and professional data presentation
- Enhanced typography with dedicated monospace font for better numeric data display and code visibility
Chart Configuration and Customization
- Enhanced price line creation with customizable naming capabilities for better chart personalization
- Improved average series configuration with optional title customization for clearer data presentation
- Better chart options organization with more intuitive naming conventions (e.g., "100K+ btc" instead of "100K btc+")
- Enhanced chart configuration flexibility with improved parameter handling
Internal Changes
brk_computer
- Streamlined constants computation architecture with more efficient loop-based calculations
- Enhanced market analysis module with comprehensive EMA implementation alongside existing SMA calculations
- Improved ratio computations with better organization and performance optimizations
brk_indexer
- Enhanced indexer functionality with improved data processing capabilities
- Better integration with new constants and mathematical operations
Development Workflow
- Simplified TODO management with better task organization and priority tracking
- Enhanced development workflow with improved mathematical operations and constants handling
v0.0.90 - 2025-08-24
Documentation
Release Management
- Converted "Unreleased" changelog section to properly formatted v0.0.89 release with comprehensive source code links
- Enhanced changelog structure with professional formatting and detailed feature documentation
- Added direct links to source code for all major features and architectural changes
- Improved documentation organization with better categorization and technical details
v0.0.89 - 2025-08-24
Documentation
Comprehensive README Overhaul
- Enhanced comprehensive rewrite of all crate README files for improved clarity and developer experience across all workspace crates (source)
- Updated main project README with better structure and comprehensive architecture documentation (source)
- Standardized README format across all workspace crates with consistent styling and improved developer experience
- Added more detailed descriptions for each crate's purpose and functionality with examples
New Features
brk_computer - Major Refactoring
- Refactored ComputedFrom pattern to LazyFrom pattern for improved performance and memory efficiency (source)
- Added new LazyVecBuilder implementation for on-demand computation with support for first, average, sum, max, min, last, and cumulative operations
- Restructured Computer module stateful operations with improved organization and rollback functionality (source)
- Enhanced address type organization into dedicated module structure (source)
- Improved stateful rollback functionality for better error recovery and blockchain reorganization handling
brk_structs
- Added new StoredI16 data type for efficient 16-bit signed integer storage with compression support (source)
- Enhanced StoredF32 with additional utility methods for mathematical operations (source)
Website Frontend
Package Management Overhaul
- Updated solid-signals from v0.3.2 to solidjs-signals v0.4.1 for improved reactivity and performance (source)
- Enhanced frontend package management and dependency organization
- Improved chart rendering performance with updated signal library
- Reorganized package structure with better organization and maintainability
Internal Changes
Build System
- Updated all crate versions from 0.0.88 to 0.0.89 across the workspace
- Enhanced Cargo.toml dependency management and version consistency (source)
- Added comprehensive CHANGELOG.md with professional formatting and detailed documentation
Development Infrastructure
- Improved development workflow with better package management
- Enhanced project organization with standardized documentation structure
- Better integration between frontend and backend components
v0.0.88 - 2025-08-10
Build System
Rust Environment Standardization
- Added explicit Rust version specification (1.89) to workspace configuration for consistent compilation across development environments
- Enhanced build reliability with standardized toolchain requirements
- Improved development environment consistency and reduced compilation variance
Website Enhancements
SOPR Visualization Improvements
- Enhanced SOPR (Spent Output Profit Ratio) chart configuration with improved key handling and better code organization
- Added conditional display logic for adjusted SOPR (aSOPR) charts when data is available
- Improved chart organization with cleaner key generation and more robust data handling
- Better separation between standard SOPR and adjusted SOPR visualization options
Internal Changes
Version Management
- Updated all crate versions from 0.0.87 to 0.0.88 across the workspace for consistent release management
- Enhanced workspace version coordination and dependency consistency
v0.0.87 - 2025-08-10
Breaking Changes
- Vector Storage Architecture Refactor: Replaced internal
brk_vecscrate with externalizedvecdbcrate, moving vector storage functionality to a separate project while maintaining the same core functionality (Cargo.toml)
Architecture Improvements
- Crate Externalization: Migrated vector storage implementation from internal
brk_vecsandbrk_vecs_macrosto externalvecdbandvecdb_derivecrates, enabling independent development and versioning of the vector storage system - Sequential Database Foundation: Added
seqdbas the underlying sequential data storage engine powering the vector database functionality - Workspace Simplification: Removed
brk_vecsandbrk_vecs_macrosfrom the workspace, reducing codebase complexity and focusing on Bitcoin-specific functionality (crates/brk/Cargo.toml)
API Changes
- Vector Interface Consistency: Updated all vector references from
brk_vecstovecdbwhile maintaining identical API surface for seamless transition (crates/brk/src/lib.rs) - Documentation Updates: Updated README and project documentation to reflect the new external vector database dependency (README.md)
Development Experience
- Modular Development: Enables independent development of vector storage functionality separate from Bitcoin analysis logic
- Local Development Support: Added commented local path configuration for easier development workflow when working on both projects simultaneously
v0.0.85 - 2025-08-07
Bug Fixes
- Logging Filter Correction: Fixed typo in logger filter configuration, changing
rmcp=offtobrk_rmcp=offto properly suppress unwanted logs from the RMCP protocol module (crates/brk_logger/src/lib.rs)
Configuration Changes
- MCP Server Configuration: Removed stateful mode setting from MCP server configuration, enabling more flexible protocol handling and improved compatibility with different client implementations (crates/brk_mcp/src/route.rs)
v0.0.84 - 2025-08-07
Breaking Changes
- Major Architecture Restructuring: Complete reorganization of the codebase with extraction of core functionality into dedicated crates (
brk_structs,brk_error) and comprehensive modularization of all components for better maintainability and reusability - Struct System Overhaul: Moved all Bitcoin-related structures from
brk_coreto newbrk_structscrate with enhanced grouping capabilities, comprehensive address types, and improved serialization support (crates/brk_structs/src/lib.rs)
New Features
- Centralized Error Handling: Introduced
brk_errorcrate providing unified error handling across all BRK components with comprehensive error types for different subsystems (crates/brk_error/src/lib.rs) - Advanced Address Analytics: Enhanced address grouping system with comprehensive filtering capabilities including by address type, amount ranges, age ranges, epochs, terms, and spendable/unspendable classifications (crates/brk_structs/src/groups/mod.rs)
- Vector Macro System: Added
brk_vecs_macroscrate providing procedural macros for automated vector trait implementations and boilerplate reduction (crates/brk_vecs_macros/src/lib.rs) - Enhanced Data Types: Comprehensive Bitcoin data type system including transaction IDs, block hashes, raw locktime, version numbers, and specialized index types for all Bitcoin primitives (crates/brk_structs/src/structs/mod.rs)
Architecture Improvements
- Modular Design: Complete separation of concerns with dedicated crates for different functionality areas, enabling better code organization and independent versioning
- Build System Enhancement: Added comprehensive build scripts across all crates with
cargo-distintegration for automated release management and distribution (.github/workflows/release.yml) - Price Analysis: New dedicated price analysis module with enhanced market data processing and price-to-amount state tracking (crates/brk_computer/src/price.rs)
Developer Experience
- Comprehensive Documentation: Added README files and examples for all major crates, providing clear usage instructions and API documentation
- Enhanced Examples: Expanded example collection demonstrating various BRK components and usage patterns across all crates
- Development Tools: Improved development workflow with better build scripts, dependency management, and testing infrastructure
Performance Improvements
- Vector System: Enhanced vector system with improved compression, better memory management, and optimized I/O operations through the redesigned
brk_vecsarchitecture - State Management: Improved state tracking with dedicated modules for block states, realized/unrealized values, supply tracking, and transaction analysis
Infrastructure
- CI/CD Enhancement: Updated GitHub Actions workflow with improved Ubuntu runner (22.04) and enhanced release automation
- Docker Improvements: Enhanced Docker configuration with better environment handling and deployment options
Social Media
- Platform Updates: Updated social media links removing outdated platforms and focusing on active community channels (README.md)
v0.0.83 - 2025-07-26
New Features
- Cross-Platform Hole Punching: Added Linux support for file hole punching operations using
fallocatesystem call, expanding platform compatibility beyond macOS for efficient sparse file management (crates/brk_vecs/src/file/mod.rs)
Performance Improvements
- Platform-Specific Optimization: Implemented platform-specific hole punching strategies with optimized system calls for both macOS (
fcntlwithF_PUNCHHOLE) and Linux (fallocate), improving storage efficiency and I/O performance on different operating systems
Internal Changes
- Code Organization: Refactored hole punching implementation with unified
punch_hole_impl()method that dispatches to platform-specific implementations, improving code maintainability and reducing duplication - Error Handling: Enhanced error handling for unsupported platforms with clear error messages for hole punching operations
v0.0.82 - 2025-07-26
Breaking Changes
- Vector System Refactoring: Replaced
brk_vecwith newbrk_vecscrate, introducing a completely redesigned vector storage system with improved file layouts, better compression, and enhanced performance characteristics (crates/brk_vecs/src/lib.rs)
New Features
- Advanced Vector Architecture: Introduced comprehensive vector system with multiple storage variants including
RawVec,CompressedVec,ComputedVec,EagerVec,LazyVec, andStampedVecfor different use cases and performance requirements (crates/brk_vecs/src/variants/mod.rs) - File-Based Storage: New file-based storage system with dedicated
FileandReaderimplementations, featuring page-based architecture and memory mapping for efficient disk I/O (crates/brk_vecs/src/file/mod.rs) - Stamped Vectors: Added timestamped vector support with
StampedVecandStampstructures for versioned data management and temporal analysis (crates/brk_vecs/src/variants/stamped/mod.rs)
Architecture Improvements
- Lazy Computation: Enhanced lazy evaluation system with support for 1, 2, and 3-source computed vectors, enabling complex data transformations with minimal memory overhead (crates/brk_vecs/src/variants/lazy/mod.rs)
- Compression Optimization: Redesigned compression system with page-based metadata management and improved compression ratios for large datasets (crates/brk_vecs/src/variants/compressed/mod.rs)
- Type System Enhancement: Improved trait system with dedicated interfaces for different vector operations, providing better type safety and performance (crates/brk_vecs/src/traits/mod.rs)
Performance Improvements
- Build Optimization: Updated build scripts to focus on release builds for better performance in production deployments (update.sh)
- Memory Management: Enhanced memory usage patterns with better file mapping strategies and reduced memory footprint for large-scale Bitcoin data processing
Infrastructure
- Comprehensive Examples: Added extensive examples demonstrating various vector types and usage patterns for better developer onboarding (crates/brk_vecs/examples/)
- Documentation: Enhanced documentation with detailed explanations of vector architectures and storage strategies
Internal Changes
- Address Handling: Improved address byte hash management and height-based indexing for better address analytics performance
- Group Processing: Enhanced address and UTXO grouping capabilities with better filtering and processing mechanisms
- Error Handling: Refined error handling throughout the vector system for more robust data operations
v0.0.81 - 2025-07-17
Breaking Changes
- Computer Module Restructuring: Major reorganization of the computer module from nested
vecsstructure to flat module layout, moving vector implementations directly into separate modules (all,blocks,cointime,constants,fetched,grouped,indexes,market,mining,stateful,transactions) for better maintainability (crates/brk_computer/src/lib.rs)
New Features
- Docker Support: Added comprehensive Docker setup with Dockerfile, docker-compose configuration, environment templates, and detailed documentation for containerized BRK deployment (docker/README.md)
- Address Index System: Implemented new address indexing architecture with
AnyAddressIndex,EmptyAddressIndex, andLoadedAddressIndexstructures for more efficient address data management (crates/brk_core/src/structs/anyaddressindex.rs) - Enhanced Address Grouping: Added comprehensive address filtering and grouping capabilities with
by_address_type,by_any_address, and flexible filter systems (crates/brk_core/src/groups/mod.rs)
Architecture Improvements
- Stateful Processing: Enhanced stateful vector processing with dedicated traits and improved address data source handling (crates/brk_computer/src/stateful/trait.rs)
- Address Analytics: Added sophisticated address counting and analysis capabilities with support for different address types and cohort analysis
- Module Organization: Flattened module hierarchy eliminating nested structures for clearer code organization and easier navigation
Infrastructure
- Container Deployment: Full Docker containerization support with multi-stage builds, environment configuration, and production-ready setup
- Build Optimization: Enhanced build scripts and profiling tools for better development workflow
Documentation
- Website Updates: Added
brekit.orgas primary domain in README alongside existing mirrors (README.md) - Docker Guide: Comprehensive Docker setup and deployment documentation with prerequisites, configuration, and usage instructions
v0.0.80 - 2025-07-13
Performance Improvements
- Vector Length Caching: Added local length caching in raw vectors with
local_stored_lenfield, reducing atomic operations and improving read performance by storing frequently accessed length values locally (crates/brk_vec/src/variants/raw.rs)
API Enhancements
- Length Management: Introduced
set_stored_len()method for direct length management, providing better control over vector metadata and synchronization between local and shared length values
Documentation
- README Cleanup: Removed detailed AI example links from main README to streamline content and focus on core functionality, improving readability and reducing maintenance overhead (README.md)
- MCP Documentation: Added dedicated README for Model Context Protocol integration with comprehensive usage examples and setup instructions (crates/brk_mcp/README.md)
Internal Changes
- Vector Architecture: Enhanced raw and compressed vector implementations with improved length tracking mechanisms for better performance and consistency
v0.0.79 - 2025-07-13
Performance Improvements
- File Handle Optimization: Reduced minimum file handle limit from 250,000 to 10,000, significantly lowering system resource requirements while maintaining adequate file access for most Bitcoin datasets (crates/brk_core/src/utils/rlimit.rs)
Breaking Changes
- Vector Memory Architecture: Replaced
ArcSwap<Mmap>withArc<AtomicUsize>for stored length tracking in raw vectors, eliminating memory mapping overhead and improving concurrent access patterns while reducing memory usage (crates/brk_vec/src/variants/raw.rs)
Internal Changes
- Vector Storage Simplification: Removed arc-swap dependency from vector variants, streamlining memory management and reducing complexity in concurrent scenarios
- Store Integration: Enhanced indexer store integration with better error handling and resource management
- Header Management: Improved vector header handling for more efficient metadata operations
v0.0.78 - 2025-07-13
New Features
- Semester Index Support: Added
SemesterIndexstruct for 6-month interval datasets, enabling bi-annual analysis of Bitcoin metrics with proper serialization and mathematical operations (crates/brk_core/src/structs/semesterindex.rs) - Enhanced Vector Architecture: Refactored vector computation infrastructure with improved
VecBuilderOptionsandSourcehandling for more flexible dataset generation (crates/brk_computer/src/vecs/grouped/builder_computed.rs)
Architecture Improvements
- Vector Builder Refactoring: Renamed
StorableVecGeneatorOptionstoVecBuilderOptionsfor better naming consistency and enhanced vector generation capabilities - Cointime Integration: Enhanced cointime computation with better indexing support and computation parameter handling
- Profiling Tools: Added dedicated flamegraph and samply profiling scripts for the computer module to aid performance analysis
Development Experience
- Documentation Updates: Expanded TODO list with additional feature requests including chopiness datasets, reused address analytics, z-score chart improvements, and HTTPS support
- Profiling Support: Added flamegraph.sh and samply.sh scripts to the computer module for better performance debugging capabilities
v0.0.76 - 2025-07-09
Build System Updates
- Rolldown Bundler: Updated
brk_rolldownfrom 0.1.0 to 0.1.1 with improvements across all bundler components including enhanced ECMAScript utilities, better plugin architecture, and improved string manipulation capabilities (crates/brk_bundler/Cargo.toml)
v0.0.75 - 2025-07-09
Performance Improvements
- Chunk Size Optimization: Adjusted parallel processing chunk size from length/4 to length/3, increasing parallelization granularity for better performance on high-end storage systems while maintaining external drive protection (crates/brk_computer/src/vecs/stateful/mod.rs)
v0.0.74 - 2025-07-09
Performance Improvements
- Parallel Processing Optimization: Refactored stateful vector computation to use chunked parallel processing with controlled chunk sizes (length/4) instead of unbounded parallelization, preventing external drive bottlenecks and improving performance on Thunderbolt 4 SSDs (crates/brk_computer/src/vecs/stateful/mod.rs)
- Thread Scope Elimination: Replaced complex thread scope management with streamlined Either-based collection processing, reducing threading overhead and improving memory usage patterns during computation
Bug Fixes
- Memory Table Rotation Logging: Fixed missing log message for memory table rotation operations, improving debugging and monitoring capabilities during store operations (crates/brk_computer/src/stores.rs)
Internal Changes
- Computation Architecture: Unified UTXO and address vector processing using Either enum for type-safe handling of different vector types while maintaining performance through parallel iteration
- Chunk-based Processing: Implemented intelligent chunking strategy to prevent overwhelming external storage devices while maintaining parallelization benefits
v0.0.73 - 2025-07-09
Breaking Changes
- Architecture Restructuring: Removed
brk_statecrate entirely, consolidating its functionality intobrk_computerwith direct store and serialization dependencies, simplifying the overall architecture and reducing module complexity - Build System Upgrade: Updated
brk_rolldownbundler from 0.0.1 to 0.1.0 with significant API changes including removal of deprecated loader utilities and addition of hot module replacement support
New Features
- Hot Module Replacement: Added HMR plugin support for improved development experience with live code updates and faster iteration cycles during bundling operations
- Advanced Hashing: Integrated Blake3 hashing algorithm for improved performance in debug operations and file integrity verification
Internal Changes
- Computer Module Enhancement: Added bincode serialization, zerocopy optimizations, and derive_deref functionality directly to the computer module for better performance
- Store Integration: Enhanced store module with logging capabilities for better debugging and monitoring
- Plugin Architecture: Expanded bundler plugin system with data URI support and improved ECMAScript utilities
v0.0.71 - 2025-06-25
New Features
- Enhanced Schema Documentation: Added comprehensive descriptions to all Index enum variants and API parameters, providing clear explanations for date/day index, height/block index, transaction indexes, address types, and time periods for better API usability (crates/brk_interface/src/index.rs, crates/brk_interface/src/params.rs)
API Changes
- MCP Tool Modernization: Upgraded Model Context Protocol implementation to use new
tool_routerandParameterswrapper for better type safety and parameter handling, replacing legacytool_boxapproach (crates/brk_mcp/src/lib.rs) - Endpoint Renaming: Renamed
get_variant_counttoget_vec_countfor better consistency with API terminology
Internal Changes
- Development Flexibility: Added commented local development path for
brk_rmcpto facilitate easier testing and development workflows
v0.0.70 - 2025-06-24
New Features
- Model Context Protocol Default: Enabled MCP (Model Context Protocol) by default for LLM integration, changing from opt-in to opt-out behavior to make AI-powered Bitcoin data analysis more accessible (crates/brk_cli/src/config.rs)
API Changes
- Simplified Endpoints: Streamlined API endpoints by replacing complex query parameters with dedicated paths (
/height-to-ohlcand/dateindex-to-ohlc) for cleaner and more intuitive data access (crates/brk_fetcher/src/brk.rs)
Internal Changes
- Module Restructuring: Flattened fetcher module structure by moving fetcher implementations directly into the main crate, eliminating nested module hierarchy for better maintainability
- Documentation: Updated API badge URL to reflect new vec-count endpoint and improved MCP tool description clarity (README.md)
- Code Cleanup: Removed commented debug code and unused file handle references from raw vector implementation
v0.0.69 - 2025-06-24
Performance Improvements
- Vector Initialization Optimization: Removed thread-based parallel initialization of indexes and fetched vectors, replacing with sequential initialization to reduce overhead and improve memory usage patterns during startup (crates/brk_computer/src/vecs/mod.rs)
- File Handle Management: Refactored vector file handling architecture to use on-demand file opening instead of persistent file handles, reducing memory footprint and file descriptor usage (crates/brk_vec/src/variants/raw.rs)
Internal Changes
- Resource Limit Adjustment: Reverted file handle limit back to 210,000 from 420,000, optimizing for more conservative resource usage
- Header Write Logic: Simplified vector header writing by removing conditional logic and always performing write operations when needed, improving code clarity and reducing potential race conditions (crates/brk_vec/src/structs/header.rs)
- Memory Map Updates: Refactored memory map update logic to accept file references directly, eliminating need for persistent file handle storage and improving resource management
- Code Cleanup: Removed unused imports and simplified vector trait implementations for better maintainability
v0.0.68 - 2025-06-24
New Features
- CLI Version Information: Added version command support to CLI configuration, enabling users to check the current version of BRK directly from the command line (crates/brk_cli/src/config.rs)
Performance Improvements
- File Handle Limits: Doubled the minimum file handle limit from 210,000 to 420,000 to accommodate larger Bitcoin datasets and prevent resource exhaustion during intensive blockchain processing operations (crates/brk_core/src/utils/rlimit.rs)
v0.0.67 - 2025-06-24
New Features
- Data Interface Layer: Added
brk_interfacecrate providing a comprehensive data interface layer with serialization, schema generation, and tabular formatting capabilities for exporting datasets in multiple formats (JSON, CSV, TSV, Markdown) - Model Context Protocol Support: Introduced
brk_mcpcrate implementing Model Context Protocol (MCP) for seamless integration with Large Language Models, enabling AI-powered Bitcoin data analysis and querying - External MCP Integration: Added
brk_rmcpexternal dependency for robust MCP client/server communication capabilities
Breaking Changes
- Dependency Restructuring: Removed direct
brk_querydependency from CLI, replaced with modularbrk_interfaceandbrk_mcparchitecture for better separation of concerns - Storage Simplification: Removed
arc-swapandfjalldependencies frombrk_state, streamlining state management architecture
Internal Changes
- Build System: Added auto-generated
vecid-to-indexes.jsfile to gitignore to prevent version control conflicts - Documentation Updates: Updated historical changelog entries to reflect correct repository URLs and asset paths, migrating from kibo-money references to bitcoinresearchkit organization
- Dependency Updates: Updated multiple core dependencies including
async-compression,autocfg,errno, andsynto their latest versions for improved performance and compatibility
v0.0.66 - 2025-06-19
New Features
- Cointime Analysis: Added comprehensive cointime economic metrics including coinblocks creation/storage tracking, liveliness and vaultedness calculations, activity ratios, and specialized price metrics (vaulted price, active price, true market mean, cointime price) with corresponding market cap calculations (crates/brk_computer/src/vecs/cointime.rs)
- Advanced Supply Analysis: Implemented vaulted and active supply tracking with dollar value computations, enabling analysis of Bitcoin storage behavior and economic activity patterns
Documentation
- CLI Documentation: Improved CLI README with better formatting, clearer installation instructions, enhanced usage examples, and restructured content with proper markdown syntax and information blocks (crates/brk_cli/README.md)
- Installation Guidance: Added prominent installation notes for Ubuntu users and improved download section formatting with better link formatting and structure
Internal Changes
- Ratio Analysis Integration: Connected cointime price metrics with ratio analysis system for comprehensive trend analysis across vaulted price, active price, true market mean, and cointime price ratios
v0.0.65 - 2025-06-17
Bug Fixes
- Chart Data Update Logic: Simplified chart data update algorithm by removing complex comparison logic and replacing it with a streamlined approach that updates all data points at or after the last known time, significantly reducing complexity and potential update conflicts (websites/default/packages/lightweight-charts/wrapper.js)
Internal Changes
- Cohort Analysis Versioning: Incremented version numbers for cumulative net realized profit/loss metrics from VERSION::TWO to VERSION::new(3), ensuring proper cache invalidation and data consistency for cohort analysis computations (crates/brk_computer/src/vecs/stateful/cohort.rs)
v0.0.64 - 2025-06-17
New Features
- 4-Year Statistical Analysis: Added comprehensive 4-year moving averages and standard deviation calculations for ratio analysis, enabling long-term trend analysis with
ratio_4y_sma,ratio_4y_sd, andratio_4y_zscoremetrics (crates/brk_computer/src/vecs/grouped/ratio_from_dateindex.rs) - Z-Score Computation Optimization: Refactored z-score calculations to use a dedicated
compute_zscore()method, improving code maintainability and performance by centralizing statistical computations
Internal Changes
- Vector Naming Convention: Renamed
ratio_standard_deviationtoratio_sdfor consistency with other abbreviated metric names - Statistical Method Extraction: Extracted z-score computation logic into reusable methods, reducing code duplication and improving mathematical accuracy
- Vector Builder Enhancement: Added conditional naming logic in grouped vector builder for better handling of sum operations with optional suffixes
v0.0.63 - 2025-06-16
New Features
- Static File Caching: Implemented intelligent HTTP caching strategy for static assets, setting immutable cache headers for long-term assets (images, fonts, JavaScript, map files) and must-revalidate headers for HTML and service worker files to ensure optimal performance and cache invalidation (crates/brk_server/src/files/file.rs)
- Progressive Web App Assets: Added comprehensive PWA assets including Apple Touch icons, splash screens for all iOS device sizes and orientations, and maskable icons for Android, enabling native app-like experience across all mobile platforms
Internal Changes
- File Extension Detection: Refactored file extension checking from string-based
ends_with()pattern matching to more robustPath::extension()method for better accuracy and maintainability - Cache Logic Simplification: Consolidated cache control logic by removing redundant file path checks and grouping related file types for cleaner code organization
v0.0.62 - 2025-06-16
Bug Fixes
- TypeScript Bridge Generation: Fixed JavaScript/TypeScript bridge generation by properly handling optional return values when reading hashed main.js entry files, preventing crashes when entry files don't exist (crates/brk_bundler/src/lib.rs)
- TypeScript Type Generation: Restructured TypeScript type definitions for VecIdToIndexes, moving typedef comments outside function declaration for proper type recognition (crates/brk_server/src/api/query/bridge.rs)
New Features
- Chart Time Scale Optimization: Improved time scale spacing for different chart time periods with more balanced bar spacing (quarters: 3→2, years: 12→6, decades: 120→60) for better visual density (websites/default/packages/lightweight-charts/wrapper.js)
- Progressive Web App Support: Added service worker scope configuration and improved PWA manifest handling for better standalone app experience
Internal Changes
- Chart Data Processing: Refactored chart data handling to use object destructuring instead of arrays, improving code clarity and type safety in effect callbacks
- HTML Standards: Updated HTML5 DOCTYPE declaration and improved syntax consistency
- Error Handling: Added try-catch protection for localStorage operations to prevent crashes in restricted environments
v0.0.61 - 2025-06-15
New Features
- OHLC Price Continuity: Added logic to maintain price continuity between days in OHLC data computation by setting today's opening price to the previous day's closing price, ensuring no gaps in price series when computing daily OHLC from fetched data (crates/brk_computer/src/vecs/fetched.rs)
Internal Changes
- Struct Mutability: Added
DerefMuttrait to all OHLC struct variants (OhlcF64, OhlcBtc, OhlcSats, OhlcUsd) enabling mutable access to underlying values - Error Handling: Improved file creation error handling in block recap export with more descriptive panic messages