Back

Blog

Blog

Engineering

Engineering

Dec 19, 2023

Building EDAMAME Security: Our Journey with Flutter and Rust

Frank Lyonnet

Introduction

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