Netatalk 4.5.0 beta is available!
The Netatalk team is proud to announce a pre-release version in the Netatalk 4.5 release series.
This release is meant to give the community an opportunity to try out major new features and provide feedback to the development team. It is not recommended for production use.
This release introduces an ARC (Adaptive Replacement Cache) for the directory cache, along with enumerate caching, AppleDouble support in cache, inter-process cache sync, and a Resource Fork caching framework. Together with other optimizations, this results in a significant reduction of file system I/O and improved performance on workloads with many small files, which speeds up both file operations and directory listings.
A new feature synthesizes a virtual Icon\r file in the volume root, enabling Classic Mac OS clients to display custom color volume icons over the wire with the legacy icon setting.
Other highlights include a default global ‘cnid scheme’ option, static volume UUID configuration, mkdir and rmdir commands in the nad utility, and important improvements to the SQLite CNID backend.
This is a source-only release. To build:
# Extract the source
tar -xf netatalk-4.5.0beta.tar.xz
cd netatalk-4.5.0beta
# Configure and build
meson setup build
meson compile -C build
# Install
sudo meson install -C build
What’s Changed
- docs: revise CNID configuration details in afp.conf man page by @rdmark in #2608
- docs: overhaul the documentation for the ‘search db’ option by @rdmark in #2620
- cnid: safe memory management in sqlite backend and utility function by @rdmark in #2617
- cnid: don’t treat SQLITE_DONE as an error in cnid_sqlite_get() by @rdmark in #2616
- cnid: store sqlite database files in path defined in vol dbpath by @rdmark in #2615
- docs: revamp AFP Signature/UUID conf man pages by @rdmark in #2623
- docs: integrate developer man page contents into Doxygen docs by @rdmark in #2624
- libatalk: add volume option ‘volume uuid’ to define static UUID by @rdmark in #2619
- contrib: addump technical references moved to netatalk.io by @rdmark in #2633
- docs: use standard English automatically instead of automagically by @rdmark in #2635
- initscripts: netatalk systemd depends on network-online.target by @rdmark in #2639
- cnid: disallow looking up did<2 in sqlite backend by @rdmark in #2632
- rephrase descriptions of the netatalk suite to emphasize cross-platform by @rdmark in #2644
- [4.4] cnid: return CNID_INVALID when attempting to look up did<2 by @rdmark in #2641
- touch up Japanese localization for 4.4.1 by @rdmark in #2656
- meson: introduce option to force the building of subprojects by @rdmark in #2652
- meson: package release tarball with subprojects by @rdmark in #2658
- Fix implicit declaration of function AfpErr2name by @rdmark in #2664
- refactor: convert adf_lock macros to functions by @andylemin in #2645
- MySQL CNID Backend: improve charset performance, TCP performance, and test container config by @andylemin in #2649
- docs: escape explicit double dashes in markdown sources by @rdmark in #2674
- cnid: fix sqlite backend bugs, add post init validation and logging by @rdmark in #2672
- tests: refactor the afpd tests to use the sqlite CNID backend by @rdmark in #2610
- cnid: remove the obsolete ‘last’ CNID backend by @rdmark in #2634
- Add ARC (Adaptive Replacement Cache) option for directory cache by @andylemin in #2668
- nad: use scandir to sort files and dirs to list with ls by @rdmark in #2684
- remove redundant project version setting for SonarQube Cloud by @rdmark in #2676
- Remove superseded dircache metadata window/threshold parameters by @andylemin in #2683
- decouple the dbd binary from cnid_dbd and make it better by @rdmark in #2685
- testsuite: Enhance afp_speedtest with throughput statistics, TCP statistics, CSV export, and fix Local mode - baseline performance optimisations by @andylemin in #2687
- introduce a default global ‘cnid scheme’ afp.conf option by @rdmark in #2689
- update dircache docs to align with recent changes by @rdmark in #2692
- afpd dircache: fix realloc leak, validate ghosts, improve error logging by @andylemin in #2693
- testsuite: initialize filedir params to avoid garbage data in the bitmap by @rdmark in #2688
- uams: fix password corruption when changing password in Cleartxt PAM UAM by @rdmark in #2699
- nad: more sophisticated check for the MAXPHYS macro by @rdmark in #2717
- backwards compatibility with iniparser v3 by @rdmark in #2715
- testsuite: support OpenBSD reserved fields in speedtest by @rdmark in #2714
- touch up the byte order macros and remove i386 optimization by @rdmark in #2712
- papd: harden config parsing with graceful error recovery by @rdmark in #2696
- afpstats: expose hostname for each afpd child process by @rdmark in #2720
- consistently use the Zeroconf term by @rdmark in #2724
- docs: improve descriptions of CNID backends, set/save password options by @rdmark in #2690
- detect big-endian architecture correctly, remove testsuite workaround by @rdmark in #2694
- docs: revise legal notices in Legal.md by @rdmark in #2735
- libatalk: regenerate utf16 case lookup tables with Unicode v17.0.0 by @rdmark in #2594
- meson: don’t pass header files as sources to the compiler by @rdmark in #2730
- nad: add an -F option for reading a custom afp.conf file by @rdmark in #2722
- remove errant comma on security policy page by @rdmark in #2742
- Enumerate uses cache, AD support in cache and inter-process cache sync by @andylemin in #2733
- contrib: remove obsolete macusers script by @rdmark in #2723
- testsuite: dynamically skip extension mapping tests when not configured by @rdmark in #2748
- libatalk: log a warning when deprecated apf.conf option is being used by @rdmark in #2746
- turn ‘convert appledouble’ option off by default by @rdmark in #2734
- create fuzz testing framework with libfuzzer and ClusterFuzzLite by @rdmark in #2750
- meson: consistently define install target tags by @rdmark in #2751
- enable codefmt.sh script to detect changes in dirty repo by @rdmark in #2755
- pin OSS fuzzer base builder image to sha hash for security by @rdmark in #2753
- afpd: enhance LRU promote, fix moveandrename stale paths, fix ‘mac charset’ option, improve fork logging by @andylemin in #2754
- afpd: validate CNID from get_id() before calling dircache_add() by @rdmark in #2697
- afpd: use C11 atomic operations in dircache, conditional check for libatomic by @rdmark in #2756
- rephrase container documentation to emphasize runtime agnostic operation by @rdmark in #2769
- afpd: update Doxygen code comments in dircache by @rdmark in #2778
- afpd: synthesize virtual Icon\r file in volume root by @rdmark in #2775
- introduce signal handlers and refactor away unreachable code by @rdmark in #2796
- papd: clean up dead and unreachable code by @rdmark in #2797
- debug: Added flamegraph profiling container and tooling by @andylemin in #2784
- nad: organize ls output into columns and sanitize filenames by @rdmark in #2804
- nad: centralize volume validation and fix inconsistent error handling by @rdmark in #2803
- Add support for “cnid dev = no” to MySQL and SQLite backends. by @NJRoadfan in #2806
- dircache: add idle worker thread for background cache maintenance by @andylemin in #2808
- docs: more helpful description of the ‘cnid dev’ option by @rdmark in #2810
- fix UUID instability for dynamic volumes with non-AFP clients by @rdmark in #2809
- cnid: fix permissions for multi-user access to SQLite db files by @rdmark in #2805
- remove dead code in the VFS module and test code by @rdmark in #2817
- dircache: Added Tier-2 ResourceFork caching framework with expanded rfork spectests, and removed obsoleted ‘dircache files’ by @andylemin in #2783
- nad: implement ls -a flag with . and .. entries by @rdmark in #2821
- afpd: log when the root directory is name locked or rename fails by @rdmark in #2822
- afpd: fix virtual icon materialization and cleanup for Mac OS 9 by @rdmark in #2820
- docs, fixes: update profiling, compilation, manpage, meson options, dircache max size and other minor issues by @andylemin in #2826
- nad: create mkdir and rmdir commands by @rdmark in #2823
- dircache optimisation: replace strncmp with blength pre-check + memcmp in child scan by @andylemin in #2827
- nad: overhaul file operations that cross AFP volume boundary by @rdmark in #2828
- docs: split up Configuration into multiple manual chapters by @rdmark in #2825
- afpd: fix virtual icon regressions breaking macOS logins by @rdmark in #2833
- idle_worker: replace condvar signal with timedwait self-wake by @andylemin in #2830
- meson: fix bugs that prevent you from disabling dev docs by @rdmark in #2840
- bump to bstring subproject v1.1.0 by @rdmark in #2829
Full Changelog: https://github.com/Netatalk/netatalk/compare/netatalk-4-4-0…netatalk-4-5-0beta
Downloads
- netatalk-4.5.0beta.tar.xz (1.2 MB)
- netatalk-4.5.0beta.tar.xz.asc (0.0 MB)
- netatalk-4.5.0beta.tar.xz.sha256sum (0.0 MB)
- netatalk-4.5.0beta.tar.xz.sha512sum (0.0 MB)
- netatalk-4.5.0beta.wbm.gz (0.1 MB)
Footnotes
Release published on 2026-04-03
Generated from GitHub Release Notes