Time Spent
Zapstore is composed by many projects, from clients to servers to libraries.
The overall goal for this quarter was wrapping up the core libraries and pushing out a revamped Zapstore CLI.
Noteworthy changes for each below.
Libraries
purplebase/models
I created this powerful library to build nostr apps in Dart, with pluggable implementations, from scratch. The main idea behind it is to power different UI systems (GUIs, TUIs) without coupling them to the actual implementation.
This is the cornerstone of all Zapstore projects interaction with nostr.
It features a relatively small API surface, ideal for both humans and AIs. It is offline-first. Instead of NIP-jargon, uses type-safe classes with domain language to interact with nostr, with many common nostr event kinds available (or bring your own). As well as relationships, which are really the secret sauce for deep integration without too much API pollution. (Case in point, see zaplab)
Repository and README: purplebase/models
Changelog: CHANGELOG (0.1.x releases for this period)
purplebase/purplebase
Since models by default has a dummy implementation (great for prototyping), purplebase offers a real implementation, featuring a SQLite-backed storage and a websocket pool.
Also created from scratch during this period. This is the actual implementation used in the new Zapstore app, and Zapstore CLI.
Repository: purplebase/purplebase
purplebase/nip07_signer
The models package also exposes a Signer interface, this implementation (mostly used in Zapstore CLI, but can also run standalone) offers opening a browser window to sign app and release events via NIP-07.
Repository: purplebase/nip07_signer
purplebase/amber_signer
This Signer implementation uses a NIP-55 Dart library and connects to the Amber app in Android.
Repository: purplebase/amber_signer
Servers
zapstore/relay
In order to phase out the limited relay implementation currently running at relay.zapstore.dev (repo: github.com/zapstore/ftsrelay), developed a relay implementation from scratch in Go, based on the rely framework. Including Zapstore specific features such as whitelisting, support for communities (upcoming), etc.
Repository: zapstore/relay
zapstore/blossomd
A Dart implementation of a Blossom server following the Blossom specification for storing and serving blobs with nostr authentication. Includes a whitelisting mechanism.
Migration has been performed, all assets now served from this new server.
Repository: zapstore/blossomd
zapstore/indexer
Based on the latest Zapstore CLI, indexer holds a number of YAML snippets that specify how to crawl/fetch/index different applications from around the web, with the goal of providing updates.
Work here has been around updating to the new YAML format, and adding more apps requested by users.
Repository: zapstore/indexer
Clients
zapstore/zapstore
No significant changes in this period.
zapstore/zapstore-cli
This is the CLI tool developers use to sign and publish releases to the Zapstore relay.
Complete rewrite to make it more developer friendly, in particular this means:
-
Remove dependencies on external tooling, which frustrated many - so an APK parsing library was built from scratch in pure Dart
-
More signing options including nsec, NIP-07 browser signing, NIP-46 bunkers, output unsigned (see the amber_signer and nip07_signer libraries
-
Improved YAML format for app parsing specification
Natively support Github, Gitlab, F-Droid.
On the package manager side of it, added the ability to zap.
Repository: zapstore/zapstore-cli
Details here: CHANGELOG (for this period, look at 0.2.0 releases)
zapstore/website
No significant changes in this period.
Plans for Next Quarter
Migrations
-
Migrate old relay (zapstore/ftsrelay) running on
relay.zapstore.devto the new implementation -
Separate indexed releases from dev-signed releases by introducing
bridge.zapstore.dev -
Migrate indexer from a cron-based call to the CLI, to a full-fledged Dart program with fine tuning, to prepare for the indexing of thousands of new apps, as well as user suggestions
UI
- New Zapstore app stable release, including relay (and Blossom server, DVM) selection in the UIs (this depends on the migration described above). Many new social features and fixes requested by users for a long time, unattended updates, and more.
Other
- Streamlining internal processes, even easier tools for developers to publish, marketing and support efforts