AtTech
  • Products
  • Blog
  • Open Source
  • Contact
HomeOpen SourceSyncly
Open Source · MIT License

Syncly— Developer Documentation & Architecture

Zero-backend, local-first Chrome extension & bookmark workstation operating directly over native Chrome bookmarks with multi-device sync and zero telemetry.

git clone https://github.com/KamrulIslamArnob/Syncly.git
100%
Local-First
< 50ms
Vector Search
60s
Safety Gate
MIT
Open License
Documentation Index
Overview & Intro
01
Quickstart Guide
02
Installation & Runtimes
03
Usage & Workflows
04
API & Schemas
05
Architecture & Pipeline
06
Step-by-Step Tutorial
07
Configuration & Env
08
Development & Testing
09
Security & Privacy
10
FAQ & Troubleshooting
11
License & Legal
12
GitHub Repository
01 · Introduction & Mission

Zero-Backend, Local-First Chrome Bookmark Workstation & New Tab OS

Syncly transforms Chrome new tab page into a high-performance productivity cockpit operating directly over native Chrome bookmarks with contextual workspaces, cross-folder collections, instant fuzzy search, and zero telemetry.

01

100% Local Sovereignty

Operates directly over chrome.bookmarks and chrome.storage.local. Zero cloud servers, zero external accounts, zero tracking.

02

Quota-Proof Cross-Device Sync

Workspaces use the w- prefix under Other Bookmarks to sync natively across all your devices via Chrome account transport.

03

Clean Domain-Driven Architecture

Strict separation of Domain invariants, Application use cases with ports, and a frozen DI container.

04

Zero-Build Vanilla ES Modules

Pure native modern JavaScript with no bundler bloat, sub-500ms first paint, and 273+ automated tests.

02 · Quickstart Setup

Get Started with Syncly in Under 60 Seconds

Clone the repository, load unpacked in Chrome developer mode, and start organizing your native bookmarks instantly.

System Prerequisites
  • Google Chrome 114+ (or any Chromium browser: Brave, Edge, Arc)
  • Git 2.40+
  • Node.js 20+ (optional, only for running unit tests & perf harness)
  • Zero build tools or npm dependencies required for runtime execution
01

Clone the Repository

Clone the official Syncly open-source repository to your local workspace.

git clone https://github.com/KamrulIslamArnob/Syncly.git
cd Syncly
02

Open Chrome Extensions Manager

Navigate to the extension management interface directly in your browser address bar.

chrome://extensions
03

Enable Developer Mode

Toggle the "Developer mode" switch in the top-right corner of the extensions page.

04

Load Unpacked Extension

Click "Load unpacked" in the top-left toolbar and select the root Syncly repository directory.

03 · Runtime Modes & Desktop Packaging

Runtime Installation & Extension Packaging Modes

Syncly runs as a zero-build vanilla ES modules extension in Chrome, with automated packaging scripts for distribution.

Standard Developer Mode (Zero-Build Runtime)

Load the repository root directly as an unpacked extension in Chrome developer mode with instant hot-reload on file edits.

# No npm install required for extension runtime
# Open chrome://extensions -> Load unpacked -> Select Syncly root directory
↳ Syncly immediately takes over the new-tab page with instant cache rendering

Automated Test Suite Runner

Execute the complete 273-test verification suite covering domain entities, use cases, and storage clients.

node --test
↳ 273 passing unit & integration tests in < 1.2s

Puppeteer Performance Baseline Harness

Launch the automated Puppeteer performance harness to benchmark first paint latency and memory footprints.

node scripts/perf-baseline.mjs
↳ First paint < 500ms, deck load < 150ms at 500 bookmarks
Electron Desktop Packaging Targets
Target PlatformBuild CommandArtifact Output
Chrome Web Store Zip Distributionnode scripts/package.mjsdist/syncly-v1.0.0.zip
Self-Hosted Unpacked CRX Packagechrome --pack-extension=.syncly.crx & syncly.pem
Automated Smoke Validationnode scripts/smoke.mjsVerified Manifest V3 & HTML modules integrity
04 · Core Workflows & Operations

Core Workflows & Daily Operations

Master workspaces, collections, omni-search, and automated local disk backups.

01

Contextual Workspace Scoping

Partition your bookmark folders into dedicated contexts without altering your underlying raw Chrome bookmarks.

Click the workspace selector tab in the top navigation bar (Work, Dev, Personal, Design).
Folders under Other Bookmarks with matching w- prefixes are automatically scoped.
Bookmarks sync cross-device via Chrome native account synchronization with quota-proof transport.
Enjoy dedicated, uncluttered two-pane bookmark decks for each operational mode.
02

Instant Omni-Search & Tag Filtering

Sub-millisecond fuzzy search modal across titles, URLs, and custom #tags with Ctrl+K shortcut.

Press Ctrl+K (or Cmd+K on macOS) from any tab or new-tab dashboard.
Type bookmark keywords or filter by tags like #dev, #ai, #reading, or #tools.
Use keyboard arrow keys to navigate and press Enter to launch the target URL immediately.
Or type nt <query> directly into Chrome address bar for instant omnibox navigation.
03

One-Click Quick-Add Toolbar Capture

Capture, categorize, and tag the active tab without interrupting your current workflow.

Click the Syncly extension icon in your Chrome toolbar (popup.html).
The active tab title and URL are automatically pre-populated with auto-detected favicons.
Select a destination category or collection, add optional tags, and hit Enter.
The new bookmark is saved to local storage and immediately reflected across all open new-tab instances.
04

Automated Local File System Snapshots

Zero-telemetry disaster recovery via the File System Access API and IndexedDB.

Open Settings sidebar -> Setup Auto Backup and pick a local backup JSON file on your machine.
Syncly stores the permission file handle persistently inside origin-isolated IndexedDB.
On state mutations, the AutoBackupService writes dirty-checked JSON snapshots to your disk.
Restore your complete workspace configuration anytime with a single click.
05 · Interface Contracts & Database Schemas

Domain Entities, Value Objects & Storage Schemas

Inspect TypeScript definitions and authoritative storage schemas governing Syncly architecture.

UserSettings (Domain Entity)
src/domain/entities/UserSettings.js

Master user preferences entity enforcing strict invariant boundaries via private # fields.

export class UserSettings {
  #name;
  #background;
  #themePreset;
  #timeFormat;
  #clocks;
  #searchEnabled;
  #searchEngine;
  #weatherEnabled;
  #todoEnabled;
  #customCss;

  constructor({
    name = '',
    background = new BackgroundConfig({ kind: 'solid_color', value: '#0B251A' }),
    themePreset = 'minimal',
    timeFormat = '24h',
    clocks = [],
    searchEnabled = true,
    searchEngine = 'google',
    weatherEnabled = false,
    todoEnabled = true,
    customCss = ''
  } = {}) {
    this.#name = this.#sanitizeName(name);
    this.#background = background;
    this.#themePreset = themePreset;
    this.#timeFormat = timeFormat;
    this.#clocks = clocks;
    this.#searchEnabled = Boolean(searchEnabled);
    this.#searchEngine = searchEngine;
    this.#weatherEnabled = Boolean(weatherEnabled);
    this.#todoEnabled = Boolean(todoEnabled);
    this.#customCss = customCss;
  }

  toJSON() {
    return {
      name: this.#name,
      background: this.#background.toJSON(),
      themePreset: this.#themePreset,
      timeFormat: this.#timeFormat,
      clocks: this.#clocks,
      searchEnabled: this.#searchEnabled,
      searchEngine: this.#searchEngine,
      weatherEnabled: this.#weatherEnabled,
      todoEnabled: this.#todoEnabled,
      customCss: this.#customCss
    };
  }
}
Bookmark (Domain Entity)
src/domain/entities/Bookmark.js

Bookmark entity governing title sanitization, category binding, order sorting, and access tracking.

export class Bookmark {
  #id;
  #title;
  #url;
  #categoryId;
  #order;
  #lastAccessed;
  #accessCount;
  #faviconUrl;

  constructor({ id, title, url, categoryId, order = 0, lastAccessed = null, accessCount = 0, faviconUrl = '' }) {
    this.#id = id;
    this.#title = this.#validateTitle(title);
    this.#url = url instanceof Url ? url : new Url(url);
    this.#categoryId = categoryId;
    this.#order = Number.isInteger(order) && order >= 0 ? order : 0;
    this.#lastAccessed = lastAccessed;
    this.#accessCount = accessCount;
    this.#faviconUrl = this.#normalizeFaviconUrl(faviconUrl);
  }

  recordAccess(timestamp = Date.now()) {
    this.#lastAccessed = timestamp;
    this.#accessCount += 1;
  }
}
EventBus (Application Port)
src/application/ports/EventBus.js

Synchronous publish/subscribe event bus governing real-time reactive updates across extension surfaces.

export class EventBus {
  #handlers = new Map();

  on(event, handler) {
    if (!this.#handlers.has(event)) {
      this.#handlers.set(event, new Set());
    }
    this.#handlers.get(event).add(handler);
    return () => this.off(event, handler);
  }

  off(event, handler) {
    const set = this.#handlers.get(event);
    if (set) {
      set.delete(handler);
      if (set.size === 0) this.#handlers.delete(event);
    }
  }

  emit(event, payload) {
    const set = this.#handlers.get(event);
    if (set) {
      for (const handler of set) {
        try {
          handler(payload);
        } catch (err) {
          console.error(`[EventBus] Error in handler for ${event}:`, err);
        }
      }
    }
  }
}
Authoritative SQLite Schema

chrome.storage.local (Key-Value Relational Cache)

Local on-disk extension storage holding categories, bookmarks, tasks, and widget layout positions.

// Key-Value Collections Schema stored in chrome.storage.local
{
  "settings": UserSettingsJSON,
  "categories": Array<CategoryJSON>,
  "bookmarks": Array<BookmarkJSON>,
  "tasks": Array<TaskJSON>,
  "layout": Array<WidgetLayoutJSON>,
  "quickNote": string,
  "lastBackupTimestamp": number
}

chrome.storage.sync (Metadata Mirror Transport)

Quota-safe cross-device mirror holding small lightweight workspace preferences and tag definitions.

// Metadata Mirror Schema stored in chrome.storage.sync (~8KB per item limit)
{
  "workspace_registry": Array<{ id: string, name: string, folderName: string }>,
  "active_theme": string,
  "tag_index": Record<string, Array<string>> // tag -> Array<bookmarkId>
}

chrome.bookmarks Tree (Authoritative Hierarchy Transport)

Native Chrome bookmarks tree utilizing the w- prefix convention under Other Bookmarks.

// Native Chrome Bookmark Folder Hierarchy
Roots:
  ├── Bookmarks Bar
  └── Other Bookmarks
      ├── w-Work          [Auto-discovered Workspace: "Work"]
      ├── w-Development   [Auto-discovered Workspace: "Development"]
      ├── w-Design        [Auto-discovered Workspace: "Design"]
      └── w-Personal      [Auto-discovered Workspace: "Personal"]
06 · Architecture & Demuxing Pipeline

Clean Architecture & Reactive Event Pipeline

Explore the 4-tier clean architecture: Domain, Application Ports, Infrastructure, and Presentation.

Domain Layer (Zero Dependencies)

Business Invariants & Value Objects

src/domain/entities/* & src/domain/valueObjects/*

Owns pure business logic and invariants (UserSettings, Bookmark, Task, Category, Url, BackgroundConfig). Knows nothing about Chrome APIs, DOM, or storage.

Application Layer (Ports & Use Cases)

Use Cases & Port Interfaces

src/application/useCases/* & src/application/ports/*

Orchestrates domain entities through ports (EventBus, StoragePort, ClockPort, WeatherService, SanitizerPort). ~35 dedicated use case classes.

Infrastructure Layer (Hardware & APIs)

Chrome APIs, Storage & Services

src/infrastructure/*

The sole layer interacting with chrome.storage, chrome.bookmarks, File System Access API, IndexedDB, and external fetch endpoints. Houses DI composition root.

Presentation Layer (UI & Views)

NewTab, Popup, Options & Sidepanel

src/presentation/*

Pure vanilla JavaScript controllers and view components. Communicates solely through the frozen DI container, listening for EventBus events.

5-Stage Streaming Pipeline Flow
11. User trigger initiated (Popup submit / NewTab drag / Omnibox nt command)
22. Use case executes input sanitization and domain invariant validation
33. Infrastructure repository persists state to chrome.storage.local or chrome.bookmarks
44. Synchronous EventBus emits domain event (e.g. bookmarks:changed)
55. chrome.storage.onChanged listener automatically invalidates caches across all open tabs & views
07 · Step-by-Step Tutorial & Safety Gate

End-to-End Walkthrough: Adding a Bookmark & Reactive Multi-Tab Sync

Follow the exact data flow from toolbar popup click to new-tab dashboard re-render.

Scenario: Saving an active GitHub repo tab from popup.html into the "Development" workspace with #oss tag.
1

User Opens Quick-Add Popup

chrome.action.onClicked -> popup.html loads with active tab context
Note: popupController queries activeTab and pre-fills title and URL
2

Form Submission & Validation

popupController.submit() -> useCases.createBookmark.execute({ title, url, categoryId })
Note: BasicSanitizer strips unsafe tags and Url value object enforces http/https protocol
3

Persistence in Local Storage & Bookmarks

bookmarkRepo.save(bookmark) -> chrome.storage.local.set({ bookmarks })
Note: Domain Bookmark entity assigned unique UUID and appended to category order
4

EventBus Broadcast & Cross-Tab Sync

events.emit("bookmarks:changed") -> storage.onChanged broadcast
Note: All open NewTab instances receive event and re-render bookmark deck in < 10ms with zero layout shift

Interactive 60s Safety Approval Simulator

Experience the human-in-the-loop safety countdown and anti-replay single-use token architecture.

08 · Environment & Configuration

Configuration Parameters & Theme Settings

Customize backgrounds, font styles, clock widgets, and search engine bindings.

UserSettings Config Reference
Variable KeyRequiredDefaultDescription
themePresetOptionalminimalTheme visual style: minimal | nord | cyberpunk | sage
timeFormatOptional24hClock format display mode: 12h | 24h
searchEngineOptionalgoogleDefault search engine: google | duckduckgo | bing | yahoo | youtube
weatherEnabledOptionalfalseToggle Open-Meteo privacy-first weather widget
backgroundBlurOptional0Background image blur intensity (0 - 20px)
buttonRoundnessOptional0UI corner radius token in pixels (0 - 24px)
clocksOptionalSF, London, Dhaka, TokyoArray of WorldClockConfig items with IANA timezone strings
09 · Development & Verification Suite

Development Workflow & 273-Test Automated Suite

Run unit tests with the built-in Node.js test runner and benchmark performance with Puppeteer.

Node.js Native Test Runner (Unit & Domain)

node --test

Executes 273 tests covering Domain entities, Application use cases, sanitizers, and repository mocks with zero external test runners.

Puppeteer Performance Baseline Harness

node scripts/perf-baseline.mjs

Automates Chrome headless browser launches to verify sub-500ms first contentful paint and deck load times at scale.

Extension Smoke Test Suite

node scripts/smoke.mjs

Validates Manifest V3 schema compliance, HTML module script imports, and image assets integrity.

Contribution Guidelines
  • Zero-build rule: All code must remain pure native ES modules without bundler compile steps or Babel transpilation.
  • Private field invariants: All domain entity state must be protected by private # fields and strict validator setters.
  • Zero telemetry policy: Never import external analytics trackers, tracking pixels, or remote script bundles.
  • Memory efficiency: Avoid full DOM rebuilds; use granular reconciliation and silent access count increments.
10 · Zero-Cloud Security Architecture

Zero-Cloud Security Model & Defense in Depth

How Syncly enforces boundary sanitization, CSP isolation, and local storage sovereignty.

CSP Isolation

Strict Manifest V3 CSP

Blocks all inline scripts, eval execution, and remote JavaScript. Scripts are strictly restricted to extension local files.

Sanitization

Boundary Input Sanitization

All user strings pass BasicSanitizer before hitting domain entities; URLs are strictly validated to http/https schemes.

Local Sovereignty

Local File System Protection

File System Access API handles are stored strictly in origin-isolated IndexedDB, never uploaded or synced to external clouds.

11 · Still Curious?

Got Questions?

We've Got Answers

Everything you need to know about atTrack architecture, offline capabilities, and local LLM inference.

Kamrul Islam Arnob

Kamrul Islam Arnob

Lead Maintainer

Have a question about the roadmap, architecture, or contributing? Reach out directly.

attech.agency@gmail.com
+8801984933215

Yes. Syncly is released under the permissive MIT License. You have complete freedom to audit, fork, customize, or build extensions on top of it.

12 · Permissive Open Source Terms

MIT License

SPDX: MIT · Copyright © 2026 Syncly Contributors & AtTech Studio

MIT License Copyright (c) 2026 Syncly Contributors & AtTech Studio Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Ready to Build?

Star, fork, and contribute to Syncly

Join the open-source community building local-first, privacy-respecting career intelligence tools.

All Open Source Projects
MIT LicenseZero Cloud TelemetryLocal-First Architecture

Join Our Newsletter

AtTech is an enterprise technology agency. Custom SaaS, AI automations, connected ecommerce & 30-day production sprints.

COMPANY
  • About Us
  • Services
  • Products
  • Open Source
  • Blog
  • Contact Us
SERVICES
  • AI & Automations
  • Full-Stack Development
  • E-Commerce & ERP
  • UI/UX Design
  • Graphics Design
Direct Booking

Talk With Our Team

30m Cal VideoUTC time (GMT+0)
August 2026
SuMoTuWeThFrSa
Available Times

No open slots on this date.

Project Brief

Have a Project in Mind?

Selected: August 28, 2026

© 2025 AtTech. All Rights Reserved.
attech
© 2025 AtTech. All Rights Reserved.