{"id":15581513,"url":"https://github.com/swillner/ramcachefs","last_synced_at":"2026-01-22T14:38:30.479Z","repository":{"id":88810038,"uuid":"357605309","full_name":"swillner/ramcachefs","owner":"swillner","description":"Userspace in-memory filesystem with on-demand persistance","archived":false,"fork":false,"pushed_at":"2024-04-14T06:01:36.000Z","size":38,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T01:14:47.433Z","etag":null,"topics":["filesystem","fuse","in-memory-filesystem","libfuse","persistent"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swillner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-04-13T15:39:34.000Z","updated_at":"2024-05-22T18:43:56.000Z","dependencies_parsed_at":"2025-04-10T23:54:08.992Z","dependency_job_id":"c7ad071d-80e4-46cb-a1e4-3b5a951a1417","html_url":"https://github.com/swillner/ramcachefs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/swillner/ramcachefs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swillner%2Framcachefs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swillner%2Framcachefs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swillner%2Framcachefs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swillner%2Framcachefs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swillner","download_url":"https://codeload.github.com/swillner/ramcachefs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swillner%2Framcachefs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28664656,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T14:01:31.714Z","status":"ssl_error","status_checked_at":"2026-01-22T13:59:23.143Z","response_time":144,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["filesystem","fuse","in-memory-filesystem","libfuse","persistent"],"created_at":"2024-10-02T19:49:14.037Z","updated_at":"2026-01-22T14:38:30.463Z","avatar_url":"https://github.com/swillner.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ramcachefs\n\nUserspace in-memory filesystem with on-demand persistance using [FUSE\n(Filesystem in Userspace)](https://github.com/libfuse/).\n\n`ramcachefs` caches a directory in memory and persists changes to the\ndirectory and its files back to disk on demand only. Useful for\ncaching directories with lots of read/write operations, e.g. for\ninefficient I/O processes or to protect SSDs from frequent writes to\nbrowser caches.\n\n## Features\n\n- No root needed as long as FUSE is enabled on the system (unlike\n  `tmpfs`)\n- Caches the directory and all its files and subdirectories in place\n  (i.e. no path changes for processes accessing the directory)\n- Write-back of changes (file changes, type changes, creations,\n  deletions, permissions, and changes to owner) on demand (calling\n  `ramcachefs -p \u003cmountpoint\u003e`) and optionally automatically after\n  unmount.\n\n## Installation\n\n### Prerequisites\n\nTo build `ramcachefs` you need the FUSE 3 libraries. On Debian/Ubuntu,\njust install these using\n\n```\nsudo apt-get install libfuse3-dev\n```\n\n### Building\n\nJust build the `ramcachefs` binary using\n\n```\nmake\n```\n\n## Usage\n\nJust call the `ramcachefs` binary and specify the directory to cache\nas `\u003cmountpoint\u003e`. By default it forks to the background as a daemon,\nwhich can be disabled using the `-f` option. Stop the caching by\nunmounting the `\u003cmountpoint\u003e` (`umount \u003cmountpoint`) or by terminating\nthe `ramcachefs` process.\n\nPersist changes done so far back to the underlying directory on disk\n(or any other filesystem to start with) calling `ramcachefs -p\n\u003cmountpoint\u003e`. By default changes are persistet after unmount, which\ncan be disabled using the `-o noautopersist` option.\n\n### Options\n\n```\nusage: ramcachefs [options] \u003cmountpoint\u003e\n\n    -p   --trigger-persist trigger persist\n    -h   --help            print help\n    -V   --version         print version\n    -d   -o debug          enable debug output (implies -f)\n    -f                     foreground operation\n    -s                     disable multi-threaded operation\n    -o clone_fd            use separate fuse device fd for each thread\n                           (may improve performance)\n    -o max_idle_threads    the maximum number of idle worker threads\n                           allowed (default: 10)\n    -o allow_other         allow access by all users\n    -o allow_root          allow access by root\n    -o auto_unmount        auto unmount on process termination\n    -o direct_io           always use direct_io (breaks mmap!)\n    -o maxinodes=NUMBER    maximum number of inodes (default: '1000000')\n    -o noautopersist       do not persist on unmount\n    -o prepopulate         read full files at start (prepopulate mmaps)\n    -o size=SIZE           size (default: '1G')\n```\n\n## Disclaimer\n\nBugs in filesystems can easily lead to data losses! Use `ramcachefs`\nat your own risk. I am using it on a day-to-day basis without any\nissues so far. Nevertheless, please be careful when using it for\ncrucial data.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswillner%2Framcachefs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswillner%2Framcachefs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswillner%2Framcachefs/lists"}