cda, I've been using LittleFS (https://github.com/littlefs-project/littlefs) for a few embedded projects and I am fairly happy with it. It's quite straight-forward to implement a backend block device driver for it (ready, program, erase, sync). E.g. a SPI flash or SD/MCC. You can stand something basic up in probably 20-30 minutes.
However, you will want to implement your own block-level caching to get good performance out of it. It is quite "chatty" when it comes to hitting the meta-data blocks.