VimDo is a decentralized, local-first task management application built with Electron. It combines the efficiency of Vim-style keyboard navigation with the transparency of plain-text Markdown storage. Designed for privacy and resilience, VimDo operates without a central server, allowing users to safely synchronize tasks across local network devices via a Peer-to-Peer (P2P) architecture.
Academic Context: This project was developed as part of the "Advanced Programming" (Programação Avançada) course at ISLA Gaia, under the guidance and request of Prof. Luís Osório.
- Keyboard-Driven Workflow: Navigate and edit tasks using Vim state modes (Normal, Command, Insert).
- Transparent Storage: Tasks are stored locally as
.mdfiles featuring YAML Frontmatter for metadata and raw Markdown for descriptions. - Decentralized P2P Sync: Devices discover each other locally via mDNS (Zero-configuration) and synchronize tasks using an HTTP transport layer with a Last-Write-Wins (LWW) conflict resolution strategy.
- Privacy First: No cloud accounts or central servers are required. Data remains entirely on your local machine until explicitly shared with the network.
- Secure Architecture: Built with strict Electron security policies, including Context Isolation (IPC) and strict Content-Security-Policy (CSP) to prevent XSS and CSS injection attacks.
- Node.js (v18 or higher recommended)
- Git
- Clone the repository:
git clone https://github.com/spellobot/vimdo.git cd vimdo - Install the required dependencies:
npm install
- Run the application:
npm start
VimDo relies on three operational modes, seamlessly switched via the keyboard.
- Normal Mode (
Esc): The default mode for navigation. Usej(down) andk(up) to select tasks. Pressxto quickly toggle the task status (pending/completed). - Insert Mode (
iora): Switches to the raw Markdown text editor. PressEscto save changes, trim trailing whitespaces, and return to Normal Mode. - Command Mode (
:): Opens the command prompt at the bottom bar to manage files, tags, and trigger network operations. PressEnterto execute.
| Action | Command | Example |
|---|---|---|
| Create Task | new [folder]/[title] or new [title] |
:new Projects/Fix Login |
| Delete Task | del [folder]/[title] or del |
:del (Deletes active task) |
| Navigate Folder | cd [folder] |
:cd Projects (Use / to clear) |
| Filter by Tag | tag [name] |
:tag work |
| Manage Tags | tag+ [name] / tag- [name] |
:tag+ urgent |
| Set Priority | priority [low/medium/high] |
:priority high |
| Toggle Status | done, undo, or toggle |
:done |
| Share Active Task | push or share |
:push (P2P Broadcast) |
| Sync All Tasks | sync |
:sync (P2P Broadcast) |
We welcome contributions to VimDo. Please follow the standard Git workflow and adhere to the Conventional Commits specification for your commit messages to ensure an atomic and readable history.
- Fork the repository.
- Create your feature branch (
git checkout -b feature/amazing-feature). - Commit your changes (
git commit -m "feat: implement amazing feature"). - Push to the branch (
git push origin feature/amazing-feature). - Open a Pull Request.
License: GPL-3.0-only