{"id":37007287,"url":"https://github.com/giilbert/maf","last_synced_at":"2026-01-14T00:47:10.074Z","repository":{"id":288692195,"uuid":"937717922","full_name":"giilbert/maf","owner":"giilbert","description":"MAF is an authoritative realtime framework for writing simple, secure, and scalable apps.","archived":false,"fork":false,"pushed_at":"2026-01-04T00:19:35.000Z","size":6102,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2026-01-06T21:58:18.370Z","etag":null,"topics":["fullstack","realtime","websockets"],"latest_commit_sha":null,"homepage":"https://maf.gilbertz.me","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/giilbert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-23T18:26:49.000Z","updated_at":"2026-01-04T00:19:38.000Z","dependencies_parsed_at":"2025-05-30T02:30:51.682Z","dependency_job_id":"e93d7418-0c04-4e84-a7a4-344040a7a725","html_url":"https://github.com/giilbert/maf","commit_stats":null,"previous_names":["giilbert/maf","giilbert/cobble"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/giilbert/maf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giilbert%2Fmaf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giilbert%2Fmaf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giilbert%2Fmaf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giilbert%2Fmaf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/giilbert","download_url":"https://codeload.github.com/giilbert/maf/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giilbert%2Fmaf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28406590,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T21:51:37.118Z","status":"ssl_error","status_checked_at":"2026-01-13T21:45:14.585Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["fullstack","realtime","websockets"],"created_at":"2026-01-14T00:47:09.967Z","updated_at":"2026-01-14T00:47:10.058Z","avatar_url":"https://github.com/giilbert.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![\"mutation authority framework\" banner](assets/banner.png)\n\n\u003chr\u003e\n\nA toolkit for making realtime apps.\n\n## Motivation\n\n__Making realtime apps is a PAIN IN THE A*$ ☹️☹️☹️.__\n\nSuppose you want to make a Kahoot-like realtime quiz app. Broken down, you will need to:\n- Create a server that can handle multiple clients connecting at the same time\n- Handle user authentication and authorization (e.g. who is the host, who are the players, etc.)\n- Send realtime updates to players (e.g. when a player answers a question, the host needs to see the updated scores, etc.)\n- Handle user input (e.g. when a player answers a question, the host needs to see the updated scores, etc.)\n- Keep track of the game's state (e.g. question number, player scores, whether the game is waiting for players/finished, etc.)\n\n__Option 1__: Use a server-side library like Socket.IO to handle the realtime communication, and then add a bunch of code to handle the game logic.\n\n- A s___ ton of work\n- A s___ ton of bugs\n- Feels like a mess working with ✨ state ✨ on the server and client\n\n__Option 2__: Use a client-side library like Firebase or Liveblocks to handle the realtime communication, with code running on the client being the authoritative source of truth.\n\n- Points 1 \u0026 2 from above\n- But now you have to deal with the fact that the __client is not a trusted source of truth__. This may not be a problem for a quiz app, but if you want to make a game where integrity is important, you will need a server to handle the game logic.\n\n## Mutation \"Authority\" Framework\n\n__The core problem with realtime apps is managing ✨ STATE ✨.__\n\nExisting tools make it feel unnatural to work with state. Why can't we have ...\n\n```rust\nfn handle_request(state: \u0026mut State, request: Request) -\u003e Response {\n    // ...\n}\n```\n\n... for realtime apps?\n\nMAF is a server framework aiming to abstract away the complexity of managing state in realtime apps, so you can focus on actually building your app instead of confusing yourself with boilerplate.\n\nMAF also provides a set of tools to help you easily deploy your app. So, next time you want to make a realtime app (say... a hackathon), you can just use MAF and get it online in a few minutes.\n\n### Features 🌈🦄 \n- __Realtime State Abstractions__\n- __WASM Deployments__\n- __Client \u0026 Server Libraries__\n- TODO TODO TODO\n\n## Getting Started\nuhhhhhhhh to be continued","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiilbert%2Fmaf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgiilbert%2Fmaf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiilbert%2Fmaf/lists"}