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. PyPI requires CI variable PYPI_API_TOKEN.

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.3.0.tar.gz (68.1 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.3.0-py3-none-any.whl (70.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fern_app-0.3.0.tar.gz
  • Upload date:
  • Size: 68.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","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.3.0.tar.gz
Algorithm Hash digest
SHA256 c333ce37ee2ba263fb7b2185fb70925c94fdb75087c1566cbef90a99341c9ec9
MD5 262bf5e4e93574e581afb55436db168d
BLAKE2b-256 27546f6c608a7b7e6af33951603586c0d241d11775a01035d3285b3f5a3dd139

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fern_app-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 70.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6b2cbeb25422172ddaf7a03a8bc473216fb548de797e331843e04e81ae77d073
MD5 0fc6745b77b6d3f817001d33d969b9db
BLAKE2b-256 f261582f7a88d5a1249ef7c6929dd409dee30b3265367543cb80fe938772a812

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