Now that the work for Milestone 4, “Storage and Infrastructure (SqliteKvStore),” is complete, we need to prepare and submit a progress report to the Sovereign Tech Agency as stipulated in our service agreement. This report is a prerequisite for invoicing the fourth milestone payment.
The task is to create a document that summarizes the work done and provides evidence of completion. According to the reporting guidelines, this can be achieved by collating links to all relevant commits, pull requests, and other source code management actions. Once the report is finalized, it will be sent to our program manager.
Milestone scope
Milestone 4 was originally scoped to deliver SqliteKvStore, a SQLite-backed implementation of Fedify's KvStore interface. However, SqliteKvStore had already been implemented and shipped (in Fedify 1.8.1, released August 6, 2025) between the time the STF application was submitted and the time the service agreement was finalized. As a result, this milestone was technically complete before it formally began.
Rather than treat the milestone as a no-op, the scope was expanded to deliver a more complete SQLite story and to add MySQL/MariaDB support—two areas that meaningfully advance the same goal of broadening Fedify's storage backend options. The work actually delivered is:
SqliteKvStore (@fedify/sqlite) — the original contract deliverable; a cross-runtime SQLite KvStore implementation working on Node.js (v22+), Deno (v2.2+), and Bun, shipped in Fedify 1.8.1
SqliteMessageQueue (@fedify/sqlite) — a SQLite-backed MessageQueue for single-node deployments, completing the @fedify/sqlite package so it provides both storage primitives without requiring any additional infrastructure, shipped in Fedify 2.0.0
@fedify/mysql — a brand-new package providing both MysqlKvStore and MysqlMessageQueue for MySQL 8.0+ and MariaDB 10.6+, using the mysql2 driver and SELECT … FOR UPDATE SKIP LOCKED for safe concurrent dequeuing, shipped in Fedify 2.1.0
Deviations from contract language
The original contract names only SqliteKvStore as the deliverable. The actual scope was expanded for the reasons described above. The spirit of the milestone—expanding Fedify's storage backend support—is fully met and exceeded; @fedify/sqlite is now feature-complete, and @fedify/mysql adds support for one of the most widely deployed databases in production environments.
One implementation detail worth noting for MysqlMessageQueue: unlike PostgresMessageQueue, which benefits from PostgreSQL's LISTEN/NOTIFY for real-time message delivery, MySQL and MariaDB have no equivalent mechanism. The implementation therefore uses polling (SELECT … FOR UPDATE SKIP LOCKED) with a configurable poll interval defaulting to 1 second. The functional result is equivalent for the intended use cases.
Releases
The work for this milestone shipped across three releases:
- Fedify 1.8.1 (released August 6, 2025) — Discussion #354
@fedify/sqlite package with SqliteKvStore
- Fedify 2.0.0 (released February 22, 2026) — Discussion #580
SqliteMessageQueue added to @fedify/sqlite
- Fedify 2.1.0 (released March 24, 2026) — Discussion #642
@fedify/mysql package with MysqlKvStore and MysqlMessageQueue
Related issues and PRs
@fedify/sqlite
@fedify/mysql
All technical details, code changes, and completion evidence can be found in these linked resources.
Now that the work for Milestone 4, “Storage and Infrastructure (
SqliteKvStore),” is complete, we need to prepare and submit a progress report to the Sovereign Tech Agency as stipulated in our service agreement. This report is a prerequisite for invoicing the fourth milestone payment.The task is to create a document that summarizes the work done and provides evidence of completion. According to the reporting guidelines, this can be achieved by collating links to all relevant commits, pull requests, and other source code management actions. Once the report is finalized, it will be sent to our program manager.
Milestone scope
Milestone 4 was originally scoped to deliver
SqliteKvStore, a SQLite-backed implementation of Fedify'sKvStoreinterface. However,SqliteKvStorehad already been implemented and shipped (in Fedify 1.8.1, released August 6, 2025) between the time the STF application was submitted and the time the service agreement was finalized. As a result, this milestone was technically complete before it formally began.Rather than treat the milestone as a no-op, the scope was expanded to deliver a more complete SQLite story and to add MySQL/MariaDB support—two areas that meaningfully advance the same goal of broadening Fedify's storage backend options. The work actually delivered is:
SqliteKvStore(@fedify/sqlite) — the original contract deliverable; a cross-runtime SQLiteKvStoreimplementation working on Node.js (v22+), Deno (v2.2+), and Bun, shipped in Fedify 1.8.1SqliteMessageQueue(@fedify/sqlite) — a SQLite-backedMessageQueuefor single-node deployments, completing the@fedify/sqlitepackage so it provides both storage primitives without requiring any additional infrastructure, shipped in Fedify 2.0.0@fedify/mysql— a brand-new package providing bothMysqlKvStoreandMysqlMessageQueuefor MySQL 8.0+ and MariaDB 10.6+, using themysql2driver andSELECT … FOR UPDATE SKIP LOCKEDfor safe concurrent dequeuing, shipped in Fedify 2.1.0Deviations from contract language
The original contract names only
SqliteKvStoreas the deliverable. The actual scope was expanded for the reasons described above. The spirit of the milestone—expanding Fedify's storage backend support—is fully met and exceeded;@fedify/sqliteis now feature-complete, and@fedify/mysqladds support for one of the most widely deployed databases in production environments.One implementation detail worth noting for
MysqlMessageQueue: unlikePostgresMessageQueue, which benefits from PostgreSQL'sLISTEN/NOTIFYfor real-time message delivery, MySQL and MariaDB have no equivalent mechanism. The implementation therefore uses polling (SELECT … FOR UPDATE SKIP LOCKED) with a configurable poll interval defaulting to 1 second. The functional result is equivalent for the intended use cases.Releases
The work for this milestone shipped across three releases:
@fedify/sqlitepackage withSqliteKvStoreSqliteMessageQueueadded to@fedify/sqlite@fedify/mysqlpackage withMysqlKvStoreandMysqlMessageQueueRelated issues and PRs
@fedify/sqliteKvStoreimplementation #274: Implement SQLite-basedKvStoreimplementationSqliteKvStoreSqliteMessageQueuefor single-node deployments #477:SqliteMessageQueuefor single-node deploymentsSqliteMessageQueueand related tests@fedify/mysql@fedify/mysql) #587: Add MySQL/MariaDB support (@fedify/mysql)KvStorefor MySQL/MariaDB (@fedify/mysql) #585: ImplementKvStorefor MySQL/MariaDB (@fedify/mysql)@fedify/mysqlpackage withMysqlKvStore#597: Add@fedify/mysqlpackage withMysqlKvStoreMessageQueuefor MySQL/MariaDB (@fedify/mysql) #586: ImplementMessageQueuefor MySQL/MariaDB (@fedify/mysql)MysqlMessageQueueto@fedify/mysql#599: AddMysqlMessageQueueto@fedify/mysqlAll technical details, code changes, and completion evidence can be found in these linked resources.