You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+37-4Lines changed: 37 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,13 +2,33 @@
2
2
3
3
## What is it?
4
4
5
-
camelus is a nostr client written in flutter, it is in heavy development, feel free to test it but expect some issues and missing features.
5
+
camelus is a nostr microblogging client written in flutter, it is in heavy development. Feel free to test it, but expect some issues and missing features.
6
+
The targeted platforms are mobile clients. Camelus uses dart_ndk as its core lib.
7
+
Dart_ndk is maintained by camelus and yana, combining efforts to offer a usable nostr lib accounting for mobile constraints (battery, data). The lib also does the heavy lifting with inbox/outbox (gossip) and database optimizations.
6
8
7
-
## What is the current mission?
8
9
9
-
I want to transform camelus into a simple but usable client. If you are looking for fancy features, please look elsewhere.
10
+
## architecture
11
+
The project uses clean architecture; if you are new to this, look in `domain_layer/usecases` and `domain_layer/entities`. Entities represent data and use cases, the core business logic of camelus.
10
12
11
-
## how can I test it?
13
+
dart_ndk is therefore included as an external lib.
14
+
Because camelus and dart_ndk entities are very similar (e.g., `nostr_note`), the conversion is trivial and might raise the question, why not rely on dart_ndk entities? Right now, abstraction is not really needed, and there is a performance penalty. Still, it also offers a clear boundary to dart_ndk and allows us to deviate and experiment on camelus and dart_ndk in the future. In my opinion, this flexibility is more valuable if performance is good enough.
15
+
16
+
17
+
To initialize the code, I use riverpod provider. Combined with clean architecture, it allows me to play Lego and manage dependencies in a central location, and expose it to the presentation_layer. A good example of this is `ndk_provider.dart`.
18
+
I use the riverpod provider very similar to singeltons, but the riverpod provider provides a better way to test code.
19
+
20
+
21
+
## state of the project
22
+
23
+
Right now, camelus is unusable/experimental state. We are right in the process of integrating dart_ndk into camelus, on the way cleaning up obsolete code and refactoring widgets. The goal is to have a reliable codebase that makes it easy for other developers (you?) to contribute to the project.
24
+
25
+
## Development
26
+
27
+
To get started, link dart_ndk in `pubspec.yaml` like this:
28
+
```
29
+
dart_ndk:
30
+
path: ../dart_ndk
31
+
```
12
32
13
33
### Android
14
34
@@ -21,3 +41,16 @@ or use the [apk](https://camelus.app/), it is signed with my key so you will nee
21
41
I don't have an iOS device so I can't test it, if you have an iOS device and want to test it, you can build it yourself, I will be happy to help you.
22
42
23
43
Otherwise wait for testflight to be available.
44
+
45
+
46
+
# How to build
47
+
48
+
1. make sure flutter is installed
49
+
50
+
2. clone the repo
51
+
52
+
3. clone [dart_ndk](https://github.com/relaystr/dart_ndk) and depending on your folder structure edit pubspec.yaml to point to the correct path
53
+
54
+
4. run `flutter pub get`
55
+
56
+
5. run `flutter build apk --release` or `flutter run` to run directly on your device in debug mode
0 commit comments