Puranjay Savar Mattas 8ce0804c67 fix(home): remove dead search icon, add staleness polling and retry
Three parity gaps found reviewing Home against CollectionOverviewView:

- The toolbar's contextual search icon rendered on Home but
  contextualSearchQuery is only ever read by CollectionOverviewView —
  clicking it and typing did nothing. Hidden specifically on the Home
  landing page per explicit request (sidebar's global search already
  covers this); goHome() also clears the stale query/expanded state so
  it can't leak back in when returning to a collection.
- Home had no periodic remote-changes check, unlike CollectionsTreeView
  and CollectionOverviewView. Added the same 45s-poll + banner pattern,
  fingerprinting pinned docs and the current tab's docs against fresh
  fetches; bails silently on a fetch failure instead of false-positive
  triggering the banner.
- Tab load errors showed a message but no way to retry short of
  switching tabs and back. Added a Retry button matching the collection
  document list's.

Also hardens CODEOWNERS ahead of going public: kept `* @psmattas` as
the catch-all but pinned supply-chain/governance/CI paths (Package
manifests, .gitea/, xcodeproj build settings, scripts/, LICENSE,
CONTRIBUTING/SECURITY/SETUP, CLAUDE.md, docs/ARCHITECTURE.md)
explicitly to @psmattas so they stay owner-gated even if `*` opens up
to other contributors later.
2026-08-14 17:19:07 +01:00
2026-08-12 18:48:19 +01:00
2026-08-12 18:48:19 +01:00
2026-08-12 19:08:30 +01:00
2026-08-12 19:08:30 +01:00
2026-08-12 19:08:30 +01:00

Outpost

A native Apple ecosystem client for Outline — built for iOS, iPadOS, and macOS from a single SwiftUI codebase, aiming for full editing parity with Outline's web app, including realtime collaborative editing.

Why

Outline's web app is great, but there's no native Apple client with full editing parity. This project connects to a self-hosted Outline instance over its REST API and realtime collaboration socket to provide a proper native experience across the Apple ecosystem.

Status

Early development. See CLAUDE.md for the current architecture and phased build plan.

  • Phase 1 — Auth, browse, search, REST-only editing
  • Phase 2 — Realtime collaborative editing (Yjs/Hocuspocus)
  • Phase 3 — Offline cache, tables, embeds, comments, macOS polish

Requirements

  • Xcode 16+
  • iOS 17+ / iPadOS 17+ / macOS 14+
  • A self-hosted (or hosted) Outline instance with API access

They will be updated. These are old requirements.

Setup

  1. Clone the repo and open the .xcodeproj in Xcode.
  2. Generate a scoped API key on your Outline instance (Settings → API Keys).
  3. On first launch, enter your instance URL and API key — these are stored in Keychain, never in app config or source.

Architecture

See CLAUDE.md and docs/ARCHITECTURE.md for the full technical breakdown: REST layer, Yjs/Hocuspocus realtime sync via YSwift, and the ProseMirror-schema-to-native-editor mapping.

Disclaimer

This project is being built to solve a personal problem — I wanted a genuinely good native knowledge-base client for my own self-hosted Outline instance and none of the existing options fit. It's a personal-use tool first, not a polished product with support guarantees.

Parts of this codebase are AI-assisted (built with the help of AI coding tools). Treat that however you like — review, use, fork, or ignore the code accordingly. No warranty of quality, security, or fitness for any particular use is implied beyond what's stated in the license below.

License

This project is a client only — it does not include, vendor, or redistribute any of Outline's (BSL 1.1 licensed) server source. See LICENSE for this repository's own license.

Not affiliated with Outline

This is an independent, unofficial client. Not affiliated with or endorsed by General Outline, Inc.

S
Description
Native Apple ecosystem client for a self-hosted Outline instance
Readme
8.2 MiB
Languages
Swift 99.2%
Shell 0.8%