~/work/owly-newsActive

Owly News

A shared Rust core powers a Tauri/Svelte desktop app and a native ratatui TUI, with optional local summarization that never becomes a hard dependency.

Solo Engineer · Open Source Project · 2025 - present

What it does

Feeds, refresh, SQLite persistence, search and summarization live behind a shared Rust core. The desktop and terminal interfaces consume the same domain and storage boundaries.

Problem

A news reader should keep ingesting and browsing when summarization is unavailable.

Constraints

  • Two interfaces need the same behavior while terminal and Tauri types stay outside the core.

How it's built

  • Feeds enter the shared Rust core through ingest and refresh.
  • SQLite, search and events remain in owly-core.
  • Tauri/Svelte and ratatui frontends consume the same behavior; summarization is optional.
Owly News · shared core

Engineering decisions

Keep domain behavior in owly-core

GUI and TUI share persistence, refresh and query semantics.

Trade-off Frontend adapters must respect the core boundary.

Make summarization a trait

Providers can be swapped or unavailable without breaking feeds.

Trade-off Pending summaries need explicit retry semantics.

Evidence

Shared behavior
Rust core

Desktop and terminal frontends

Local persistence
SQLite

WAL and concurrent access

LLM boundary
Optional

Feeds continue without summarization

Related case study

The project page describes what exists. The case study follows the decisions, constraints, and trade-offs behind it.

Case study

Highlights

  • One core, two interfaces Tauri commands/events and a terminal state machine both consume owly-core.
  • AI remains optional Unavailable providers leave articles retryable rather than breaking refresh.