Skip to content
JustZappItPublic

About

Zapp: a Zcash wallet with end-to-end encrypted P2P messaging. Fork of zodl-inc/zodl-ios.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2,484 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Zapp for iOS

justzappit.xyz

Zapp is a privacy-first Zcash wallet with an end-to-end encrypted peer-to-peer messenger built into it. Shielded ZEC for the money, Hyperswarm for the messages, and a peer-to-peer offramp for spending in local currency. No account, no custody, no tracking.

Zapp for iOS is a fork of Zodl, itself a fork of Electric Coin Company's Zashi. The fork diverged at upstream commit 0d3b93ad and carries its own line of development on top of it.

The Android counterpart lives at JustZappIt/zapp-android.

What is different from upstream

  • Encrypted P2P chat. Direct and group messaging over Hyperswarm, with identities derived from the wallet seed. No Zapp server can read your messages: a project-run blind peer stores encrypted blocks so they reach a recipient who was offline, and it cannot decrypt them.
  • A peer-to-peer offramp. Pay a merchant in local currency out of shielded ZEC, through the p2p.me contracts on Base.
  • A unified send-and-swap screen. One screen sends ZEC or swaps it for another asset through NEAR intents, with the recipient prefilled wherever Zapp already knows it.
  • A different shell and visual system. Zapp's tabbed shell (ZappTabsView, ZappPayView) and a Swiss-minimalist token set, layered on top of upstream's design system rather than replacing it.

Everything else is deliberately kept in lockstep with upstream: target names, scheme names, the secant / zodl file and module naming, and the build-flag prefixes all stay as zodl-ios has them so that future upstream merges stay cheap. That is why the Xcode project is still secant.xcodeproj and the build flags are still SECANT_MAINNET / SECANT_TESTNET.

Features

  • Shielded-by-default Zcash send and receive, with unified, transparent and shielded addresses
  • Ironwood (NU6.3) support, including a guided migration that moves Orchard funds into the new shielded pool in standard-sized pieces over time
  • Transaction history, filters, notes and tax export
  • Address book, with the same records backing chat contacts
  • Encrypted chat: DMs, groups, media, read receipts, payment requests
  • Keystone hardware-wallet signing over animated QR
  • Swaps to and from shielded ZEC through NEAR intents
  • Tor routing for exchange-rate lookups, transaction submission and integrations, with a settings toggle to turn it off
  • English and Spanish

Building

Checkout layout

secant.xcodeproj references two local Swift packages by relative path, so both must be checked out beside this repository. Both are public:

<some-dir>/
  ios-zapp/                 <-- this repository
  zappMessaging/            <-- JustZappIt/zappmessaging-sdk, cloned under this name
  zcash-swift-wallet-sdk/   <-- JustZappIt/zcash-swift-wallet-sdk, branch zapp/sdk-mit-on-main

Scripts/bootstrap-zappmessaging.sh clones the messaging SDK to the right place at the commit pinned in .zapp-deps and generates its build artifacts. The directory is named zappMessaging because that is the path the Xcode project references.

Scripts/bootstrap-zcash-sdk.sh does the same for the wallet SDK, then compiles its Rust FFI (libzcashlc.xcframework — a few minutes from cold). The pin lives on our fork's zapp/sdk-mit-on-main branch rather than upstream: upstream's default build links the AGPL-3.0-only zodl-slipstream crate, which we may not ship, so zcash/zcash-swift-wallet-sdk cannot resolve the pinned SHA. Override the source with ZAPP_SDK_REMOTE / ZAPP_SDK_BRANCH.

Prerequisites

SwiftGen and SwiftLint run automatically as Xcode build phases. On Apple Silicon, if you installed either via Homebrew, symlink it so the build phase can find it:

ln -s /opt/homebrew/bin/swiftgen /usr/local/bin
ln -s /opt/homebrew/bin/swiftlint /usr/local/bin

First build

Scripts/bootstrap-zappmessaging.sh   # clones/pins the sibling and generates its artifacts
Scripts/bootstrap-zcash-sdk.sh       # clones/pins the wallet SDK and builds its Rust FFI
open secant.xcodeproj

Re-run bootstrap-zappmessaging.sh whenever you pull JS changes in zappMessaging — the build otherwise links a stale worklet.bundle with no warning at all.

Schemes

Scheme Network Notes
zodl-internal mainnet (ZEC) internal/development build; also runs the zodlTests target
zodl-testnet testnet (TAZ)
zodl-AppStore mainnet (ZEC) production / App Store build

Partner keys

Integrations read their keys from secant/Resources/PartnerKeys.plist, which is gitignored and never committed. Archive builds fail without it — see Scripts/validate-partner-keys.sh for the required keys. Normal debug builds run fine without the file; the affected integrations are simply inert.

Vendored binary

Vendor/ZappOfframp.xcframework is a compiled artifact, not third-party closed source. It is the Kotlin Multiplatform offramp-lib module built for the iosMain target; its source is public in zapp-android.

Testing

Run the zodlTests target via the zodl-internal scheme. All tests use Swift Testing with TCA's TestStore.

Contributing

Please read the Contributing Guidelines and Code of Conduct. AGENTS.md documents the architecture, conventions and invariants that reviews enforce — read it before your first change. Further documentation is in docs/.

Security

Please do not open a public issue for security vulnerabilities. See SECURITY.md for how to report one.

Links

License

MIT, with Zapp-original contributions additionally available under Apache 2.0. See LICENSE and NOTICE.

About

Zapp: a Zcash wallet with end-to-end encrypted P2P messaging. Fork of zodl-inc/zodl-ios.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages