[READ-ONLY] Mirror of https://github.com/ewanc26/inkwell. Inkwell is a Standard.site client for iOS.
JavaScript 67%
Swift 18%
Kotlin 11%
CSS 2%
Svelte <1%
<1%
Shell <1%
HTML <1%
TypeScript <1%
Batchfile <1%

README.md

Inkwell #

Inkwell

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

Inkwell is a native app available on iOS and Android. This monorepo also contains the marketing/legal site that hosts the app's install sources and OAuth metadata.

Repository structure #

Directory Purpose
iOS/ iOS app (SwiftUI)
Android/ Android app (Kotlin/Compose)
website/ Marketing/legal site and OAuth metadata (inkwell.ewancroft.uk)

Features #

  • Reads site.standard.publication and site.standard.document records from the author's PDS.
  • 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.
  • Real device screenshots are checked in under iOS/screenshots/, Android/fastlane/metadata/.../images/phoneScreenshots/, and website/static/screenshots/, captured via each app's -screenshot (iOS) / intent-extra (Android) mock-data mode.
  • 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 on relaunch.

Getting started #

iOS #

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

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

Android #

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

Build with Gradle:

./gradlew assembleDebug

Run on API 26+ device or emulator. 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 #

iOS #

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

Android #

Run ./gradlew test from the Android/ directory.

Dependencies #

  • iOS: ATProtoKit — via Swift Package Manager (https://github.com/MasterJ93/ATProtoKit.git)
  • Android: atproto-kotlin — via Gradle version catalog

Support #

If you find this project useful, consider supporting its development:

Ko-fi GitHub Sponsors

AI-assisted contributions #

AI tools may be used when contributing, but do not add Co-authored-by: trailers crediting AI agents. Attribution is reserved for human contributors only.

Licence #

AGPL 3.0 — see LICENSE