{"id":22902407,"url":"https://github.com/opengamebackend/opengamebackend","last_synced_at":"2025-04-11T23:20:00.667Z","repository":{"id":227855635,"uuid":"753886289","full_name":"rivet-gg/actor-core","owner":"rivet-gg","description":"🎭 Stateful serverless framework for Rivet, Cloudflare Workers, Bun, and Node.js. Build AI agents, realtime apps, game servers, and more.","archived":false,"fork":false,"pushed_at":"2025-04-11T00:55:39.000Z","size":29576,"stargazers_count":552,"open_issues_count":22,"forks_count":20,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-11T23:19:46.719Z","etag":null,"topics":["actor","actors","agents","ai","ai-agents","bun","cloudflare-durable-objects","cloudflare-workers","durable-objects","nodejs","rivet","supabase","typescript","vercel"],"latest_commit_sha":null,"homepage":"https://actorcore.org","language":"TypeScript","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/rivet-gg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support/enterprise.mdx","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-07T01:06:25.000Z","updated_at":"2025-04-11T21:06:38.000Z","dependencies_parsed_at":"2024-05-21T12:26:18.501Z","dependency_job_id":"c0d00476-e1dd-4dea-a10b-00474e54d3a4","html_url":"https://github.com/rivet-gg/actor-core","commit_stats":null,"previous_names":["rivet-gg/opengb","rivet-gg/modules","opengamebackend/opengamebackend","rivet-gg/actor-core"],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivet-gg%2Factor-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivet-gg%2Factor-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivet-gg%2Factor-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivet-gg%2Factor-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rivet-gg","download_url":"https://codeload.github.com/rivet-gg/actor-core/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248492919,"owners_count":21113166,"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","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":["actor","actors","agents","ai","ai-agents","bun","cloudflare-durable-objects","cloudflare-workers","durable-objects","nodejs","rivet","supabase","typescript","vercel"],"created_at":"2024-12-14T02:14:59.016Z","updated_at":"2025-04-11T23:20:00.648Z","avatar_url":"https://github.com/rivet-gg.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://actorcore.org\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/media/icon-text-white.svg\" alt=\"ActorCore\" width=\"400\"\u003e\n      \u003cimg src=\"./.github/media/icon-text-white.svg\" alt=\"ActorCore\" width=\"400\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003eStateful, Scalable, Realtime Backend Framework\u003c/h3\u003e\n\u003ch4 align=\"center\"\u003e\n\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n  \u003c!-- \u003ca href=\"https://github.com/rivet-gg/rivet/graphs/commit-activity\"\u003e\u003cimg alt=\"GitHub commit activity\" src=\"https://img.shields.io/github/commit-activity/m/rivet-gg/rivet?style=flat-square\"/\u003e\u003c/a\u003e --\u003e\n  \u003ca href=\"https://github.com/rivet-gg/actor-core/discussions\"\u003e\u003cimg alt=\"GitHub Discussions\" src=\"https://img.shields.io/github/discussions/rivet-gg/rivet?logo=github\u0026logoColor=fff\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://rivet.gg/discord\"\u003e\u003cimg alt=\"Discord\" src=\"https://img.shields.io/discord/822914074136018994?color=7389D8\u0026label\u0026logo=discord\u0026logoColor=ffffff\"/\u003e\u003c/a\u003e\n   \u003ca href=\"https://twitter.com/rivet_gg\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/rivet_gg\" alt=\"Rivet Twitter\" /\u003e\u003c/a\u003e\n   \u003ca href=\"https://bsky.app/profile/rivet.gg\"\u003e\u003cimg src=\"https://img.shields.io/badge/Follow%20%40rivet.gg-4C1?color=0285FF\u0026logo=bluesky\u0026logoColor=ffffff\" alt=\"Rivet Bluesky\" /\u003e\u003c/a\u003e\n  \u003ca href=\"/LICENSE\"\u003e\u003cimg alt=\"License Apache-2.0\" src=\"https://img.shields.io/github/license/rivet-gg/rivet?logo=open-source-initiative\u0026logoColor=white\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Intro\n\nThe modern way to build multiplayer, realtime, or AI agent backends.\n\nRuns on [Rivet](https://actorcore.org/platforms/rivet), [Cloudflare Workers](https://actorcore.org/platforms/cloudflare-workers), [Bun](https://actorcore.org/platforms/bun), and [Node.js](https://actorcore.org/platforms/nodejs). Integrates with [Hono](https://actorcore.org/integrations/hono) and [Redis](https://actorcore.org/drivers/redis).\n\n### Architecture\n\n- 💾 **Persistent, In-Memory State**: Fast in-memory access with built-in durability — no external databases or caches needed.\n- ⚡ **Ultra-Fast State Updates**: Real-time state updates with ultra-low latency, powered by co-locating compute and data.\n- 🔋 **Batteries Included**: Integrated support for state, actions, events, scheduling, and multiplayer — no extra boilerplate code needed.\n- 🖥️ **Serverless \u0026 Scalable**: Effortless scaling, scale-to-zero, and easy deployments on any serverless runtime.\n\n### Features\n\n- 💾 [**State**](https://actorcore.org/concepts/state): Fast in-memory access with built-in durability.\n- 💻 [**Actions**](https://actorcore.org/concepts/actions): Callable functions for seamless client-server communication.\n- 📡 [**Events**](https://actorcore.org/concepts/events): Real-time event handling and broadcasting.\n- ⏰ [**Scheduling**](https://actorcore.org/concepts/schedule): Timed tasks and operations management.\n- 🌐 [**Connections \u0026 Multiplayer**](https://actorcore.org/concepts/connections): Manage connections and multiplayer interactions.\n- 🏷️ [**Metadata**](https://actorcore.org/concepts/metadata): Store and manage additional data attributes.\n\n### Everything you need to build realtime, stateful backends\n\nActorCore provides a solid foundation with the features you'd expect for modern apps.\n\n| Feature         | ActorCore | Durable Objects | Socket.io | Redis | AWS Lambda |\n| --------------- | --------- | --------------- | --------- | ----- | ---------- |\n| In-Memory State | ✓         | ✓               | ✓         | ✓     |            |\n| Persisted State | ✓         | ✓               |           |       |            |\n| Actions (RPC)   | ✓         | ✓               | ✓         |       | ✓          |\n| Events (Pub/Sub)| ✓         | -               | ✓         | ✓     |            |\n| Scheduling      | ✓         | -               |           |       | -          |\n| Edge Computing  | ✓ †       | ✓               |           |       | ✓          |\n| No Vendor Lock  | ✓         |                 | ✓         | ✓     |            |\n\n_\\- = requires significant boilerplate code or external service_\n\n_† = on supported platforms_\n\n## Quickstart\n\nRun this command:\n\n```\nnpx create-actor@latest\n```\n\n## Supported Platforms\n\n- [**Rivet**](https://actorcore.org/platforms/rivet)\n- [**Cloudflare Workers**](https://actorcore.org/platforms/cloudflare-workers)\n- [**Bun**](https://actorcore.org/platforms/bun)\n- [**Node.js**](https://actorcore.org/platforms/nodejs)\n\n## Overview\n\n**Create Actor**\n\n```typescript\nimport { actor, setup } from \"actor-core\";\n\nconst chatRoom = actor({\n  state: { messages: [] },\n  actions: {\n    // receive an action call from the client\n    sendMessage: (c, username: string, message: string) =\u003e {\n      // save message to persistent storage\n      c.state.messages.push({ username, message });\n\n      // broadcast message to all clients\n      c.broadcast(\"newMessage\", username, message);\n    },\n    // allow client to request message history\n    getMessages: (c) =\u003e c.state.messages\n  },\n});\n\nexport const app = setup({\n  actors: { chatRoom },\n  cors: { origin: \"http://localhost:8080\" }\n});\n\nexport type App = typeof app;\n```\n\n**Connect to Actor**\n\n```typescript\nimport { createClient } from \"actor-core/client\";\nimport type { App } from \"../src/index\";\n\nconst client = createClient\u003cApp\u003e(/* manager endpoint */);\n\n// connect to chat room\nconst chatRoom = await client.chatRoom.get({ channel: \"random\" });\n\n// listen for new messages\nchatRoom.on(\"newMessage\", (username: string, message: string) =\u003e\n  console.log(`Message from ${username}: ${message}`),\n);\n\n// send message to room\nawait chatRoom.sendMessage(\"william\", \"All the world's a stage.\");\n```\n\n## Community \u0026 Support\n\n- Join our [**Discord**](https://rivet.gg/discord)\n- Follow us on [**X**](https://x.com/rivet_gg)\n- Follow us on [**Bluesky**](https://bsky.app/profile/rivet.gg)\n- File bug reports in [**GitHub Issues**](https://github.com/rivet-gg/actor-core/issues)\n- Post questions \u0026 ideas in [**GitHub Discussions**](https://github.com/rivet-gg/actor-core/discussions)\n\n## License\n\nApache 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopengamebackend%2Fopengamebackend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopengamebackend%2Fopengamebackend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopengamebackend%2Fopengamebackend/lists"}