2026-04-28 22:55:10 +03:00
2026-04-28 22:55:10 +03:00
2026-04-28 22:55:10 +03:00
2026-04-28 22:55:10 +03:00
2026-04-28 22:55:10 +03:00

ReadeckFrugal

A multiplatform Apple client (iOS / iPadOS / macOS) for Readeck — read your saved web pages offline.

Stack

  • Language: Swift
  • UI: SwiftUI
  • Persistence: SwiftData
  • Networking: Moya (async/await wrapper)
  • Module layout: Swift Package Manager (local package in Modules/)

Layout

ReadeckMobile/
├── App/                                # Thin app shell (added to Xcode project)
│   ├── ReadeckFrugalApp.swift          # @main, ModelContainer wiring
│   └── ReadeckFrugal.entitlements      # macOS sandbox + network client
├── Modules/                             # Local SPM package
│   ├── Package.swift
│   ├── Sources/
│   │   ├── ReadeckCore/                # SwiftData @Model types + credentials store
│   │   ├── ReadeckNetworking/          # Moya TargetType, async client, sync service
│   │   └── ReadeckFeatures/            # SwiftUI screens (List, Reader, Settings)
│   └── Tests/
└── README.md

Module dependency graph:

ReadeckFeatures ──► ReadeckNetworking ──► ReadeckCore
        └──────────────────────────────────► ReadeckCore

Verify the package

From the repo root:

cd Modules
swift build
swift test

Create the Xcode project

The Xcode project is generated by Xcode itself — it is not committed.

  1. Open Xcode → File ▸ New ▸ Project…
  2. Pick Multiplatform ▸ App.
  3. Name it ReadeckFrugal. Save it inside the repo root (/Users/juraldinio/ReadeckMobile) with Create Git repository unchecked (this folder is already a git repo).
  4. Delete the auto-generated ReadeckFrugalApp.swift and ContentView.swift inside the new project.
  5. Drag the App/ folder into the Xcode project so it joins the app target (ReadeckFrugalApp.swift, ReadeckFrugal.entitlements).
  6. Drag the Modules/ folder into the Project navigator (root level, not into a target). Xcode will recognise it as a local Swift package.
  7. Select the app target → General ▸ Frameworks, Libraries, and Embedded Content+ → add ReadeckCore, ReadeckNetworking, ReadeckFeatures.
  8. Select the app target → Signing & Capabilities → set the entitlements file path to App/ReadeckFrugal.entitlements.
  9. Build and run on iOS, iPadOS, or macOS.

Configure a Readeck server

On first launch the app shows the onboarding settings screen. Enter:

  • Server URL — e.g. https://readeck.example.com
  • API token — generated in your Readeck profile under API Tokens

Credentials are stored in UserDefaults for now. Swap UserDefaultsCredentialsStore for a Keychain implementation before shipping.

S
Description
Mobile client for Readeck.org
Readme 71 KiB
Languages
Swift 86.6%
Python 13.4%