English · 简体中文
A private timeline with no audience.
Capture text, photos, audio, video, documents, and everyday check-ins without turning your life into a social feed.
App Store · Privacy & Support · Source Release
Ownlight sits between a social timeline and a traditional journal. Posting feels lightweight, but everything is for you: no followers, public comments, engagement counters, ads, or pressure to perform.
| Local first | New moments are written to the iPhone's local SQLite archive first. Capture, browse, and search still work without a network connection. |
| Private by design | Ownlight has no developer-hosted account system or social graph. Optional iCloud sync uses the user's private CloudKit database. |
| Rich moments | Record text, photos, audio, video, PDFs, comments, favorites, pins, smart tags, check-ins, and Share Sheet imports. |
| Reflection, not gamification | Calendar review, weekly review, memories, search, topic areas, and Markdown help you revisit what mattered. |
| Bring your own AI | AI is optional and user-configured. Provider API keys stay in the iPhone Keychain and are excluded from iCloud sync and exports. |
| Open source | The public source is MIT licensed. GitHub releases are source-only; signed App Store builds are distributed by Apple. |
The screenshots use deterministic demo data and contain no private user content.
Download Ownlight on the App Store. The store build is free and contains no ads, subscription, or in-app purchase.
Requirements:
- macOS with Xcode 16 or later.
- iOS 17 or later.
- Node.js 22 or later.
- XcodeGen.
- Your own Apple Developer signing identity for device builds, App Groups, and CloudKit.
git clone https://github.com/Popcornnnnnnnn/ownlight.git
cd ownlight
npm install
npm run verify:ios:low-impactFor machine-specific signing, device, bundle identifier, App Group, and CloudKit overrides:
cp .env.local.example .env.localInstall and launch on a paired iPhone:
npm run ios:deviceNo pre-signed IPA is published. GitHub releases contain source code only so each developer keeps control of their own signing and CloudKit identity.
- On-device by default: moments, comments, tags, drafts, media, and generated artifacts live in the app's local archive first.
- Optional iCloud: enable
Settings > Data Storage > iCloud > iCloud Syncto sync through the private CloudKit database of the signed-in Apple Account. - Optional external AI: Ownlight sends the minimum required content only after the user configures a compatible provider and enables the relevant AI workflow.
- Local credentials: provider API keys stay in the iPhone Keychain. They are not included in iCloud sync, archive exports, or the legacy server workspace.
- Portable archive:
Storage & Exportcan create a local archive and restore it into an empty Ownlight library.
See Security And Privacy for the public security boundary and responsible disclosure path.
| Path | Purpose |
|---|---|
ios/PrivateMoments |
The SwiftUI iPhone/iPad app distributed as Ownlight. |
ios/PrivateMoments/CloudKit |
Optional private CloudKit cross-device sync. |
ios/ShareExtension |
Share Sheet capture into the main app composer. |
docs/ |
Product, architecture, operations, privacy, and release documentation. |
site/ |
Static Privacy Policy and Support pages. |
server/, admin/ |
Legacy compatibility and maintenance workspaces; not required for normal Ownlight use. |
Low-impact iOS verification avoids launching Simulator and limits Xcode build parallelism:
npm run verify:ios:low-impactRun Simulator only for visual UI review or screenshot work:
npm run ios:simulator:demo
npm run ios:simulator:cleanupThe demo fixture is opt-in and only runs with --private-moments-demo-data. It seeds deterministic local moments, tags, comments, AI-summary metadata, media placeholders, and check-ins. The normal app path never seeds demo data.
Legacy server and Admin workspace
The repository retains server/ and admin/ for historical compatibility, API reference, archive tooling, and maintenance experiments. They are not part of the ordinary iPhone-first product runtime and are not required for iCloud sync.
cp server/.env.example server/.env
npm run server:prisma:generate
npm run server:prisma:deploy
npm run admin:build
npm run server:build
npm run server:devThe legacy server defaults to http://127.0.0.1:3210; after the Admin build, the maintenance UI is available at http://127.0.0.1:3210/admin/. See the Operator Runbook for archive, restic, launchd, and recovery details.
- Product Requirements
- Technical Design
- Design Principles
- Operator Runbook
- Integration Guide
- Workflow
- Release Checklist
- Open Source Readiness
- Changelog
Issues and focused pull requests are welcome; start with CONTRIBUTING.md. Before publishing a source tag or App Store build, run:
npm run doctor:release
npm run doctor:app-store
npm run verify:ios:low-impact
git diff --checkOwnlight is available under the MIT License.





