← Back to projects

GhostWiki

A local-first, cloud-backed, encrypted notepad built with Python and the Textual TUI, inspired by Zim Desktop Wiki.

PythonTextualEncryptionNotepadLocal-FirstZim Desktop WikiPrivacyNote-Taking

Overview

GhostWiki is a desktop note-taking application built with Python and the Textual TUI framework. It's designed for users who prioritize privacy, organization, and control over their data, without sacrificing usability. Inspired by the clean interface of Zim Desktop Wiki, GhostWiki provides a familiar and efficient note-taking experience with a focus on local-first operation and robust encryption.

Key Features

  • Zim Desktop Wiki-Inspired Interface: A clean and intuitive GUI with a menu and toolbar, providing a familiar experience for users accustomed to traditional wiki-style note-taking.
  • Local-First Architecture: All notes are stored locally by default, giving you complete ownership and control over your data.
  • Cloud Backup (Optional): While designed for local storage, GhostWiki supports optional cloud synchronization for convenience and redundancy.
  • Fernet Encryption: Notes are encrypted on disk using Fernet (AES-128-CBC + HMAC) before they are saved, ensuring data confidentiality.
  • Auto-Save Functionality: Automatically saves changes 2 seconds after you stop typing, preventing data loss.
  • .ghost File Format: Notes are stored as .ghost files, which are Fernet-encrypted JSON blobs.

Architecture & Technology Stack

GhostWiki leverages a modern technology stack to deliver a secure and efficient note-taking experience:

  • Python: The core programming language.
  • Textual TUI: Provides the framework for building the user interface.
  • Fernet: Handles the encryption and decryption of notes.
  • JSON: Used for storing the note content in a structured format.

Why?

I recently switched to Arch Linux and explored the available note-taking tools. However, I wasn’t comfortable with the less-established options, and none of them quite matched my specific requirements. My solution was to create my own note-taking application with the exact features I needed.

A key requirement was reliable backup – I’ve unfortunately had to force a computer reset twice in the past, resulting in data loss. To address this, I designed the application to securely encrypt notes and back them up to a GitHub account. As an extra precaution, I also store the encryption key in Google Drive, ensuring I can access my notes even if I switch devices or encounter unforeseen issues. This layered approach prioritizes data security and ensures I can always recover my notes, regardless of what happens.

Github

https://github.com/spikeyjr/GhostWiki-code