Giter VIP home page Giter VIP logo

nozzle's Introduction

Nozzle

Nozzle is a lightweight nostr client for Android.

This project is no longer maintained. Check out Voyage instead

Installation

Install it via Obtainium or go to the release page and download the latest apk file.

I don't plan to publish this app in the Google Play Store.

Some points of difference

  • Outbox model: Nozzle discovers relays through nip-65 events, reply relay hints and encoded relays in nprofiles/nevents. It fetches data only from relays expected to contain the desired information.
  • Relay transparency: Nozzle will show you in which relays each note has been seen on and which reply relay hint has been set for each reply. Additionally, users can see and limit the relays to which they wish to send a post or reply.
  • Mobile data friendly: Profile pictures are not rendered, pictures are only loaded when the user decides to, reactions of other people will not be fetched and the number of relay connections to fetch the feed is minimized.
  • Trust indicator: Each profile has a colored badge in the top-right of their identicon which indicates their trust level.
    • Green check: You follow this profile (trust him).
    • Orange check: You don't follow this profile, but at least one of the people you follow (friend) does. The green background section expands proportionally based on the percentage of your friends following this profile. If 90.9% or more of your friends follow this person, the background will be fully green.
    • Grey question mark: You don't follow this profile and neither do any of your friends. Replies from these profiles appear at the end of a thread.
  • Small apk size of less than 9MB

Supported (and partially supported) nips

Other

Screenshots

Contributing

Contributors are very welcome.

License

MIT licence

nozzle's People

Contributors

dluvian avatar jindalpratik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

nozzle's Issues

[BUG] keyboard will not return

On the search page if you dismiss the keyboard the cursor continues to blink in the search field, but you cannot get the keyboard back without leaving the search page completely

screen-20240209-023047.mp4

possible incorrect follower counts?

Nozzle tells me i have 4 followers, but during a test of another client it said i have 10 followers. Any idea what may be causing the difference?

nip-42

Probably implement NIP-42?
Even this client does not utilize private messages, This could be useful for some strict relays that requires user to have NIP-42 authenticated to read / post stuffs.

bug: unlabeled button when using talkback

The menu button just reads "unlabeled" when using talkback.

To rrproduce

  1. open system settings > accessibility > talkback and turn it on
  2. Open nozzle
  3. Tap the menu button
  4. See error

Screenshot_20240204-143532_Nozzle

Inclusion in F-Droid

Hi. Thanks for making this beautiful app : )

Are you open towards submitting it to the F-Droid main repo?

[Feature Request] AMOLED pure dark theme

I find the dark mode is not quite dark enough. Could the background be set to total black, all text to white and those boxes for quoted and load image buttons be made quite a bit darker?

white flash on app start

I have my phone set in dark mode and I have the app set in dark mode but when I open the app there is a white screen while the app loads

screen-20240214-063157.mp4

language filter

I personally only speak english, but if i load the global feed a lot of usernames and/or posts begin with other character sets like chinese. Is there a way to filter these out? When i mentioned this on nostr someone asked about "universe view language filter" note id:

nevent1qqsgtqxl26xtanh9j3peq3syz63j4wn5fe2j3gxkl8qs2knje6nr0fcpzpmhxue69uhnzdps9enrw73wd9hszrthwden5te0dehhxtnvdakqz9nhwden5te0dehhxarj9ehx7mmwv4ejucm0d5q3uamnwvaz7tmwdaehgu3wwdjhg6rxdae8qunfweskx7fwvdhk6qgewaehxw309ac8junpd45kgtnxd9shg6npvchxxmmdqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hsz9thwden5te0wfjkccte9ekk7um5wgh8qatzqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpzemhxue69uhhyetvv9ujuurjd9kkzmpwdejhg56h2l0

bug: uncounted following

I have one account i am following but the screenshot below does not show it

Screenshot_20240204-144132_Nozzle

Howevee, if i tap "following" i get
Screenshot_20240204-144332_Nozzle

App crash

App instantly crashes at startup. Tried on the latest github release.

Here's the log :

type: crash
osVersion: Fairphone/FP4eea/FP4:13/TQ3A.230901.001/eng.emy.20240107.055631:user/release-keys
package: com.dluvian.nozzle:45
process: com.dluvian.nozzle

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dluvian.nozzle/com.dluvian.nozzle.MainActivity}: javax.crypto.AEADBadTagException
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:138)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7924)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ExecInit.main(ExecInit.java:48)
	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355)
Caused by: javax.crypto.AEADBadTagException
	at android.security.keystore2.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:611)
	at javax.crypto.Cipher.doFinal(Cipher.java:2114)
	at g7.c.c(SourceFile:1)
	at g7.c.b(SourceFile:6)
	at a7.j.c(SourceFile:43)
	at g7.a.e(SourceFile:28)
	at g7.a.a(SourceFile:1)
	at y4.c.<init>(SourceFile:260)
	at q4.a.<init>(SourceFile:834)
	at com.dluvian.nozzle.MainActivity.onCreate(SourceFile:15)
	at android.app.Activity.performCreate(Activity.java:8342)
	at android.app.Activity.performCreate(Activity.java:8321)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626)
	... 14 more
Caused by: android.security.KeyStoreException: Signature/MAC verification failed (internal Keystore code: -30 message: In KeystoreOperation::finish

Caused by:
    0: In finish: KeyMint::finish failed.
    1: Error::Km(ErrorCode(-30))) (public error code: 10 internal Keystore code: -30)
	at android.security.KeyStore2.getKeyStoreException(KeyStore2.java:369)
	at android.security.KeyStoreOperation.handleExceptions(KeyStoreOperation.java:78)
	at android.security.KeyStoreOperation.finish(KeyStoreOperation.java:128)
	at android.security.keystore2.KeyStoreCryptoOperationChunkedStreamer$MainDataStream.finish(KeyStoreCryptoOperationChunkedStreamer.java:228)
	at android.security.keystore2.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:181)
	at android.security.keystore2.AndroidKeyStoreAuthenticatedAESCipherSpi$BufferAllOutputUntilDoFinalStreamer.doFinal(AndroidKeyStoreAuthenticatedAESCipherSpi.java:396)
	at android.security.keystore2.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:603)
	... 27 more

NIP-50?

Probably implement NIP-50?

Simply adding search into filters object with search query:

["REQ", "search_sess", { "search": "nostr is great", "limit": 100 }]

And then it return EVENTs that normal feed could parse easily

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.