Native SwiftUI client for Vernissage, a federated, community-driven photo-sharing platform connected to the fediverse through ActivityPub.
Vernissage is built for people who want a photo-first experience: no mixed-media feed, no ads, and no recommendation algorithm deciding what should be seen first. This app focuses on browsing, publishing, and managing photography on Vernissage servers from a native iPhone experience.
- Native iOS app built entirely with SwiftUI
- OAuth sign-in against supported Vernissage servers
- Sign up flow for servers that allow registration
- Photo-first timelines: private, featured, trending, local, and global
- Search across users, hashtags, statuses, and direct profile/status URLs
- Post composer with attachments, metadata, visibility, and content warnings
- Notifications, profile management, account switching, and share extension support
- Create an account: vernissage.photos or in other instance
- Server directory: joinvernissage.org/servers.html
- Project website: joinvernissage.org
- Documentation: docs.joinvernissage.org
- API server: VernissageServer
- Web client: VernissageWeb
- macOS
- Xcode with iOS 26 SDK support
- iOS 26 simulator or a physical iPhone
- Optional: access to a local or remote Vernissage server
- Clone the repository.
- Open
VernissageMobile.xcodeprojin Xcode. - Select the
VernissageMobilescheme. - Choose an iOS simulator or connected device.
- Build and run.
If you want to run the app on a physical device or use your own Apple team configuration:
- set your own Development Team in Xcode,
- update bundle identifiers if your signing setup requires unique IDs,
- keep the share extension target aligned with the main app target.
When the app launches, provide the base URL of your home Vernissage server.
Typical examples:
https://vernissage.photoshttp://localhost:4200https://your-server.example
The iOS client is intended for Vernissage servers. If you are developing locally, a local Vernissage backend is enough to start working on authentication, timelines, search, and publishing flows.
The project follows a feature-oriented SwiftUI structure:
VernissageMobile/Sources/App- app entry point, root flow, tabsVernissageMobile/Sources/Core- models, networking, persistent account state, utilitiesVernissageMobile/Sources/Features- screens, sheets, view models, feature-specific support codeVernissageMobile/Sources/Shared- shared extensions, UI helpers, reusable utilitiesVernissageShareExtension- iOS share extensionResources- README screenshots and repository assets
- The app uses modern SwiftUI, Observation, and Swift Concurrency.
- Networking is grouped by backend domain under
Core/Networking. - The app supports multiple accounts stored locally and refreshed through OAuth.
- Related product and protocol details live in the server and documentation repositories linked above.
Contributions are welcome.
- Fork and clone the repository.
- Keep changes focused and consistent with the existing project structure.
- Verify the app builds before opening a pull request.
- Open a pull request with a clear description of the change.
If you need device builds, remember to update signing for both the main app and the share extension.
This project is licensed under the Apache License 2.0.



