{"id":16389301,"url":"https://github.com/pablocostass/morsegram","last_synced_at":"2026-06-23T05:32:03.793Z","repository":{"id":104596974,"uuid":"157238174","full_name":"pablocostass/morsegram","owner":"pablocostass","description":"Morsegram is an Elixir based distributed chat application","archived":false,"fork":false,"pushed_at":"2018-12-17T11:44:34.000Z","size":571,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-13T05:03:53.043Z","etag":null,"topics":["chat-application","elixir","supervisor"],"latest_commit_sha":null,"homepage":"https://github.com/pablocostass/morsegram","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pablocostass.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":"2018-11-12T15:53:09.000Z","updated_at":"2020-02-18T10:08:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"54c255a5-51ba-440c-b407-4df71ea0d414","html_url":"https://github.com/pablocostass/morsegram","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pablocostass/morsegram","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablocostass%2Fmorsegram","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablocostass%2Fmorsegram/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablocostass%2Fmorsegram/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablocostass%2Fmorsegram/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pablocostass","download_url":"https://codeload.github.com/pablocostass/morsegram/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablocostass%2Fmorsegram/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34677382,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["chat-application","elixir","supervisor"],"created_at":"2024-10-11T04:32:18.020Z","updated_at":"2026-06-23T05:32:03.767Z","avatar_url":"https://github.com/pablocostass.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./img/logo.png\" height=\"100\" /\u003e\n\n# Morsegram\nMorsegram is an Elixir based distributed chat application.\nOur goal with this project was to learn and improve our knowledge about distributed architectures in Elixir/Erlang, besides acquiring experience with the Supervisor behaviour present in these languages.\n\n\u003e Note that in order to launch the program an escript build is used, so instead of starting an IEx session for the client, it is launched with `./morsegram` followed up of its parameters.\n\n## Prerequisites\nTo be able to use `Morsegram` it is assumed that your computer has at least:\n\n - Elixir\n\n## How to use it\nThe `Morsegram` module has an only entry point:\n\n - main/1 \n\nThis function receives as a parameter a list of arguments, parses them, and starts up the CLI. As it was noted earlier, although the function exists it is not needed to manually call it to get started:\n\n    ./morsegram --user foo@XYZ_Node --server bar@ABC_Node\n\n  \u003e To be able to run the escript it is needed to beforehand build it with the following command:\n\n    mix escript.build\n\n  \u003e Also it should be noted that the server should be up and running on a node for the client to work. To launch the server execute the following commands from the root project folder:\n\n    iex --name bar@ABC_Node -S mix\n    \n    iex(bar@ABC_Node)1\u003e Leader.start\n\nOnce done that, with the application launched you have the following commands for use:\n\n  * search_room `room`\n    * Finds a given room and connects you to it\n  * send_message `room`\n    * Gives you a prompt where you can type a message that will be sent to the given room\n  * list_users `room`\n    * Shows the list of users in a given room\n  * disconnect `room`\n    * Disconnects you from a given room\n  * \\# help\n    * Prints out the commands available for use.\n  * \\# quit\n    * Closes Morsegram after printing you a goodbye message\n\n## Example\nAn example of the chat in use:\n\n* A server up is started up and running in `foo@XYZ_Node`:\n  ```sh\n  iex --name foo@XYZ_Node -S mix\n  ```\n  ```Elixir\n  iex(foo@XYZ_Node)1\u003e Leader.start\n  {:ok, #PID\u003c0.179.0\u003e}\n  ```\n* Any client can then start the CLI as follows:\n  ```sh\n  mix escript.build \u0026\u0026 ./morsegram --user bar@ABC_Node --server foo@XYZ_Node\n  ```\n  \u003e For this example we will suppose that two clients, `bar@ABC_Node` and `bar2@DEF_Node`, are connected to the server.\n* Which will print a greeting and start the prompt:\n  ```Elixir\n  Welcome to Morsegram!\n  $\n  ```\n* After that the user is free to search for a room about any given topic:\n  * Client `bar@ABC_Node`:\n    ```Elixir\n    $ search_room pinhas\n    $ [18:52:39] [Connected to room pinhas]\n    $ \n    ```\n  * Client `bar2@DEF_Node`: \n    ```Elixir\n    $ search_room pinhas\n    $ [18:52:45] [Connected to room pinhas]\n    $ \n    ```\n  * This will notify client any other client on the room about the connection:\n    ```Elixir\n    $ [18:52:45] [Connected to room pinhas]\n    $ [18:52:45] [User bar2@DEF_Node has connected to the room pinhas]\n    ```\n* And then send messages:\n  * Client `bar@ABC_Node`:\n    ```Elixir\n    $ send_message pinhas\n    bar@ABC_Node: cocos\n    $ [18:53:03] [pinhas] bar@ABC_Node: cocos\n    $ \n    ```\n  * Which on client `bar2@DEF_Node` will be also printed out:\n    ```Elixir\n    $ [18:52:45] [Connected to room pinhas]\n    $ [18:53:03] [pinhas] bar@ABC_Node: cocos\n    $ \n    ```\n* Any user can also see who they are chatting with on a given room by doing as follows:\n  * Client `bar@ABC_Node`:\n    ```Elixir\n    $ list_users pinhas\n    $ [\"bar@ABC_Node\", \"bar2@DEF_Node\"]\n    $ \n    ```\n* Users can disconnect from the room with the following command:\n  * Client `bar@ABC_Node`:\n    ```Elixir\n    $ disconnect pinhas\n    $ [18:53:15] [Disconnected from room pinhas]\n    $ \n    ```\n  * Which will notify any other client on the room about the disconnection:\n    ```Elixir\n    $ [18:53:03] [pinhas] bar@ABC_Node: cocos\n    $ [18:53:15] [User bar@ABC_Node has disconnected from the room pinhas]\n    $ \n    ```\n* Users can print a list of commands available with the `# help` command:\n  ```Elixir\n  $ # help\n  Commands:\n  search_room [room]\n    Finds a given room and connects you to it\n  send_message [room]\n    Gives you a prompt where you can type a message that will be sent to the given room\n  list_users [room]\n    Shows the list of users in a given room\n  disconnect [room]\n    Disconnects you from a given room\n  # help\n    Prints out this message\n  # quit\n    Closes Morsegram after printing you a goodbye message\n  $ \n  ```\n* Finally, users can quit the application with the use of the `# quit` command:\n  ```Elixir\n  $ [18:53:15] [Disconnected from room pinhas]\n  $ # quit\n  Disconnecting from Morsegram...\n  See you later, bar@ABC_Node\n  ```\n\n## Credits\nDone by:\n\n| Last name, first name  | Email                        |\n|------------------------|------------------------------|\n| Ameneiros López, Bruno | bruno.ameneiros@udc.es       |\n| Costas Sánchez, Pablo  | pablo.costass@udc.es         |\n| Garea Cidre, Javier    | javier.garea@udc.es          |\n| Gómez García, Adrián   | a.gomezg@udc.es              |\n| Piñeiro Ferrero, Ángel | angel.pineiro.ferrero@udc.es |\n| Rivas Dorado, Héctor   | hector.rivas@udc.es          |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpablocostass%2Fmorsegram","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpablocostass%2Fmorsegram","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpablocostass%2Fmorsegram/lists"}