Why rewrite Wiki|Docs?
Wiki|Docs started as a PHP project: a small, databaseless wiki built around a simple idea: your knowledge should live in files you can keep, move, and understand without depending on a database. That idea is still the heart of the project, but the original implementation had reached the point where evolving it across web and desktop experiences was becoming harder than it needed to be.
I wanted a codebase with stronger type safety, clearer boundaries, and a better day-to-day developer experience. Just as importantly, I wanted one language to cover the entire product instead of maintaining separate technological worlds for the frontend, backend, and desktop application.
Keeping the part that mattered
This was a rewrite of the application, not a change in philosophy. Wiki|Docs remains a flat-file wiki: configuration and metadata are JSON, pages are Markdown files with YAML frontmatter, and attachments are regular files on disk. No database is required.
That model keeps the data portable and makes self-hosting straightforward. Whether Wiki|Docs runs in a container, on a server, or on a desktop machine, the dataset remains a directory rather than an opaque service dependency.
One stack, three surfaces
The new version is written in TypeScript end to end. The shared language made it possible to define contracts once and use the same vocabulary across every layer, while still giving each part of the application a focused responsibility.
NestJS API
The backend validates requests, handles authentication and authorization, exposes the HTTP API, and works directly with the file-backed dataset.
Angular frontend
The web client is a standalone single-page application for browsing, editing, managing documents, and working with the API.
Electron desktop application
The desktop app packages the same frontend and launches the backend locally, adding native configuration and filesystem-aware desktop behaviour without exposing Node.js APIs to the renderer.
Shared TypeScript contracts sit between these layers. This reduces duplicated assumptions and makes a change to an API payload visible wherever it matters.
Desktop and remote sync
The desktop application also introduces a path for working across devices. It compares the active document tree in the local dataset with a self-hosted remote instance, then coordinates the exchange of changed documents. The backend stays focused on serving and applying changes; Electron owns the synchronization flow.
The scope is intentionally narrow: document content and attachments travel between locations, while settings, accounts, pinned documents, and trash remain local to their respective datasets.
What changed and and what did not
The rewrite replaces the PHP implementation with a maintainable TypeScript platform that can grow across browser, self-hosted, and desktop use cases. What did not change is the reason Wiki|Docs exists: a lightweight wiki whose content remains yours, as files.
Explore now Wiki|Docs on GitHub or the original PHP implementation.