Skip to main content

An open files and open source alternative to Notion and AppFlowy for tasks and pages viewing and management.

Project description

Fern

Offline-first desktop app for vaults, databases, and pages — an open-source alternative to Notion/AppFlowy. Native PySide6 UI; data lives as markdown + frontmatter in local folders.

  • Vaults → folder with a Databases/ subfolder; each database is a subfolder of markdown pages.
  • Pages → one .md file per page (YAML frontmatter for id, properties; body = content).
  • Properties → schema in schema.json per database; boolean/string (and more) with table + editor UI.

Install

pip install fern
# or
uv add fern

Run

fern

Open a folder as a vault; create and edit pages and properties from the UI.


Technical

Item Detail
Python 3.13+
GUI PySide6
Data Markdown + YAML frontmatter, schema.json per database
Build Hatchling (pyproject.toml)
Dev / test uv, pytest, pytest-cov

Architecture (clean / hexagonal):

  • Domain — entities (Vault, Database, Page, Property, PropertyType), repository ports (abstract).
  • Application — use cases only (open vault, list DBs/pages, CRUD page, add/remove/update property, update property order, update page property).
  • Interface adapters — repository implementations: filesystem vault, vault DB (markdown + schema.json), in-memory/markdown page repos.
  • Infrastructure — PySide6 views and components, controller, factory wiring adapters into use cases.

Layout: src/fern/application/, domain/, interface_adapters/, infrastructure/.

Development:

uv sync --all-groups
uv run pytest tests/unit_tests/ --cov
uv build

Unit tests target application, domain, and interface_adapters (100% coverage enforced). Coverage scope: .coveragercfern.application, fern.domain, fern.interface_adapters.

CI/CD (GitLab):

  • Merge requests: version must differ from target branch; CHANGELOG.md must have ## [x.y.z] for that version; unit tests (uv + pytest + cov); package build.
  • Push to default branch: build → publish to GitLab Package Registry and PyPI (twine); create release and tag v<x.y.z> via Releases API; build and deploy documentation to GitLab Pages. PyPI requires CI variable PYPI_API_TOKEN.

Documentation: Architecture and developer guide built with MkDocs + Material, hosted on GitLab Pages. Run locally with uv run mkdocs serve.

Versioning: Semantic Versioning; changelog format Keep a Changelog. Bump version in pyproject.toml and add a changelog section for each release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fern_app-0.7.0.tar.gz (175.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fern_app-0.7.0-py3-none-any.whl (132.9 kB view details)

Uploaded Python 3

File details

Details for the file fern_app-0.7.0.tar.gz.

File metadata

  • Download URL: fern_app-0.7.0.tar.gz
  • Upload date:
  • Size: 175.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fern_app-0.7.0.tar.gz
Algorithm Hash digest
SHA256 483673c80fbf8488ef1ccc71f77ae69777229fcb7abe0e31ee1b3faff1481f0e
MD5 a03ae493cc4ed113e2bea14e05b65d17
BLAKE2b-256 dc0f43b1fcccfe12f0fa2acfdd58f07ceeff07a1e07381a4263f62c1ddcac0e8

See more details on using hashes here.

File details

Details for the file fern_app-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: fern_app-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 132.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fern_app-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 87c0f25c5e3857152f9daf3b4a7c216f9d831a7ddfc99bf2df52714cc6f6eff0
MD5 f83b2792e5122f78bc5c121fe8aed48f
BLAKE2b-256 0658f69fe16066023417cbdaad4a41ce3fdf74af66fa0736318932b3cad18479

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page