Changelog

All notable changes to Hayashi, following Keep a Changelog.

Full source changelog available on GitHub.

Unreleased dev
In development

No unreleased changes at this time.

2026-08-20

Changed

  • Greeners 2.0.0: the numerical facade now ships as the published greeners = "2.0.0" crate on crates.io. The local crates/greeners checkout and associated CI steps were removed.
  • Greeners 2.0.0 fixes carried into Hayashi: MLP (Adam optimizer), NARDL lag handling, PSTR grid search, SAR/SEM log-likelihood, spatial Durbin overflow, NLS CES normalisation, panel Tobit variable names, and GEE sandwich standard errors.

Validation

  • 234 cases across 115 implemented estimators: 219 pass, 15 not-supported, 0 fail / 0 blocked.
  • New validated cases include decompose, ucm, cancorr, bplm, chamberlain, nls_*, copula, spatial_sar, spatial_sem, xtlogit, xtprobit, xtpoisson, modwt, did, qreg, synthdid, and more.

Added

  • VS Code debugger: structured model expansion — model results expand in the Variables panel with coefficients (DataFrame), fit (Dict), and per-parameter Series for OLS, IV/2SLS, panel, binary, count, tobit, ordered, mnlogit, zip/zinb, glm, rlm, qreg, gmm, ab, sysgmm, glsar, mixed, sur, and 3sls.
  • New estimators: xtlogit, xtprobit, xtpoisson (panel GEE), spatial_sar, spatial_sem, spatial_panel_sar, spatial_panel_sem, spatial_durbin, spatial_durbin_error, nls_exp, nls_power, nls_logistic, nls_cobb_douglas, nls_ces, sfa_production, sfa_cost, panel_tobit, panel_heckman, panel_qreg, eventstudy, double_ml, copula, nardl, pvar, qvar, setar, tvp_var, modwt, did, synthdid, midas, tvp, favar, msvar, bvar, mfvar, tvcopula, sv, fapanel, hawkes, qrf, gbm, mlp, rf, synth_smoking, and more.
  • New diagnostics and post-estimation: acf()/pacf() (autocorrelation values), cusumtest(model), akaike_weights(m1, m2, ...), lrtest(m_restricted, m_unrestricted), estat_overid, estat_endog, estat_classification, lroc(model) (with ASCII ROC plot), estat_gof, linktest, marginsplot, and estat_roc aliases.
  • Language and runtime: for i, v in list and for k, v in dict, try/catch/finally with finally always running, match as contextual keyword, list_files() builtin, ++/-- operators, quietly on/quietly off, and hay install user/repo@version / hay list with plugin versions.

Fixed

  • CSV export column order: to_csv preserves insertion order via IndexMap.
  • append() string columns: get_string() handles Categorical columns, fixing empty strings for repeated values.
  • Plugin resolution on Windows: HOME falls back to USERPROFILE, searches executable directory, and uses ; separator for HAYASHI_PATH.
Pre-release builds — beta versions are for testing only.
  • Not published to crates.io — binary-only GitHub releases
  • May contain known or unknown bugs — do not use in production
  • API may change before the stable release
  • Report issues on GitHub Issues
2026-07-07

Fixed

  • CSV export column order: to_csv no longer sorts columns alphabetically. Insertion order preserved via IndexMap (replacing HashMap in Greeners).
  • append() losing string columns: get_string() now handles Categorical columns. Previously, append() produced empty strings for any column with repeated values (dates, tickers, sectors).
  • Plugin resolution on Windows: HOME falls back to USERPROFILE. Searches executable directory (exe_dir/, exe_dir/plugins/). HAYASHI_PATH uses ; as separator on Windows.

Added

  • ++ and -- operators: increment and decrement.
  • for i, v in list and for k, v in dict: index/value and key/value bindings.
  • try/catch/finally: finally block runs regardless of try outcome.
  • hay install with version: install specific release tags.
  • hay list shows versions from plugin metadata.
  • match as contextual keyword: works as identifier and match expression.
  • list_files() builtin: list_files(dir) and list_files(dir, pattern).
  • Interpreter decomposition: interpreter.rs reduced from ~4,800 to ~680 lines.
  • English-only user-facing output: all error messages and printed strings in English.

Changed

  • quietly(expr) deprecated: use quietly on / quietly off instead.
  • Greeners 1.5.3: IndexMap for column order preservation, get_string handles Categorical.
2026-09-17

Added

  • ++ and -- operators: increment/decrement with desugaring to x = x + 1.
  • Greeners 1.5.1 dependency (crates.io, no path dependency).

Fixed

  • Greeners dependency: uses greeners = "1.5.1" from crates.io in release builds.
  • crossbeam-epoch advisory: updated to fix RUSTSEC advisory.
2026-08-25

Added

  • Hybrid plugin system: Native Rust (.so/.dll), WebAssembly (.wasm), and Script (.hay) tiers via unified HayashiPlugin trait.
  • Pipe placeholder _: df |> ols(lw ~ yos, _) passes piped value to any argument position.
  • ttest option unequal=false: pooled (equal-variance) t-test.
  • Validation programme expanded to 40 cases: ridge, elasticnet, nbreg, oprobit, mlogit, SUR.
  • Parametric-bootstrap SE for VECM with inference enabled.

Fixed

  • Non-numeric columns in generate and estimators: to_float() instead of hard-failing on Boolean/Categorical columns.
  • Hardened URL downloads (security, contributed by Charles Shaw): SSRF prevention, DNS rebinding protection, timeout and size limits.
  • Clippy warnings fixed in Hayashi and Greeners.
  • argmin updated to resolve RUSTSEC-2024-0384.

Changed

  • ttest delegated to Greeners: interpreter is now a thin dispatcher.

Removed

  • Unused anyhow dependency (contributed by Charles Shaw).
2026-06-25

Added

  • codebook(df): detailed variable description.
  • Normality tests: swilk, sfrancia, sktest.
  • mutate, group_by, pivot_longer, pivot_wider, select: pipe-friendly data manipulation.
  • print() multi-arg: print(a, b, sep=", ").
  • Improved error messages: source line preview, Levenshtein suggestions, stack traces.

Fixed

  • Keywords followed by ( now parse as function calls.
  • Parser line numbers correctly tracked after newlines.
  • MomentHelpers exported from Greeners.
2026-06-24

Added

  • Operators: % (modulo), ** (power alias), compound assignment (+=, -=, *=, /=, %=).
  • gmm(): two-step efficient GMM with Hansen J-test.
  • cmnlogit(): conditional multinomial logit.
  • help(about) and help(license).

Fixed

  • Formula parsing unified: all 53 estimators accept bare and string formulas.
2026-06-24

Fixed

  • Scalar math functions: sqrt(), abs(), ln(), exp(), pow(), sin(), cos(), tan(), ceil(), floor(), round(), sign(), factorial(), normalden(), invnormal(), max(), min() now work as standalone expressions.
2026-06-24

Breaking Changes

  • Extension: .hy.hay
  • Binary: hayashihay
  • Namespaced imports: import("mod")mod::func()

Added

  • CI/CD: GitHub Actions with fmt, clippy, test on Linux/macOS/Windows; release workflow for 4 targets.
  • Namespaces: import("mod", as=alias), import("mod", only=["f"]).
  • REPL: tab completion, syntax highlighting, colored prompt, fish-style history hints.
  • Date/time: date(), datetime(), year(), month(), day(), hour(), dow().
  • Collinearity detection: QR-based across 9 estimators with Stata-style (omitted) display.
  • VS Code extension 0.2.0.

Fixed

  • Stack overflow on Windows/macOS: 32 MB stack for main thread.
  • Cross-platform tests: std::env::temp_dir() replaces hardcoded paths.
  • Package manager: correct user/repo/ directory structure.
2026-06-15

Initial Release

  • 46 estimators: OLS, IV, Logit, Probit, Poisson, NegBin, Tobit, Heckman, FE, RE, Arellano-Bond, System GMM, ARIMA, GARCH, VAR, VECM, Lasso, Ridge, DID, RD, Cox, Fama-MacBeth, and more.
  • Stata-like syntax with closures, pipe, match, f-strings, try/catch.
  • 8 I/O formats: CSV, TSV, JSON, DTA, Excel, Parquet, SQLite, ODBC.
  • Plugin system with package manager (hay install).
  • Post-estimation: test, nlcom, margins, bootstrap, esttab, vif, hausman, predict.
  • 387 tests, 59 examples, ~110 help topics.
  • 100% Rust — no C, no Fortran, no system BLAS/LAPACK.