(Pre-Release Software) Secure, Encrypted, P2P chat written atop Warp, IPFS, LibP2P, Dioxus and many more awesome projects and protocols.

Overview


Uplink

Privacy First, Modular, P2P messaging client built atop Warp.


Uplink is written in pure Rust with a UI in Dioxus (which is also written in Rust). It was developed to be a new foundation for the basic implementation of Warp features in a universal application.

The goal should be to build a hyper-customizable application that can run anywhere and support extensions.

Uplink UI


Quickstart

To get running fast ensure you have Rust installed.

Standard Run:

cargo run --bin ui

Rapid Release Testing: This version will run closely to release but without recompiling crates every time.

cargo run --bin ui --profile=rapid

Dependancy List

MacOS M1+

Dep Install Command
Build Tools xcode-select --install
Homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs
cmake brew install cmake
Protoc brew install protobuf

Windows 10+

Dep Install Command
Chocolatey Installation Guide
Rust choco install rust

Contributing

All contributions are welcome! Please keep in mind we're still a relatively small team and any work done to make sure contributions don't cause bugs or issues in the application is much appreciated.

Guidelines for contributing are located in the CONTRIBUTING.md.


Things to fix/implement

We should try to finish this checklist before switching over to using this UI for the primary Uplink UI.

  • Skeletal loaders for all relevant components inside the UIKit
    • User Image
    • Message
    • Button
    • Label
    • Select
    • File
    • Folder
    • User
    • Chat
    • Friend
  • Toast Notifications
    • Ability to push a new toast notification.
    • Toast notification automatically dismisses after n seconds.
    • Hovering over the toast notification should reset the dismiss timer.
    • Clicking the x on the toast notification should dismiss it immediately.
  • Calling Modal
    • Should be wired to state to appear when ui.incoming_call is set to some call.
    • We should outline a struct to neatly contain info we need pertaining to an incoming call.
  • Files
    • Files should be able to be dragged and dropped into a folder in order to move the file into the folder.
    • We should be able to drag and drop to re-organize the files page
    • We should be able to rename folders
    • We should be able to drag and drop folders into folders.
    • We should be able to navigate using the breadcrumbs.
    • We should be able to delete files and folders. Deleting a folder should delete all the items inside a folder.
    • Deleting things should move them to a "trash" folder which will have a different icon.
    • Emptying trash will delete everything in the trash.
  • Language & Translation
    • Replace all references to the plain text within the app with references to the translated items
    • Ensure that there is no hard-coded text within the UIKit that we can't override with props.
  • Messaging
    • Add mock data to generate random replies to messages
    • Add mock data to generate random reactions to messages
    • Add mock data to include random attachments on messages
    • Add the ability to "edit" messages.
    • Implement UI for the aforementioned items.
  • Settings should be wired to a config file and automatically update.
  • CSS needs to be split up neater within components and layouts in uplink_skeleton.
  • Unlock page needs porting.
  • Account creation page needs porting.
  • Add generic loader component.
  • Add a config option to enable developer logging
    • Developer logging should write developer logs to uplink-debug.log
    • Include a way to view the contents of the log-in developer settings.
      • Include a copy button to copy the log to the clipboard.
    • Debug logging should also log neatly to the rust console.
  • Profile Page in settings
  • Profile page popup option for user_image
Comments
  • feat(Logger): Create logger

    feat(Logger): Create logger

    What this PR does ๐Ÿ“–

    1. Create a logger to show logs when activate it on developer mode

    a. When open debug logger, automatically it goes to final of the page b. On new logs, it will go to final of the page. https://user-images.githubusercontent.com/63157656/213220989-1b3048a3-627f-4291-8eee-de557f4211e2.mov

    2. Add menu on developer page to open debug

    image

    3. Logs are save to file debug.log inside .uplink folder

    4. MOCK: let mock logs to test this PR, when we enter on general, profile, privacy and audio settiings

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #135

    Special notes for reviewers ๐Ÿ—’๏ธ

    @dariusc93 I saw your note about create new file, when file been used reach a size limit, I like this idea, but I think would be better to do on next PR.

    Additional comments ๐ŸŽค

    opened by lgmarchi 11
  • feat(friends): mostly wire up friends to warp

    feat(friends): mostly wire up friends to warp

    What this PR does ๐Ÿ“–

    • uses warp to add a friend and accept the friend request
    • uses warp to load conversations
    • modifies the chats page and chats sidebar to use a "loading" state if there is not an active chat. this can happen for 2 reasons: the active chat isn't yet loaded from warp, or no messages have been sent,
    • creates a new method on State which handles events from warp_runner and updates state accordingly
    • uses the "adapter pattern" to convert from warp events into something which makes sense to the State struct.
    • on the Friends, chats, sidebar, and main pages, express the enormous rsx! macro with multiple function calls.
    • not sure why the auth page is deleted again. i thought it was deleted in a previous PR, in favor of the "unlock" and "create_account" layouts
    • don't use Conversation::Default because state expects to have the id of every conversation in chats.all and using Conversation::Default causes runtime errors.
    • allow UserImage to have zero participants, when it's loading
    • make the Button element use an IconButton instead of a Button because on the top bar for the add friends page (and for some reason only there), the Icon was getting the onclick event and not the Button
    • don't store messages in State but rather fetch them from Warp. same for conversations. however, store a list of Uuids for conversations which should be in the sidebar.

    There is still more to do, but this PR already touches 22 files.

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    known bugs

    • when logging in, the "create account" button briefly becomes active, allowing a user to try to re-create their account again. this will fail.
    • when copying your DID, the input box doesn't accept it unless the copy button for that window was first pressed.
    • when a friend request is accepted, the sender doesn't get updated
    • can't send messages (not really a bug, that one hasn't been implemented)
    • adding, removing, and blocking friends updates the UI but doesn't trigger the required warp commands
    opened by sdwoodbury 11
  • feat(friends): wire up other friend events

    feat(friends): wire up other friend events

    What this PR does ๐Ÿ“–

    • the following friend related events should now work: send, accept, reject, unfriend
    • block is wired up but needs some more work
    • fixes a few items from https://github.com/Satellite-im/Uplink/issues/146

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    sometimes on Linux I get this error: Failed to create shared memory: Too many open files. I'm not sure if it's because of warp or saving state.json but it interferes with Uplink. eventually we probably do want to use a database instead of a json file.

    no way to unblock a friend if side A and B are friends, side A then blocks B, A will disappear from B's friends list but B will still have the option to unfriend A image

    since the warp update there's something weird going on when i try to log in

    https://user-images.githubusercontent.com/8636602/213306106-32b0a61d-4725-47b1-a01e-e016403518fd.mp4

    opened by sdwoodbury 9
  • feat(chats): send a message

    feat(chats): send a message

    What this PR does ๐Ÿ“–

    • enables Uplink to send a message, and receives incoming messages for each conversation.

    • fakes sending messages when mock data is used

    • allows the Input element to be cleared via an optional flag

    • turned Chat::messages into a VecDeque in anticipation of pagination, though the version of warp in use only supports fetching all messages (the function to get a range of messages just gets all messages and then discards the unwanted ones).

    • refactored the functions which convert a DID to an Identity to not take ownership of the DID. this eliminates the need to clone the variable.

    • reactions and replies are yet to come.

    • the big thing is this file: ui/src/warp_runner/conv_stream.rs. it creates a thread to listen for incoming messages for each conversation. the threads are aborted when conv_stream::Manager is dropped

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    opened by sdwoodbury 8
  • chore(validation): added ability to ignore colons on inputs, which lets us insert friend codes but still otherwise limit alpha numeric chars

    chore(validation): added ability to ignore colons on inputs, which lets us insert friend codes but still otherwise limit alpha numeric chars

    What this PR does ๐Ÿ“–

    This adds a boolean override to the validation struct on the input that allows you to allow colons while continuing to disallow all the other not alpha numeric inputs. This makes it so the add friend input can have colons and the other inputs with the validator can not.

    I tried

    • making it an char vector so it was more customizable, but could not figure it out.
    • making the override input an Option that i could then split, but you cant derive Copy on an optional string
    • checked the char methods available, to see if there was something we could use in place of is_alphanumeric, but didn't find anything
    • A few other things i can't recall off hand

    if you guys can think of a better way for me to do this, I would be glad to give it another go

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #157

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    opened by WanderingHogan 7
  • cargo run --bin ui returns error

    cargo run --bin ui returns error

    Hello! ๐Ÿ‘‹ when using cargo run --bin ui returns error

    sara@MacBook-Pro-de-Sara-3 Uplink-UI % cargo run --bin ui                
    
       Compiling kit v0.1.0 (/Users/sara/Desktop/Uplink-UI/kit)
       Compiling warp-rg-ipfs v0.1.0 (https://github.com/Satellite-im/Warp?rev=ed3b5de968fb623a7d76170a5d7dd3f3c79d3e1b#ed3b5de9)
    error[E0658]: `let...else` statements are unstable
       --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/conversation.rs:206:13
        |
    206 | /             let Some(creator) = self.creator.clone() else {
    207 | |                 return Err(Error::PublicKeyInvalid)
    208 | |             };
        | |______________^
        |
        = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
       --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/conversation.rs:234:13
        |
    234 | /             let Some(creator) = self.creator.clone() else {
    235 | |                 return Err(Error::PublicKeyInvalid)
    236 | |             };
        | |______________^
        |
        = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
       --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/conversation.rs:238:13
        |
    238 | /             let Some(signature) = self.signature.clone() else {
    239 | |                 return Err(Error::InvalidSignature)
    240 | |             };
        | |______________^
        |
        = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
       --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:209:17
        |
    209 | /                 let Ok(stream) = store.ipfs.pubsub_subscribe(DIRECT_BROADCAST.into()).await else {
    210 | |                     error!("Unable to create subscription stream. Terminating task");
    211 | |                     //TODO: Maybe panic? 
    212 | |                     return;
    213 | |                 };
        | |__________________^
        |
        = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
       --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:255:9
        |
    255 | /         let Ok(conversation) = self.get_conversation(conversation_id).await else {
    256 | |             return
    257 | |         };
        | |__________^
        |
        = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
       --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:259:9
        |
    259 | /         let Ok(tx) = self.get_conversation_sender(conversation_id).await else {
    260 | |             return
    261 | |         };
        | |__________^
        |
        = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
       --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:263:9
        |
    263 | /         let Ok(stream) = self.ipfs.pubsub_subscribe(conversation.event_topic()).await else {
    264 | |             return
    265 | |         };
        | |__________^
        |
        = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
        --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:1084:9
         |
    1084 | /         let Some(path) = self.path.as_ref() else {
    1085 | |             return Ok(())
    1086 | |         };
         | |__________^
         |
         = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
        --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:1098:17
         |
    1098 | / ...   let Some(id) = entry_path.file_name().map(|file| file.to_string_lossy().to_string()).and_then(|id| Uuid::from_str(&id).ok()) else {
    1099 | | ...       continue
    1100 | | ...   };
         | |________^
         |
         = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
        --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:1101:17
         |
    1101 | /                 let Ok(cid_str) = tokio::fs::read(entry_path).await.map(|bytes| String::from_utf8_lossy(&bytes).to_string()) else {
    1102 | |                     continue
    1103 | |                 };
         | |__________________^
         |
         = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
        --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:1401:9
         |
    1401 | /         let Some(creator) = conversation.creator.clone() else {
    1402 | |             return Err(Error::InvalidConversation);
    1403 | |         };
         | |__________^
         |
         = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
        --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:1431:9
         |
    1431 | /         let Some(signature) = conversation.signature.clone() else {
    1432 | |             return Err(Error::InvalidSignature);
    1433 | |         };
         | |__________^
         |
         = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
        --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:1475:9
         |
    1475 | /         let Some(creator) = conversation.creator.clone() else {
    1476 | |             return Err(Error::InvalidConversation);
    1477 | |         };
         | |__________^
         |
         = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    error[E0658]: `let...else` statements are unstable
        --> /Users/sara/.cargo/git/checkouts/warp-2f0b6768b713aeb1/ed3b5de/extensions/warp-rg-ipfs/src/store/message.rs:1502:9
         |
    1502 | /         let Some(signature) = conversation.signature.clone() else {
    1503 | |             return Err(Error::InvalidSignature);
    1504 | |         };
         | |__________^
         |
         = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
    
    For more information about this error, try `rustc --explain E0658`.
    error: could not compile `warp-rg-ipfs` due to 14 previous errors
    

    macOS, m1

    opened by stavares843 7
  • feat(misc): misc improvements

    feat(misc): misc improvements

    What this PR does ๐Ÿ“–

    • The way command line options are parsed and stored has been refactored to only parse the arguments once and store everything in a static variable
    • The Warp event and command channels were refactored to use a struct instead of a tuple

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    I made these changes while trying to fix issue 93. I got stuck but suspect that changing the login flow, which we need to do anyway, will fix the issue. I'm attempting to commit these improvements now so that the next PR doesn't get cluttered.

    opened by sdwoodbury 5
  • feat(login): add unlock and auth layouts

    feat(login): add unlock and auth layouts

    What this PR does ๐Ÿ“–

    • Uplink now requires a password before logging in. if no account is created, the user may create one.
    • for now, until we decide what the flow should be, creating a new account will always fail if there's already an account at --path.
    • translations aren't used because there's an outstanding PR related to translations which would just conflict with this.
    • the UI isn't in the final state. but as far as I know, it hasn't been designed either.
    • the Input element was changed to include a valid flag in the callback. that way 'onchange' and 'onenter' will know if the input should be used.

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    opened by sdwoodbury 5
  • feat(MediaPlayer): improve handling of calls and MediaPlayer

    feat(MediaPlayer): improve handling of calls and MediaPlayer

    What this PR does ๐Ÿ“–

    • the controls for the current call (mute, silence, ect) were moved from State::UI to State::UI::Call
    • for a video call, UI::Call stores the WebView (currently this only happens when the video is popped out). the popout_player persists when one switches chats.
    • ToggleMedia and EndAll were changed because
      1. ToggleMedia allowed for setting multiple chats to having active media but only one media should be active at a time.
      2. EndAll only makes sense if every chat can have active media (see previous point about this)

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #44

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    for some reason if overlays are toggled some number of times, ending with them being enabled, and the app is closed, the app crashes. But the WebViews close themselves when the UI struct is dropped. I suspect the test code in main.rs has something to do with this, and have left the problem for now in hopes that when overlays are actually used, this bug will go away.

    opened by sdwoodbury 5
  • feat(Profile): Create Profile page

    feat(Profile): Create Profile page

    What this PR does ๐Ÿ“–

    1. Create Profile Page

    It is not persisted state, if will go out page, all data will be lost a. You can upload profile banner picture b. Able to upload profile avatar picture c. Able to change username d. Able to change status message

    https://user-images.githubusercontent.com/63157656/210374797-b73ec521-1fcf-4463-a284-e1e486c7482d.mov

    Status Message detail: how status message can be empty, if you start write, and erase text on status message text field, when save, status message will be empty

    https://user-images.githubusercontent.com/63157656/210375227-ee02fb6d-524c-4980-b8ce-7bd641a4ddd4.mov

    2. Input element had problem with val return, it was eaten last string char using use_state, so I changed to use_ref and problem was fixed. Other thing, when we use erase field button, it was not returning empty value, so added code there as well

    image image

    3. Added possibility to focus on text field when it is called

    image image image

    4. Username and Message Status Rules

    a. Added counter chars for both fields b. Username rules, max chars 32, min chars 4 c. Status Message rules, max chars 128, min chars 0

    https://user-images.githubusercontent.com/63157656/210601479-dc78dcd4-2f28-41e4-a691-eeaf73a5d771.mov

    5. Add opacity animations on text fields rules and transition animation between text and text fields

    https://user-images.githubusercontent.com/63157656/210630492-b34b37b8-2fc7-4744-af04-2c8cee3cbf9c.mov

    https://user-images.githubusercontent.com/63157656/210630503-ec20f726-2b88-4652-b57e-9dc9474b0785.mov

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    opened by lgmarchi 5
  • update(responsive): Change layout responsive manually

    update(responsive): Change layout responsive manually

    What this PR does ๐Ÿ“–

    1. Possibility to change layout responsive manually

    https://user-images.githubusercontent.com/63157656/212139025-f7efd419-3aee-4cd0-9494-f2d4c9a2e75b.mov

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #128

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    opened by lgmarchi 4
  • feat(reactions): add reactions to warp_runner

    feat(reactions): add reactions to warp_runner

    What this PR does ๐Ÿ“–

    • this PR allows for adding and removing reactions from messages
    • the UI isn't done for this yet, so it must be tested in the debugger UI or by running uplink with the debug option. ex: target/debug/ui --no-mock debug

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    Missing dev review 
    opened by sdwoodbury 0
  • Add error message when User tries to add themselves

    Add error message when User tries to add themselves

    Task: This still needs design but I thought itd be nice to have a ticket started for it, if we copy our own did and then try to add ourselves we should have a error message appear. I think for chore I remember us having "You cant add yourself, silly goose"

    https://user-images.githubusercontent.com/93608357/215173715-c68f5f87-1ea3-48ab-af29-1dc5dfaeb157.mov

    enhancement Alpha Friend Request Needs design still 
    opened by phillsatellite 0
  • chore(tesseract-helper): added helper function to see if local accounโ€ฆ

    chore(tesseract-helper): added helper function to see if local accounโ€ฆ

    โ€ฆt exists

    What this PR does ๐Ÿ“–

    This add's a helper that just tells us if the local account even exists. I want to use it in the UI in other places but its taking me longer to figure out, so it would be best to get this in if possible.

    On the UI side, this method shows or hides the create account button based on if there is a local account somewhere. So if you have the uplink folder, no button, if you clear it out, the create account button is there @phillsatellite

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    Changes requested Missing dev review 
    opened by WanderingHogan 3
  • Long messages will break UI

    Long messages will break UI

    Issue: If user sends a long message in chat, it will break the UI and let user scroll horizontally in the sidebar and chat

    Screen recording:

    https://user-images.githubusercontent.com/93608357/214912074-6f8f3c5f-485e-42ed-a5fd-44e03f1fae46.mov

    bug Messaging 
    opened by phillsatellite 0
  • feat(ScrollPosition): Return scroll position

    feat(ScrollPosition): Return scroll position

    What this PR does ๐Ÿ“–

    1. Return Scroll position when in chat messages

    2. Onscroll function doesn't work on MacOS

    Which issue(s) this PR fixes ๐Ÿ”จ

    • Resolve #178

    Special notes for reviewers ๐Ÿ—’๏ธ

    Additional comments ๐ŸŽค

    Missing dev review Draft 
    opened by lgmarchi 3
  • When hovering over any text on the app, the cursor should stay the same

    When hovering over any text on the app, the cursor should stay the same

    Issue: When we hover our cursor over text within the app, the cursor changes from an arrow to the text cursor. Instead it should remain an arrow no matter what you hover over

    Screen recording:

    https://user-images.githubusercontent.com/93608357/214629727-d068a165-3029-494e-b3b8-fff6071fb034.mov

    improvement 
    opened by phillsatellite 2
Owner
Satellite
P2P Chat, Voice & Video Open-source, stored on IPFS. End to end encryption... trackers not included.
Satellite
Warp is a blazingly fast, Rust-based terminal that makes you and your team more productive at running, debugging, and deploying code and infrastructure.

Warp is a blazingly fast, Rust-based terminal that makes you and your team more productive at running, debugging, and deploying code and infrastructure.

Warp 10.4k Jan 4, 2023
๐Ÿš€ JavaScript driver for ScyllaDB, harnessing Rust's power through napi-rs for top performance. Pre-release stage. ๐Ÿงช๐Ÿ”ง

?? JavaScript driver for ScyllaDB. Pre-release stage. ???? โš ๏ธ Disclaimer โš ๏ธ This repository and the associated npm package are currently in a ?? pre-r

Daniel Boll 16 Oct 21, 2023
Execute Javascript code in the Dioxus, and get the return value ( for Dioxus )

Golde Dioxus Execute Javascript code in the Dioxus, and get the return value. This demo can help use Javascript to calc the + operator formula. use di

YuKun Liu 15 Dec 27, 2022
A template for starting a dioxus project to be used with dioxus-cli

A template for starting a dioxus project to be used with dioxus-cli

Dioxus 6 Nov 25, 2022
ergonomic and precise error handling built atop type-level set arithmetic

terrors - the Rust error handling library Handling errors means taking a set of possible error types, removing the ones that are locally addressible,

Komora 190 Jul 27, 2024
Dash is a CLI tool that rapidly sets up new projects by running a series of pre-defined commands.

Dash Dash is a CLI tool that rapidly sets up new projects by running a series of pre-defined commands. Features Quick Initialization: Initialize the c

Kunal Bagaria 4 Nov 7, 2023
Curated list of awesome projects and resources related to Rust and computer security

Awesome Rust Security Curated list of awesome projects and resources related to Rust and computer security Table of Contents Tools Web and Cloud Secur

Alan 131 Jan 1, 2023
An awesome CLI tool for effectively learning Rust and more. Project winner of the RustFi 2022 hackathon

rlrn An awesome CLI tool for effectively learning Rust and more Table of Contents About The Project Built With Getting Started Prerequisites Installat

Victor Kostyuk 6 Dec 25, 2022
Little example projects for learning Rust and building awesome cli tools! โญ๏ธ

rust-cli-examples Examples of clean and well-tested command line utilities, written in Rust. ?? ?? What is this repo? This repo is a collection of man

Jim Lynch 5 Mar 31, 2023
Catch Tailwindcss Errors at Compile-Time Before They Catch You, without making any change to your code! Supports overriding, extending, custom classes, custom modifiers, Plugins and many more ๐Ÿš€๐Ÿ”ฅ๐Ÿฆ€

twust Twust is a powerful static checker in rust for TailwindCSS class names at compile-time. Table of Contents Overview Installation Usage Statement

null 15 Nov 8, 2023
A working, tested example for how to use Rust with warp and JWT

rust-jwt-example Example of JWT authentication and authorization in Rust using Warp Login curl http://localhost:8000/login -d '{"email": "user@userlan

Akhil Sharma 3 Sep 18, 2023
A simple cli to clone projects and fetch all projects in a GitHub org..

stupid-git A simple cli to clone projects and update all projects. get all repository from GitHub clone all pull all with git stash Usage create sgit.

Fengda Huang 5 Sep 15, 2022
More than safe rust abstractions over rytm-sys, an unofficial SDK for writing software for Analog Rytm running on firmware 1.70.

rytm-rs More than safe rust abstractions over rytm-sys, an unofficial SDK for writing software for Analog Rytm running on firmware 1.70. On top of CC

Ali Somay 5 Dec 22, 2023
Open source email client written in Rust and Dioxus. Under ๐Ÿ—๏ธ

Blazemail A full-featued, beautiful, mail client that doesn't suck. Works on mac, windows, linux, mobile, web, etc. Features, status Blazemail is curr

Jon Kelley 13 Dec 19, 2022
Super-lightweight Immediate-mode Embedded GUI framework, based on the awesome embedded-graphics library. Written in Rust.

Kolibri - A GUI framework made to be as lightweight as its namesake What is Kolibri? Kolibri is an embedded Immediate Mode GUI mini-framework very str

null 6 Jun 24, 2023
Rust-powered CLI tool designed to simplify and streamline the release process with help of ChatGPT

$ releasecraftsman ????โ€โ™‚๏ธ?? Automate Your Release Process with Precision and Ease. ?? Features Generate well-crafted release notes using GPT-3.5 and

Tornike Gomareli 7 Sep 21, 2023
Cargo subcommand `release`: everything about releasing a rust crate.

cargo release Features Ensure you are in a good state for release, including: Right branch Up-to-date with remote Clean tree Supports workspaces using

null 933 Jan 8, 2023
Integrate a Rust project with semantic-release

semantic-release-cargo semantic-release-cargo integrates a cargo-based Rust project with semantic-release. This solves two use cases: publishing to cr

null 5 Jan 16, 2023
Macro to print variable(s) with values nicely (stripped from release builds)

log_macro Macro to print variable(s) with values nicely (stripped from release builds) Install cargo add log_macro Use Add this to top of file: #[mac

Nikita 3 Aug 22, 2023