Back
Dec 19, 2023
Building EDAMAME Security: Our Journey with Flutter and Rust
Frank Lyonnet
In our quest to create something impactful in the world of tech, we embarked on an ambitious project: EDAMAME Security, a multiplatform security app combining Flutter and Rust. Our team, with diverse experiences and perspectives, is thrilled to share our journey and the lessons learned along the way.
What is EDAMAME Security?
EDAMAME Security is our answer to the growing need for comprehensive digital protection. Here's what it encompasses:
Security Benchmarks: It uses standards like CIS Benchmarks but also includes the personal side of the security posture analysis.
Digital Identity Management: Integration with HaveIBeenPwned.com for online identity management.
Network Scanning for Everyone: Inspired by 'nmap', we've made network scanning accessible to all.
Privacy-First Management Agent: It can hookup to our "no MDM" platform (see https://www.edamame.tech) to deal with any devices including personal or contractor devices, ensuring privacy and confidentiality.
Broad Platform Support: Available on macOS, Windows, iOS, and soon on Linux, Android, and Chromebook.
Our Experience with Flutter
Flutter was our choice for its flexibility and creative freedom. Here's a glimpse into our experience:
Starting from Scratch: We embraced a top-down approach, allowing even the wildest ideas like a network scanning 'radar'.
Component Challenges: Some components, such as Bitsdojo Window, required extra attention due to insufficient maintenance.
Learning Curve: We found it quite reasonable, contrary to some expectations.
Multiplatform Development: Surprisingly smooth, debunking myths about its complexity.
AI Assistance: A helpful tool that generally worked well for us. Acually the radar was built with the help of an early version of GPT-4…
Rust: The Powerhouse
Rust brought us the performance and security we needed, though it came with its challenges:
Performance and Security: These were non-negotiable for us, and Rust delivered.
Philosophy and Culture: We embraced Rust's ethos, often humorously referring to it as the "true language of love."
Learning Curve: Admittedly tough, particularly with concepts like borrowing and Futures.
Futures' Complexity: This presented some cryptic errors, requiring us to delve deep into problem-solving.
The Flutter Rust Bridge Experience
Using the Flutter Rust Bridge was a mixed experience:
Automating FFI: A great idea, but not without its bugs.
Challenging Bugs and Workarounds: We spent days, sometimes weeks, resolving issues like the multi-API file bug.
Regressions and Errors: New updates sometimes brought new headaches.
Time Investment: Debugging and finding solutions ate up a significant chunk of our time.
Flutter => Rust => Native (Swift, Java…): Let's Get Crazy
We didn't stopped there with mixing languages. We needed native system calls not supported in Rust and that couldn't be performed in Flutter.
macOS/iOS: some crates like swift-rs are providing a functional bridge between Rust and Swift, but again this is bleeding edge
Android: again this is not a standard use case and we had to scratch our head
Overall maintenance is challenging for this part of the code
App Stores … It Works!
We managed to build executables for all the store without any problems.
Apple: don't forget to enable JIT exception if you use the hardened runtime entitlement!
Microsoft: having notifications working can be challenging
Conclusion
In retrospect, combining Flutter and Rust was a dream come true in many respects. We enjoyed the process, despite the occasional frustrations with the Flutter Rust bridge. Though we couldn't contribute as much as we would have liked to the bridge project, we appreciate the team behind it.
Moving forward, we're eyeing the new v2 version of the bridge.
In summary, our venture into building EDAMAME Security has been a testament to the reality of multiplatform app development - challenging, enlightening, and ultimately rewarding. It's a journey we're proud of and eager to continue.
Want to try ? Look here: https://github.com/edamametechnologies/
Frank Lyonnet
Share this post