{"id":17267506,"url":"https://github.com/technius/play-akka-typed-chat","last_synced_at":"2025-09-12T00:20:22.537Z","repository":{"id":143021365,"uuid":"109659111","full_name":"Technius/play-akka-typed-chat","owner":"Technius","description":"A chat webapp implemented in Akka Typed, using Play as the web framework","archived":false,"fork":false,"pushed_at":"2017-11-18T23:18:22.000Z","size":22,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-26T11:14:10.273Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Technius.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":"2017-11-06T07:01:18.000Z","updated_at":"2017-11-06T07:01:55.000Z","dependencies_parsed_at":"2023-03-26T17:32:42.892Z","dependency_job_id":null,"html_url":"https://github.com/Technius/play-akka-typed-chat","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Technius/play-akka-typed-chat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Technius%2Fplay-akka-typed-chat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Technius%2Fplay-akka-typed-chat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Technius%2Fplay-akka-typed-chat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Technius%2Fplay-akka-typed-chat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Technius","download_url":"https://codeload.github.com/Technius/play-akka-typed-chat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Technius%2Fplay-akka-typed-chat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274729667,"owners_count":25338749,"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","status":"online","status_checked_at":"2025-09-11T02:00:13.660Z","response_time":74,"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":[],"created_at":"2024-10-15T08:10:52.966Z","updated_at":"2025-09-12T00:20:22.496Z","avatar_url":"https://github.com/Technius.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sample chat webapp using Play and Akka Typed\n\nI wrote this as a learning project to figure out how to use Akka Typed.\n\n## Usage\n\nRun `sbt run` and go to `localhost:9000`.\n\n## Notes on writing this webapp\n\n* [Immutable typed actors][actors_source] are identical to state machines, and\n  they're really easy to reason about!\n* The Akka Typed scaladocs aren't linked anywhere on the website, but you can\n  find them [here][akka_typed_scaladoc].\n* Since Play uses untyped actors by default, `import\n  akka.typed.scaladsl.adapter._` is required to get interop with typed actors.\n* When a typed actor is converted into an untyped actor, sending *any* message\n  that doesn't match the type of the actor's behavior to the wrapped untyped\n  actor will cause an error, as expected.\n* Use `akka.typed.scaladsl.adapter.PropsAdapter(myBehavior)` to generate an\n  untyped `Props` from a `Behavior`.\n* The websocket handler only passes in `ClientCommand`, so it's impossible for\n  the client to do things that only the server can do!\n* The actor that handles the websocket messages has to change which messages it\n  accepts when the user connects to a room. This means that the actor has to\n  have the most general `Command` type, which will allow it to receive both\n  internal and external messages.\n* An unconnected client only has access to an actor that accepts `JoinRoom`,\n  because that's the only thing an unconnected client can do--join a room.\n\nMaybe I'll write a blog post about writing the chat webapp once I refactor the\ncode to be nicer.\n\n[actors_source]: tree/src/main/scala/actors/ChatRoom.scala\n[akka_typed_scaladoc]: https://doc.akka.io/api/akka/current/akka/typed/\n\n## License\n\nCopyright 2017 Bryan Tan\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the License for the\nspecific language governing permissions and limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechnius%2Fplay-akka-typed-chat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechnius%2Fplay-akka-typed-chat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechnius%2Fplay-akka-typed-chat/lists"}