The Problem

Most note-taking apps force a choice between simple Markdown editors and heavyweight platforms like Notion or Confluence. Teams that want self-hosted control, granular permissions, and rich formatting typically end up stitching together multiple tools or accepting a bloated all-in-one. Alexandrie targets that gap: a self-hosted knowledge base with an extended Markdown editor, offline support, and OIDC SSO, deployable with one command.

What This Does

Alexandrie is a full-stack knowledge base. The backend/ is a Go (Gin) API with JWT auth, OIDC/SSO, MySQL persistence, and S3-compatible storage. The frontend/ is a Nuxt 4 (Vue 3) app with TypeScript, Pinia, and a custom CodeMirror 6 editor. Features include extended Markdown (KaTeX, containers), Kanban boards, full-text search, 5-level per-document permissions, and PWA/offline support.

The README claims one-command deployment via docker compose up, with a live demo and documentation in docs/. The project is a fork of Smaug6739/Alexandrie (2373 stars), so it inherits a mature feature set.

How It Is Wired

Execution starts in backend/main.go:18 (main), which reaches 69 functions. It calls InitApp (backend/app/app.go:46), which initializes the app and reaches 46 functions. The shortest traced path to an external effect is main -> InitApp -> MinioConnection, which reads a file via os.ReadFile — so a run touches the filesystem within 3 hops of the entry point. The backend also has 13 functions that read/write the database and 2 that make outbound network calls.

The most-connected modules are the repositories and permission service. backend/repositories/node.repository.go is called from 13 files and defines NewNodeRepository, GetAll, GetShared, and loadPermissionsForNodes. backend/permissions/service.go is called from 9 files and defines WithActor, ActorFromContext, and RequireNodeAction. The call graph shows statusFromAccessError and actorFromRequest are each called from 18 places — changing either ripples widely. processBackup -> updateJobStatus is the most frequent edge (18 calls), so backup logic is tightly coupled to job-status tracking.

The frontend is a separate project (595 files) with its own package config. The module graph shows no circular dependencies, but the i18n locale files (frontend/i18n/locales/en/index) have high instability (0.92), meaning they import much more than they export — a change there affects many consumers.

How To Use It

Setup: Clone the repo and use Docker Compose. The README documents:

git clone https://github.com/moses-y/Alexandrie.git
cd Alexandrie
cp .env.example .env
docker compose up -d

Open http://localhost:8200 and create an account.

Configuration: The root .env.example and backend/.env.example define required environment variables. docker-compose.yml orchestrates 4 services (frontend, backend, MySQL, S3-compatible storage). For dev with HMR, the README shows docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build.

Running it: The Makefile and backend/main.go are the entry points. For manual setup, see CONTRIBUTING.md.

Real-World Use

A small team runs Alexandrie internally for project documentation. They use OIDC via Google for SSO, store notes in extended Markdown with KaTeX for math, and organize work in Kanban boards. The PWA lets field staff read and edit notes offline, syncing when back online. Backups export everything as a ZIP via the one-click backup feature.

Code Health & Issues

Static analysis (not opinion) found 21 issues: 3 high, 16 medium, 2 low. The high-severity findings are:

  • High/Clarity — Duplicated code blocks: 2999 repeated 6-line blocks across 84 files, including backend/controllers/authentication.controller.go, oidc.controller.go, backup.controller.go, and resources.controller.go. Fix: extract shared helpers.
  • High/Cognitive load — Oversized files: frontend/app/styles/vendors/katex/contrib/mhchem.js (2741 lines) and two siblings. Fix: split by responsibility.
  • Medium/Cognitive load — Deep nesting in backend/repositories/node.repository.go (indentation depth 6). Fix: early returns and guard clauses.
  • Medium/Cognitive load — High branching density in frontend/app/helpers/markdown/cards.ts (19 branch points over 54 lines). Fix: decompose decision-heavy logic.

The code-health audit adds a critical finding: golang.org/x/crypto@0.50.0 has CVE-2026-42508 (critical), and the manifest pins the vulnerable version. Also high: frontend/.env is tracked despite being in .gitignore — the file is committed and likely contains live credentials. Third-party GitHub Actions are pinned to mutable tags (@v1, @v3), which is a supply-chain risk.

The Bottom Line

Alexandrie is a feature-rich, self-hosted knowledge base with a solid architecture — the Go backend is cleanly layered, and the frontend is substantial. The critical dependency vulnerability and committed .env file are blockers for production use. Fix those, and this is a credible alternative to hosted note-taking tools for teams that want control over their data.