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.6.3.tar.gz (154.3 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.6.3-py3-none-any.whl (122.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fern_app-0.6.3.tar.gz
  • Upload date:
  • Size: 154.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","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.6.3.tar.gz
Algorithm Hash digest
SHA256 f96cb7ad4f0b96a20b06919685c23f74303d8a70a150c27c73f85b5e71301195
MD5 c7750ea43c5acfde87ce7fc65f7765a2
BLAKE2b-256 7b7ade860b3a132fc31c26a23eaf968c36eb4320e070c0aae0ba1a8cbc43531f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fern_app-0.6.3-py3-none-any.whl
  • Upload date:
  • Size: 122.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","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.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 28d06cda922d6ab3c115a9da0dc685348edabeccecbaf70599150044e7afb6f9
MD5 d009b4e7813e14e265ba9df424958f29
BLAKE2b-256 3cf9b5ee4c1af5dfb53c65b19fdda440d422bca45c302b77150e378da22a4056

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