Thanks for your proposal to The Sia Foundation Grants Program.
After review, the committee has decided to approve your proposal. Congratulations! They’re excited to see what you can accomplish with this grant.
We’ll reach out to your provided email address for onboarding. This shouldn’t take long unless your info has changed from last time, but you may still need to adjust your timelines.
Thank you! I’m delighted that the committee has approved the proposal. Looking forward to contributing the technical and performance enhancements directly to the core s5.js library.
Here’s to making S5 even more accessible for developers!
• Completed comprehensive architectural design for Enhanced s5.js, documenting path-based APIs, DAG-CBOR serialisation, and HAMT sharding implementation
• Consulted with Redsolver (s5 author) who provided valuable architectural guidance and reviewed the initial design approach
• Established repository structure with CI/CD pipeline configuration and development toolchain
• Created detailed DirV1 type definitions that match the Rust S5 v1 implementation, ensuring cross-implementation compatibility
• Designed deterministic CBOR encoding configuration to guarantee consistent content addressing across platforms
• Developed comprehensive media processing architecture with WASM foundation and browser compatibility layers
List repos worked on this month with links to PRs and relevant commits.
• Implement DirV1 serialisation/deserialisation with DAG-CBOR, including proper integer key mappings matching Rust’s #[n(X)] attributes
• Develop basic path-based get/put operations for single-level directories with automatic directory creation
• Create comprehensive unit tests for deterministic CBOR encoding to ensure consistent hashing
• Begin integration with existing S5 API infrastructure for the new v1 specification
My name is John and I’m an engineer for the Sia Foundation. I’m reviewing this month’s progress and had a couple of questions. In your updated grant plan (Standard Grant: S5 Gateway & TypeScript Client - #15 by juleslai), your first milestone is as follows:
Project set-up & design Repos, branching strategy, FS5 test fixtures; code-contribution guidelines & project board; tool-chain investigation; one-off business overhead
I’ve read through Part I of your Revised Code Design and skimmed the second part (will read this more thoroughly as we get around that fourth month). I recognize that this is significant work towards the grant. You’ve provided starting code/design for many of the most important pieces of it. It is thoughtful work and a great way to start any project, imo.
With that said, though, how much of the above milestone items did we accomplish? I want to be clear that my and any other Sia reviewers’ primary task here is to check for those things you stated you would accomplish after the month you stated you would accomplish them. We look for tight alignment between the report you submit to us and the milestone items you’ve scheduled to be done at this time.
Is there a repo that’s not in your report that I need to see? I’ve looked through your github account’s repos but could have missed it. Is it perhaps private? Put another way: in what repo did you accomplish “Established repository structure with CI/CD pipeline configuration and development toolchain” ? That may get us on the same page here. I don’t think you’re referring to this linked design repo, right?
Thank you for reviewing my progress report. I’ll clarify what was accomplished and the current approach:
The milestone called for “project set-up & design” and that’s exactly what was delivered in detail:
Repository Structure & Approach: After consulting with Redsolver and the community, we determined that direct contributions to the existing s5.js repository will be more effective than creating separate wrapper repositories. This represents better technical alignment with the S5 ecosystem.
Toolchain & Development Approach: Established TypeScript development environment with TDD methodology. For the WASM components (months 4-5), I’ll create a separate Rust repository with appropriate CI/CD for WASM compilation.
Code Contribution Guidelines: Working directly with Redsolver to ensure contributions align with s5.js project standards and S5 v1 specification compliance.
Current Month’s Focus:
Month 2 will deliver the first working code: DirV1 serialisation/deserialisation and basic path-based operations, as outlined in my technical design.
The design work completed last month was to ensure the implementation will be architecturally sound and compatible with the broader S5 ecosystem.
Repository Links:
Implementation work will be submitted as pull requests to s5-dev/s5.js. The Rust WASM components will have their own repository when we reach months 4-5.
Hi @juleslai, as the new Grants Program manager, jumping in:
Please be sure to elaborate on the milestone shifting and why additional milestones were completed in your progress report for this month. Note that in future any and all milestone changes need to be discussed over email with the Foundation team to ensure everyone is on the same page regarding grant progress and tracking.
Additionally, a reminder that your progress report is due September 2. We look forward to receiving yours then.
Hi,
Welcome to the role.
Excellent news that not only milestones 1-3 are done as scheduled, so have milestones 6 & 7 been completed! All verifiable by running the tests on s5.js/README.md at main · julesl23/s5.js · GitHub
The schedule advanced because I worked hard as hell.
Hello @juleslai - thanks for the welcome. Please follow the template for Monthly Grant reports found here. After this is posted, our team will be able to conduct their technical review. Note: today is the deadline for this report in its proper format.
What progress was made on your grant this month? Summarize your progress into a few sentences or bullet points.
Fixed API documentation and update README
Real uses of Enhanced S5.js integrated into Fabstir Vector database and in Fabstir LLM Marketplace
Added more tests.
Added production Docker setup
Implement S5 standard protocol endpoints
Schedule Update: The thorough planning and design work completed in Milestone 1, combined with additional hours invested in Milestone 2 help prepare the way for early completion of milestones 6 & 7. This strong architectural groundwork allowed the directory utilities and sharding features to be implemented ahead of schedule :)
Here’s the restructured schedule table with revised targets:
Month
Target Date
Status
Milestone & Deliverables
1
7/2/25
Complete
Project set-up & design Repos, branching strategy, FS5 test fixtures; code-contribution guidelines & project board; tool-chain investigation; one-off business overhead
2
8/2/25
Complete
Path helpers v0.1 — basic get/put for single-level directories, unit tests
3
9/2/25
Complete
Path-cascade optimisation — multi-level update with single registrySet; docs & examples
node test/integration/test-hamt-activation-real.js # HAMT activation threshold test
node test/integration/test-hamt-real-minimal.js # Minimal real portal test
Test Results: 284/284 passing (100%) | Browser: 20/20 (100%) | Node.js: 17/20 (3 tests skip due to Node.js lacking Web Workers and full Canvas API - not bugs)
Report Submitted: October 1, 2025 Status: ON TRACK (Ahead of Schedule)
Thank you for the technical review feedback. Both issues have been resolved:
(1) I had global TypeScript installation that masked the missing dependency. The TypeScript ‘Uint8Array’ is not assignable to type ‘BlobPart’ error has been fixed - pull the latest code, run npm install && npm run build and all TypeScript errors should be gone with 284/284 tests passing.
(2) For running demos locally on Windows, use npx http-server -p 8080 then open localhost:8080/demos/media/browser-tests.html - all 20/20 tests should pass in the browser (100%). The same tests run in Node.js with node demos/media/*.js show 17/17 passing excluding 3 tests that can only run in browser environment due to Node.js Canvas API limitations (see README “Platform-Specific Notes”).
In the Image Metadata Extraction Demo, all dimensions display as 0×0. This may indicate an issue (e.g., corrupted fixtures) that will need to be addressed.
Modular exports for code-splitting: s5, s5/core, s5/media, s5/advanced
Additional Work (Beyond Milestone 5 Scope):
Added convenience utilities for power users needing direct CID access: s5/advanced export with pathToCID(), cidToPath(), getByCID(), putByCID() methods and CID formatting utilities
Improvements:
Fixed 0×0 dimensions issue in Image Metadata Extraction Demo (addressed Milestone 4 reviewer feedback - test polyfill issue, not core implementation - all 6/6 test images now show correct dimensions - commits bf354b3, 8ba765a)
Documentation:
docs/MILESTONE5_EVIDENCE.md - Comprehensive evidence package with detailed proof of all requirements
docs/MILESTONE5_TESTING_GUIDE.md - Step-by-step validation guide for reviewers
test/browser/progressive-rendering-demo.html - Visual browser demo with 3 rendering strategies