Skip to content
André Paul Grandsire edited this page Apr 12, 2026 · 1 revision

Core Layer

The src/core/ directory contains platform-agnostic business logic and interfaces.

Directory Structure

src/core/
├── interfaces/    # Abstract interfaces
│   ├── settings.ts
│   ├── persistence.ts
│   └── task-view.ts
└── utils/
    └── sort.ts    # Sorting utilities

Interfaces

ISettings (interfaces/settings.ts)

Abstract interface for application settings.

export interface ISettings {
  get_int(key: string): number;
  set_int(key: string, value: number): void;
  get_string(key: string): string;
  set_string(key: string, value: string): void;
}

IPersistence (interfaces/persistence.ts)

Abstract interface for task data persistence.

import type { ITask } from '../../app.types.js';

export interface IPersistence {
  load(): Promise<ITask[]>;
  save(tasks: ITask[]): Promise<void>;
}

ITaskView (interfaces/task-view.ts)

Abstract interface for task display widgets.

Persistence Implementation

GNOME uses src/platform/gnome/persistence/gio-persistence.ts (file-based JSON).

Design Principles

  • Platform Agnostic: No GTK, Adw, Gio imports in src/core/
  • Dependency Injection: Platforms inject their implementations
  • Extensibility: Add new interfaces in src/core/interfaces/