# vanz15/tabbin architecture

> Architecture diagram of the GitHub repository vanz15/tabbin, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vanz15/tabbin
- Repository: https://github.com/vanz15/tabbin

## Overview

Tabbin is an Electron desktop notes dock. The main workflow is to reveal the dock, find or create a note, edit it in its own window, and keep the note collection locally. Main-process code also owns dock/window behavior and note/config persistence; the preload exposes a narrow IPC bridge. Auto-updating is a separate capability. Renderer internals were not sampled, so UI connections rely on the README’s documented workflow; unsampled updater wiring from the main process is not asserted.

Main entry points: [`main.js`](https://github.com/vanz15/tabbin/blob/main/main.js) (App coordinator), [`updater.js`](https://github.com/vanz15/tabbin/blob/main/updater.js) (Update controller), [`preload.js`](https://github.com/vanz15/tabbin/blob/main/preload.js) (IPC bridge), [`dock.html`](https://github.com/vanz15/tabbin/blob/main/dock.html) (Notes dock)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Dock and editors"]
  node_dock["Notes dock<br/>[dock.html]"]
  node_note_editor["Note editor<br/>[note.html]"]
  node_shortcuts["Shortcuts help<br/>[shortcuts.html]"]
end

subgraph group_runtime["App runtime"]
  node_preload["IPC bridge<br/>[preload.js]"]
  node_main["App coordinator<br/>[main.js]"]
  node_note_windows["Note windows<br/>[main.js]"]
end

subgraph group_data["Local data"]
  node_notes_store[("Notes storage<br/>[main.js]")]
  node_config_store[("Settings storage<br/>[main.js]")]
end

subgraph group_updates["Auto-updates"]
  node_update_service["Update controller<br/>[updater.js]"]
  node_update_state["Update state machine<br/>[updater-state.js]"]
  node_release_feed["GitHub releases"]
end

node_user(("User"))

node_user -->|"reveals and uses"| node_dock
node_dock -->|"requests note actions"| node_preload
node_preload -->|"invokes IPC handlers"| node_main
node_main -->|"sends change events"| node_preload
node_main -->|"reads and writes"| node_notes_store
node_main -->|"loads and saves"| node_config_store
node_main -->|"opens and manages"| node_note_windows
node_user -->|"edits notes"| node_note_editor
node_user -->|"opens help"| node_shortcuts
node_update_service -->|"reduces events"| node_update_state
node_update_service -->|"checks and downloads"| node_release_feed
node_user -.->|"requests update actions"| node_update_service

click node_dock "https://github.com/vanz15/tabbin/blob/main/dock.html"
click node_note_editor "https://github.com/vanz15/tabbin/blob/main/note.html"
click node_shortcuts "https://github.com/vanz15/tabbin/blob/main/shortcuts.html"
click node_preload "https://github.com/vanz15/tabbin/blob/main/preload.js"
click node_main "https://github.com/vanz15/tabbin/blob/main/main.js"
click node_note_windows "https://github.com/vanz15/tabbin/blob/main/main.js"
click node_notes_store "https://github.com/vanz15/tabbin/blob/main/main.js"
click node_config_store "https://github.com/vanz15/tabbin/blob/main/main.js"
click node_update_service "https://github.com/vanz15/tabbin/blob/main/updater.js"
click node_update_state "https://github.com/vanz15/tabbin/blob/main/updater-state.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dock,node_note_editor,node_shortcuts,node_user toneBlue
class node_preload,node_main,node_note_windows toneAmber
class node_notes_store,node_config_store toneMint
class node_update_service,node_update_state,node_release_feed toneRose
```

## Components

### Dock and editors

- [Notes dock](https://github.com/vanz15/tabbin/blob/main/dock.html): `dock.html`
- [Note editor](https://github.com/vanz15/tabbin/blob/main/note.html): `note.html`
- [Shortcuts help](https://github.com/vanz15/tabbin/blob/main/shortcuts.html): `shortcuts.html`

### App runtime

- [IPC bridge](https://github.com/vanz15/tabbin/blob/main/preload.js): `preload.js`
- [App coordinator](https://github.com/vanz15/tabbin/blob/main/main.js): `main.js`
- [Note windows](https://github.com/vanz15/tabbin/blob/main/main.js): `main.js`

### Local data

- [Notes storage](https://github.com/vanz15/tabbin/blob/main/main.js): `main.js`
- [Settings storage](https://github.com/vanz15/tabbin/blob/main/main.js): `main.js`

### Auto-updates

- [Update controller](https://github.com/vanz15/tabbin/blob/main/updater.js): `updater.js`
- [Update state machine](https://github.com/vanz15/tabbin/blob/main/updater-state.js): `updater-state.js`
- **GitHub releases**

### Other components

- **User**

## Connections

- User → Notes dock: reveals and uses (evidence: `README.md`)
- Notes dock → IPC bridge: requests note actions (evidence: `README.md`)
- IPC bridge → App coordinator: invokes IPC handlers (evidence: `preload.js`)
- App coordinator → IPC bridge: sends change events (evidence: `preload.js`)
- App coordinator → Notes storage: reads and writes (evidence: `main.js`)
- App coordinator → Settings storage: loads and saves (evidence: `main.js`)
- App coordinator → Note windows: opens and manages (evidence: `main.js`)
- User → Note editor: edits notes (evidence: `README.md`)
- User → Shortcuts help: opens help (evidence: `README.md`)
- Update controller → Update state machine: reduces events (evidence: `updater.js`)
- Update controller → GitHub releases: checks and downloads (evidence: `README.md`)
- User → Update controller: requests update actions
