#onedrive #fuse

app onedrive-fuse

Mount OneDrive storage as FUSE filesystem

8 releases

0.2.6 Mar 29, 2023
0.2.5 Mar 1, 2023
0.2.4 Feb 10, 2023
0.2.3 Sep 2, 2022
0.1.0 Apr 25, 2020

#236 in Filesystem

44 downloads per month





Mount Microsoft OneDrive storage as FUSE filesystem.


Note: For Nix users, the program is already packaged via Nix Flake in flake.nix.

  1. Use your package manager to install these dependencies:

    • pkg-config
    • openssl
    • fuse (libfuse)
  2. Compile and install the program from crates.io:

    $ cargo install onedrive-fuse


  1. For the first time, you should register your own Application (Client) ID for the API access. Read doc/register_app.md for detail steps.

  2. Login to your OneDrive account with the Client ID of your own application from the previous step. By default, we only request for read-only access.

    $ onedrive-fuse login --client-id <paste-your-client-id-here>

    If you want read-write access, you should instead run,

    $ onedrive-fuse login --read-write --client-id <paste-your-client-id-here>

    This will prompt a browser window to ask you to login your Microsoft account for OneDrive. After a successful login, the web page will pass the result token back to onedrive-fuse automatically, and prints Login successfully. You can close the web page now, and the command running above should also have exited successfully.

    Your access token will be saved under XDG config directory, which is by default ~/.config/onedrive-fuse/credential.json. So you don't need to re-login every time. But if you are away for too long, eg. for months, you might have to re-login.



  1. Create an empty directory as mount point, like ~/onedrive, and mount your OneDrive storage on it. By default the mounted storage is readonly.

    $ mkdir -p ~/onedrive # The directory to be mounted should be empty.
    $ onedrive-fuse mount ~/onedrive

    If you want to mount with read-write access, you must also request for read-write access in the previous login step. Then mount the storage with,

    onedrive-fuse mount ~/onedrive -o permission.readonly=false

    ⚠️ Use read-write permission with care! Bugs may corrupt your files in OneDrive!

  2. Once it's started, wait for seconds for initialization until FUSE initialized displayed, indicating the filesystem is ready now. You can do whatever you want under the mount point.

    The program runs in foreground by default, the terminal window should be kept open. You may need other mechanism like systemd (see below) to make it run background.

  3. If you are done for, run this command to umount the filesystem gracefully. You should NOT directly Ctrl-C or kill the onedrive-fuse instance, it usually cause data loss.

    $ fusermount -u ~/onedrive

    ⚠️ We havn't yet implemented auto-waiting for uploading before shutdown. Please wait your upload session to be finished before umounting the filesystem. Or your pending upload session would be cancelled.


This program is integrated with systemd and is expected to be started as a user service. See onedrive-fuse.service.example for an example setup. Note that you still need to manually login first.

FUSE features implemented

  • FUSE syscalls
    • Read
      • access
      • forget
      • getattr
      • lookup
      • open
        • O_RDONLY
      • opendir
      • read
      • readdir
      • release
      • releasedir
      • statfs
    • Write
      • create
      • mkdir
      • open
        • O_WRONLY/O_RDWR
        • O_TRUNC
        • O_EXCL
      • rename
      • rmdir
      • setattr
        • size
        • mtime
      • unlink
      • write
    • Other
      • destroy
      • flush
      • fsync
      • fsyncdir
      • init
    • Unsupported
      • bmap
      • getlk
      • getxattr
      • link
      • listxattr
      • mknod
      • readlink
      • removexattr
      • setlk
      • setxattr
      • symlink
  • Cache
    • Statfs cache
    • Inode attributes (stat) cache
    • Directory tree cache
    • Sync remote changes with local cache
    • File read cache
    • File write cache/buffer




~505K SLoC