Local-First • Hybrid Block-Markdown Knowledge Base • Canvas Graph Visualizer
Key Features • Tech Stack • Getting Started • Architecture • Shortcuts • Contributing
Oink is a modern, high-performance, local-first markdown workspace and knowledge management platform designed for developers, researchers, and creators.
By combining the block-editing ergonomics of modern canvas tools with the portable, open-standards durability of plain text .md files, Oink offers a powerful editing environment with zero vendor lock-in, zero cloud telemetry, and complete offline privacy.
- Plain Markdown Storage: All documents are stored directly as human-readable
.mdfiles on your local file system. - Git Friendly: Works natively with Git version control, Obsidian vaults, Logseq directories, and any standard text editor.
- Offline Reliability: Instant startup and sub-millisecond file interactions without cloud dependencies.
- Rich Interactive Blocks: Seamlessly convert between raw markdown and structured blocks (Headings, Checklists, Nested Lists, Code Fences, Tables, Blockquotes, Delimiters, and Inline Callouts).
- Media & Embed Support: Drag-and-drop local images, embed web videos (
.mp4, YouTube, Vimeo, CodePen), and customize captions directly. - KaTeX Mathematics: Native inline and block-level LaTeX rendering (
$math$and$$equation$$).
- Interlinked Knowledge: Create connections using
[[Note Name]]wikilinks with auto-completion and click-to-navigate. - Interactive Force-Directed Graph: Hardware-accelerated canvas graph that visualizes node relationships, connection density, and orphan documents in real time.
- Per-Page Styling: Configure font family, font size, line height, letter spacing, font weight, and text alignment per document or globally.
- Visual Covers & Icons: Add Unsplash photography or gradient banners, custom emoji icons, and toggleable title headers with YAML frontmatter persistence.
- Distraction-Free Full-Screen Mode: Hide peripheral toolbars and sidebars for an immersive writing session.
Draggable, resizable, floating desktop tool panels that overlay your workspace:
- Document Outline Widget: Dynamic heading tree with jump-to-section navigation.
- Assistant Panel: Local diagnostic scanner for passive voice, wordiness, grammar suggestions, and AI integrations.
- Quick Terminal: Embedded dev log monitor and shell command runner.
- Extensions & Plugins Widget: Modular extension manager to toggle KaTeX, Daily Journals, Pomodoro timers, and diagrams.
- Document Statistics: Live word count, character count, estimated reading time, and language indicators.
- Code Snippets Library: Instant code templates for Python, TypeScript, SQL, JSON, and Markdown tables.
| Component | Technology | Description |
|---|---|---|
| Runtime | Electron 39 | Cross-platform desktop runtime with secure IPC architecture |
| UI Framework | React 19 | Modern concurrent UI engine with functional hooks |
| Language | TypeScript 5.9 | Strict type checking across main, preload, and renderer layers |
| Build Tooling | electron-vite / Vite 7 | High-speed HMR bundling and multi-target compilation |
| Styling | Vanilla CSS + TailwindCSS 4 | Custom Brutalist dark theme with responsive glassmorphic overlays |
| Editor Core | Editor.js | Block-based modular editing framework with custom markdown adapters |
| Icons | Lucide React | Lightweight, consistent SVG icon system |
| Background Indexing | Web Workers | Asynchronous tokenization, metadata parsing, and wikilink graph indexing |
Ensure you have the following installed on your machine:
- Node.js
>= 20.0.0 - npm, bun, or pnpm
-
Clone the repository:
git clone https://github.com/HawkdotDev/oink.git cd oink -
Install dependencies:
npm install
-
Start the development server:
npm run dev
To package Oink as a native desktop binary:
# Package for current OS (unpacked directory)
npm run build:unpack
# Build Windows installer (.exe)
npm run build:win
# Build macOS package (.dmg / .zip)
npm run build:mac
# Build Linux package (.AppImage / .deb)
npm run build:linuxOutput binaries will be generated in the dist/ directory.
Oink maintains strict type safety and code quality standards:
# Type check TypeScript across all targets
npm run typecheck
# Run ESLint validation
npm run lint
# Format codebase with Prettier
npm run formatContributions, feature suggestions, and bug reports are welcome!
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please review our Contributing Guidelines and ensure all linting and typecheck passes before submitting PRs.
Distributed under the MIT License. See LICENSE for more details.
Built with care by the Oink Open Source Community.
