Mirror of github.com/ewanc26/inkwell
Find a file
2026-07-16 18:22:46 +01:00
.letta feat: reader subscribe/recommend, discover thumbnails, overflow guards 2026-06-22 10:30:28 +01:00
altstore Add AltStore source listing 2026-06-27 18:35:15 +01:00
Inkwell Cross-reference iOS in Android credits and vice versa 2026-06-29 21:39:52 +01:00
Inkwell.xcodeproj Cross-reference iOS in Android credits and vice versa 2026-06-29 21:39:52 +01:00
InkwellTests docs: add explanatory comments throughout codebase 2026-06-25 16:00:42 +01:00
oauth fix: Swift 6 actor isolation + RFC 8252 redirect URI 2026-06-22 11:22:07 +01:00
.gitignore chore: add .letta/ to gitignore 2026-06-22 10:30:28 +01:00
AGENTS.md docs: correct agent guidance after source audit 2026-07-16 18:22:46 +01:00
LICENSE chore: add LICENSE 2026-06-22 10:30:28 +01:00
logo-dark.svg docs: update README 2026-06-22 10:30:28 +01:00
logo-light.svg docs: update README 2026-06-22 10:30:28 +01:00
README.md rewrite readme to be more direct 2026-06-29 22:13:24 +01:00

Inkwell

Inkwell

A native SwiftUI reader and writer for the Standard.site publishing ecosystem on AT Protocol.

An experimental Android version is also available.

Features

  • Reads site.standard.publication and site.standard.document records from the author's PDS. Three-tab layout (Read / Discover / Write).
  • Renders Markpub Markdown plus Leaflet, pckt, and Offprint content. Uses textContent as a fallback. Native block rendering for Leaflet (including blob-stored pages), Markdown for everything else.
  • Theme resolution: Leaflet's light/dark palette → basicTheme → system defaults. Publication-level by default, overridable per document.
  • Publishes Standard.site documents with portable metadata and selectable content formats.
  • Creates and removes site.standard.graph.subscription records and recommends.
  • Searches the cross-platform Standard.site public index, fetches records directly from the author.
  • Publication .well-known and document <link> verification.
  • Polls subscribed publications for notifications (in-app + local), including background app refresh.
  • OAuth sign-in with your AT Protocol handle (no app password). Session resumes silently from the Keychain on relaunch.

Getting started

git clone https://github.com/ewanc26/inkwell.git
cd inkwell

Open Inkwell.xcodeproj in Xcode, build and run. Sign in with your AT Protocol handle via OAuth.

Interoperability

Standard.site standardises publishing metadata rather than one body format. Inkwell always publishes textContent and defaults to at.markpub.markdown, while retaining readers for pub.leaflet.content, blog.pckt.content, and app.offprint.content.

Inkwell-owned lexicons use the uk.ewancroft.inkwell.* namespace. Shared records use their canonical site.standard.* NSIDs.

Design

The app icon and in-app wordmark share one set of vector coordinates, so they always match. Both are duotone: the letterform follows the system foreground colour (light/dark and tinted icon modes), while the ink drop uses one fixed brand colour in Display P3.

Testing

InkwellTests covers AT-URI parsing, record encoding/decoding, publication/document association rules, theme and verification-endpoint resolution, and tolerant decoding of malformed records.

Dependencies

  • ATProtoKit — via Swift Package Manager (https://github.com/MasterJ93/ATProtoKit.git)

Licence

AGPL 3.0 — see LICENCE