{"id":21384665,"url":"https://github.com/p2panda/meli","last_synced_at":"2025-07-13T14:31:41.835Z","repository":{"id":179094564,"uuid":"662654183","full_name":"p2panda/meli","owner":"p2panda","description":"Meli Android app built with p2panda for decentralised and offline-first collaboration","archived":false,"fork":false,"pushed_at":"2024-05-19T08:54:44.000Z","size":1606,"stargazers_count":11,"open_issues_count":29,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-19T14:22:15.167Z","etag":null,"topics":["android","dart","ffi-bindings","flutter"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/p2panda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-05T15:36:56.000Z","updated_at":"2024-05-20T15:25:56.602Z","dependencies_parsed_at":"2023-09-27T14:30:08.654Z","dependency_job_id":"f07ab376-f379-4435-be77-2534228c5c47","html_url":"https://github.com/p2panda/meli","commit_stats":null,"previous_names":["p2panda/meli"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/p2panda/meli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2panda%2Fmeli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2panda%2Fmeli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2panda%2Fmeli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2panda%2Fmeli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/p2panda","download_url":"https://codeload.github.com/p2panda/meli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2panda%2Fmeli/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265155716,"owners_count":23719567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","dart","ffi-bindings","flutter"],"created_at":"2024-11-22T11:42:29.476Z","updated_at":"2025-07-13T14:31:36.815Z","avatar_url":"https://github.com/p2panda.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003emeli 🐝\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cstrong\u003eMeli Android app built on top of p2panda\u003c/strong\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e\n    \u003ca href=\"https://p2panda.org/about/contribute\"\u003e\n      Contribute\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://p2panda.org\"\u003e\n      Website\n    \u003c/a\u003e\n  \u003c/h3\u003e\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\nThis Android app is a collaborative database for sighting and categorisation of\n[Meliponini](https://en.wikipedia.org/wiki/Stingless_bee) bee species in the\nBrazilian Amazon. This project is a collaboration between\n[p2panda](https://p2panda.org/) and [Meli](https://www.meli-bees.org/). The app\nruns a full p2panda node and allows decentralised and offline-first\ncollaboration among users, it is developed with Flutter and uses the p2panda\nSDK for its p2p functionalities.\n\n## Development\n\nThis is a [Melos](https://melos.invertase.dev) mono-repository managing both\nthe Android application source-code and \"external\" Dart and Flutter libraries\nproviding all p2panda functionality via FFI bindings.\n\n### Requirements\n\n\u003e Listed versions are the ones we used successfully in our developer\n\u003e environments, other versions might work well too.\n\n\u003e ⚠️ The _exact_ NDK version _is required_.\n\n* [Rust](https://www.rust-lang.org/tools/install) `1.75.0`\n* [Java](https://dev.java/) `17`\n* [Android SDK](https://developer.android.com/tools) `34.0.0`\n* [Android NDK](https://developer.android.com/ndk/) `25.2.9519653`\n* [Flutter SDK](https://docs.flutter.dev/get-started/install) `3.22.0` and Dart SDK `3.4.0`\n* [Melos](https://melos.invertase.dev/getting-started)\n\n### Setup\n\n```bash\n# Install all Dart dependencies, make sure you've installed melos globally\ndart pub get\n\n# Bootstrap your Melos environment\nmelos bs\n```\n\n### Code-Checks\n\n```bash\n# Check code style and correctness\nmelos analyze\n\n# Format code according to guidelines\nmelos format\n```\n\n### Release\n\nTo configure the release to connect to a relay node you will need to set\n`RELAY_ADDRESS`, without it the app will only discover other peers via mDNS on\na local network.\n\nOptionally you can also set a Pre-Shared Secret via `PSK` to connect to a\nnetwork protected by a shared secret.\n\nLastly you might want to distinct between `normal` and `qa` release flavors to\ndistinct \"staging\" releases from \"production\" ones.\n\n```bash\n# Build and obfuscate releases for all architectures\nPSK=\"\u003csecret\u003e\" FLAVOR=normal RELAY_ADDRESS=203.0.113.0:2022 melos release\n```\n\n### FFI packages\n\nTo bring [`p2panda-rs`] and [`aquadoggo`] into a native Android environment\nwe're utilising [`flutter_rust_bridge`] which automatically generates Dart code\nwith FFI bindings from Rust.\n\nThe code resides in:\n\n* [`packages/p2panda/native`](packages/p2panda/native): Rust API used in the Android application\n* [`packages/p2panda`](packages/p2panda): p2panda Dart package\n* [`packages/p2panda_flutter`](packages/p2panda_flutter): p2panda Flutter package\n\nUse the following commands for FFI package development:\n\n```bash\n# After changing the Rust code in `packages/p2panda/native` re-build the\n# library. This automatically installs Android compilation targets and the\n# cargo-ndk tool if missing.\n#\n# Additionally this script moves the native android libraries into the `app`\n# folder, where they are needed.\nmelos build\n\n# Bump the package versions for release (we're not releasing yet).\nmelos version\n```\n\n### Flutter App\n\nIt is recommended to develop or run the project with [Android\nStudio](https://developer.android.com/studio) or with the [`flutter-cli`]\ncommand line tool.\n\n* [`packages/app`](packages/app): Android application built with Flutter\n\nHere are some examples on how to run the app using the Flutter command line tool:\n\n\u003e ⚠️ Setting a \"Flavor\" _is required_ to build and run the .apk, either as a\n\u003e flutter command line argument or as a build configuration in Android Studio\n\u003e (Edit Configurations \u003e Build Flavor).\n\n```bash\n# Manage emulators\nflutter emulators\n\n# Launch an emulator\nflutter emulators --launch \u003cid\u003e\n\n# List all device ids (emulated or physical)\nflutter devices\n\n# Run app on emulated or connected device\nflutter run --flavor normal --device-id \u003cid\u003e\n```\n\n### Relay Node\n\nTo configure your app to connect to a relay node you will need to set\n`RELAY_ADDRESS` with the correct ipv4 address and port number via an\nenvironment variable or the command line like so.\n\n```bash\nflutter run --dart-define=RELAY_ADDRESS=203.0.113.0:2022\n```\n\n### Schema\n\nThe p2panda schemas and migrations are managed in the `schemas` folder with the\n[`fishy`] command line tool.\n\n* [`schemas`](schemas): Meli Schemas\n\n## License\n\nGNU Affero General Public License v3.0 [`AGPL-3.0-or-later`](LICENSE)\n\n## Supported by\n\n\u003cimg src=\"https://raw.githubusercontent.com/p2panda/.github/main/assets/ngi-logo.png\" width=\"auto\" height=\"80px\"\u003e\u003cbr /\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/p2panda/.github/main/assets/nlnet-logo.svg\" width=\"auto\" height=\"80px\"\u003e\u003cbr /\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/p2panda/.github/main/assets/eu-flag-logo.png\" width=\"auto\" height=\"80px\"\u003e\n\n*This project has received funding from the European Union’s Horizon 2020\nresearch and innovation programme within the framework of the NGI-POINTER\nProject funded under grant agreement No 871528*\n\n[`aquadoggo`]: https://github.com/p2panda/aquadoggo\n\n[`fishy`]: https://github.com/p2panda/fishy\n\n[`flutter-cli`]: https://docs.flutter.dev/reference/flutter-cli\n\n[`flutter_rust_bridge`]: https://github.com/fzyzcjy/flutter_rust_bridge\n\n[`p2panda-rs`]: https://github.com/p2panda/p2panda\n\n[`p2panda`]: https://p2panda.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp2panda%2Fmeli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fp2panda%2Fmeli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp2panda%2Fmeli/lists"}