Open-source and non-profit under GPLv3, vault-compatible cross-platform markdown notes app. It's based on Rust + Tauri v2 and under heavy development. We're looking for Linux distribution maintainers. Not affiliated with or endorsed by Obsidian or Dynalist Inc.; "Obsidian" is their trademark. Opensidian is a clean-room functional clone: it reimplements Obsidian's behaviour from the outside and contains none of its code.
Download one from the v0.9.3 release:
| Download | Choose it if | Tested on (fresh install, 2026-10-30) |
|---|---|---|
| slim AppImage | you want the smallest file and have WebKitGTK 4.1 | Fedora 44 (sudo dnf install webkit2gtk4.1), Ubuntu 26.04 LTS (sudo apt install libwebkit2gtk-4.1-0) |
| portable AppImage | you want nothing to install: WebKit is bundled (needs only the X11/GL/font libraries every desktop has) | Fedora 44, Ubuntu 26.04 LTS |
| Flatpak | you want it sandboxed; pulls the GNOME 49 runtime from Flathub on first install | Fedora 44, Ubuntu 26.04 LTS (flatpak package installed) |
| RPM | you run Fedora and want a system package with a menu entry and icon; dnf pulls WebKitGTK 4.1 for you | Fedora 44 (sudo dnf install ./opensidian-0.9.3-x86_64.rpm) |
| DEB | you run Debian or Ubuntu and want a system package with a menu entry and icon; apt pulls WebKitGTK 4.1 for you | Debian 13, Ubuntu 26.04 LTS (sudo apt install ./opensidian-0.9.3-x86_64.deb) |
nix profile add github:jpzk/opensidianSHA256SUMS is signed with key A6E6 9ED6 BC47 79F3 2817 2148 4CC1 AFDE 15B6 4EA3:
curl -LO https://github.com/jpzk/opensidian/releases/download/v0.9.3/SHA256SUMS \
-LO https://github.com/jpzk/opensidian/releases/download/v0.9.3/SHA256SUMS.asc
gpg --keyserver hkps://keys.openpgp.org --recv-keys A6E69ED6BC4779F3281721484CC1AFDE15B64EA3
gpg --verify SHA256SUMS.asc SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMSTested 2026-10-03 on fresh Ubuntu 26.04 LTS and Fedora 44 with Rust 1.98.0 (build ~2.5 min on 4 cores, binary runs and renders on both).
-
System deps. Ubuntu/Debian:
sudo apt install build-essential libssl-dev libwebkit2gtk-4.1-dev \ libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
Fedora:
sudo dnf install gcc gcc-c++ make openssl-devel webkit2gtk4.1-devel \ gtk3-devel libappindicator-gtk3-devel librsvg2-devel
-
Rust, if you don't have it (distro rustc is often older than 1.98):
curl --proto '=https' -sSf https://sh.rustup.rs | sh -s -- --default-toolchain 1.98.0 . "$HOME/.cargo/env"
-
Build:
git clone https://github.com/jpzk/opensidian && cd opensidian/src-tauri cargo build --release --locked # -> target/release/opensidian
Status: not supported. cargo build fails on Windows today. opensidian is
Linux-first, and the backend uses Linux/Unix APIs directly. This section records
what was tried so nobody has to repeat it.
Attempted 2026-11-03 on Windows 11 Pro (10.0.26200), x86_64-pc-windows-msvc:
| Needed for a Tauri v2 Windows build | Found on the test machine |
|---|---|
| Rust (MSVC host toolchain) | rustc/cargo 1.99.1 (the Linux build pins 1.98.0) |
| MSVC C++ build tools + Windows SDK | Visual Studio 2022 Community, MSVC 14.44, SDK 10.0.22621 / 10.0.26100 |
| WebView2 runtime | Edge WebView2 Runtime 156 (preinstalled on Windows 11) |
| Tauri CLI | cargo-tauri 2.11.4 (optional: tauri.conf.json has bundle.active = false, so plain cargo build is the path) |
| Node / npm / pnpm | not needed; the frontend in ui/ has no bundler |
The toolchain was complete, so nothing had to be installed. The build still fails:
cd src-tauri
cargo build --release --lockederror[E0425]: cannot find value `O_PATH` in crate `libc`
error[E0425]: cannot find function `prctl` in crate `libc`
error: could not compile `landlock` (lib) due to 10 previous errors
Cause: landlock (the optional self-sandbox, src/sandbox.rs) and libc are
unconditional dependencies in src-tauri/Cargo.toml. Beyond that crate, 14
files under src-tauri/src/ use libc, std::os::unix or /proc
(vaultlock.rs flock, spawn.rs, spawner.rs, watcher.rs, cfgstore.rs,
vaultfs.rs and others), and the Linux-only gdk, gdkx11, soup3 and
dbus crates are already gated behind cfg(target_os = "linux"). There are no
cfg(windows) branches anywhere. A Windows build would need, at least:
landlockandlibcmoved undercfg(target_os = "linux")(orunix);- Windows replacements for the per-vault flock, process spawning and
liveness probe, the
/procreads, and symlink-safe file opening; - Windows stand-ins for the Secret Service (
secrets.rs) and the libsoup HTTP client used by the plugin store.
None of this is done, and no source file was changed.
Decided 2026-11-04: not pursuing a native Windows port. A closer look file by file splits the work into two small, mechanical pieces and two large ones that are a security redesign, not a syntax change:
- Small: gating
landlockoff (it is already opt-in and disabled by default) and the handful ofOsStrExt/symlinkcall sites invaultlock.rs,cfgstore.rs,canvasfs.rs,pasteimg.rs— hours to days. - Large:
desk_proc.rs/spawn.rs/spawner.rsreimplement process lifecycle on raw POSIX (prctl(PR_SET_PDEATHSIG), process-groupkill,close_range, a hand-rolledSIGTERMhandler) with no Windows analogue — Job Objects,TerminateProcessandSetConsoleCtrlHandlerare a different model, not a drop-in. Larger still:vaultfs.rs, where every vault file operation goes through the POSIX*at()family (openat,fstatat,renameat2, ...) specifically so no symlink can escape the vault (TOCTOU-safe by construction). Windows has no publicopenatequivalent; the nearest option (FILE_FLAG_OPEN_REPARSE_POINT) is a weaker guarantee, which is a security decision, not a port.
Rough total: 3-5 weeks for someone fluent in Win32/NT and filesystem
security, on a fork of someone else's project, where the riskiest pieces
are exactly the kind of code that fails silently instead of loudly when
ported in a hurry. WSL2/WSLg already runs the real Linux build, landlock
included, at no cost and with no weakened guarantee. This section stays as
the record of why; it is not an open task.
The repo ships a flake (Nix 2.4+). It pins nixpkgs unstable and builds with
--locked against src-tauri/Cargo.lock, so the toolchain and every crate
are pinned.
nix run . # build and run
nix build . # -> result/bin/opensidian, with the desktop file installed
nix develop # dev shell: rust-analyzer, clippy, rustfmt,
# clippy, rustfmt and all native deps; then:
# cd src-tauri && cargo test --lockedOn NixOS, the spawn::tests::switch_alive_probe_reads_proc test fails:
it hardcodes /bin/true, which does not exist there. The flock/landlock
integration tests also need a wider sandbox than the Nix build sandbox
grants, which is why the flake runs cargo test from the dev shell and
not as a flake check.
GPL-3.0-or-later (LICENSE). Read THIRD-PARTY.md before redistributing.
Most Obsidian community themes work as they are. Ships with AnuPpuccin (default), Material Gruvbox, Minimal and Solarized, unmodified (THIRD-PARTY.md).
To add one, put its manifest.json and theme.css in <vault>/.obsidian/themes/<Name>/ (folder name =
"name" in the manifest) and pick it in Settings ▸ Appearance ▸ Themes. CSS snippets go in
.obsidian/snippets/. Both reload live. A broken theme shows greyed out with the reason, and the app
stays on AnuPpuccin.
Off by default. Each vault starts in restricted mode: no community plugin code runs.
Turning it on. Open Settings ▸ Community plugins and switch Restricted mode off. The
choice is per vault and is saved in ~/.opensidian.json, outside the vault, so a vault you open
cannot turn its own plugins on.
What that means. With restricted mode off, the plugins you enable run code from the internet with your user's rights, the same as in Obsidian. They can run programs, open network connections and servers, send HTTP requests to any host, and open files and links with your system's default apps. There is no per-plugin permission prompt. Enable only plugins you trust.
Browse. Settings ▸ Community plugins ▸ Browse lists the community plugins. You can search,
sort, and open a plugin to read its details and README. Install, Update and Uninstall download
only from GitHub over HTTPS. The sha256 of every installed file is recorded. Installing does not
enable a plugin; you enable it yourself. Copying a plugin folder into <vault>/.obsidian/plugins/
still works.
Secrets. Plugins that store secrets (API keys, tokens) use your system keyring through the Secret Service: gnome-keyring, KWallet or KeePassXC. Secrets are never written to a file. Without a running keyring, secret storage reports that it is unsupported and those plugins cannot save secrets.
Donation makes it possible!
bc1qzyh8c8kr8aylywqacsjwau6frzwjqt3cpa603w (BTC)
opensidian was built predominantly with AI models. Nearly all of the code, the design docs, and this README were written by Claude (Anthropic's models, via Claude Code) working from prompts, reviews, and corrections by a single human maintainer. The human decided what to build and what the trust model must guarantee, read and pushed back on the output, and ran it; the models wrote most of the lines. Commit messages record the design rationale in the same way — many were drafted by the model and edited by the maintainer.