[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11352":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":12,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":15,"starSnapshotCount":15,"syncStatus":13,"lastSyncTime":32,"discoverSource":33},11352,"beava","beava-dev\u002Fbeava","beava-dev","Real-time decision features without streaming infra. Turn live events into product reflexes — no Kafka, no Flink, no feature store.",null,"Rust",133,10,2,26,0,1,44.62,"Apache License 2.0",false,"main",[22,23,24,25,26,27,28],"analytics","feature-store","fraud-detection","python","real-time","rust","streaming","2026-06-12 04:00:54","\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fbeava.dev\">\n    \u003Cimg src=\"beava-design-system\u002Fproject\u002Fassets\u002Freadme-banner.png\" alt=\"beava\" width=\"100%\"\u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbeava-dev\u002Fbeava\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fbeava-dev\u002Fbeava\u002Fci.yml?branch=main&label=build\" alt=\"build\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache--2.0-7ca84a\" alt=\"license Apache-2.0\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fbeava.dev\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fsite-beava.dev-3a6a8a\" alt=\"site beava.dev\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fbeava.dev\u002Fdocs\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocs-beava.dev%2Fdocs-3a6a8a\" alt=\"docs\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FJ5trwbCYpS\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fchat-discord-7ca84a\" alt=\"discord\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbeava-dev\u002Fbeava\u002Freleases\u002Flatest\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fbeava-dev\u002Fbeava?include_prereleases&label=release&color=d97757\" alt=\"release\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Frender.com\u002Fdeploy?repo=https:\u002F\u002Fgithub.com\u002Fbeava-dev\u002Fbeava\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdeploy-Render-46e3b7?logo=render&logoColor=white\" alt=\"Deploy to Render\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Frailway.com\u002Fdeploy\u002Fbeava?referralCode=xkfMVJ&amp;utm_medium=integration&amp;utm_source=template&amp;utm_campaign=generic\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdeploy-Railway-0b0d0e?logo=railway&logoColor=white\" alt=\"Deploy on Railway\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n**Give your product live reflexes.**\n\nbeava turns live events into fresh decision features, so your app can pause runaway agents, reorder marketplaces, and rescue stuck users — no Kafka, no Flink, no feature store.\n\nPush events over HTTP or TCP. The very next read reflects them. No batch lag, no broker, no stream worker in between.\n\n```python\n# agent_safety.py — live reflexes for an agent session.\n\nimport beava as bv\n\n@bv.event\nclass AgentStep:\n    session_id: str\n    agent_id: str\n    action: str       # \"search\" | \"browse\" | \"tool_call\" | \"model_call\"\n    tool: str         # \"browser\" | \"shell_exec\" | \"http_get\" | \"code_run\"\n    ok: bool\n    risky: bool\n    tokens: int\n    latency_ms: int\n\n@bv.table(key=\"session_id\")\ndef SessionReflexes(e: AgentStep):\n    return e.group_by(\"session_id\").agg(\n        failure_rate_5m  = bv.ratio(window=\"5m\", where=~bv.col(\"ok\")),\n        top_tool_10m     = bv.top_k(\"tool\", k=1, window=\"10m\"),\n        unique_tools_10m = bv.n_unique(\"tool\", window=\"10m\"),\n        token_burn_1m    = bv.sum(\"tokens\", window=\"1m\"),\n        p95_latency_5m   = bv.quantile(\"latency_ms\", q=0.95, window=\"5m\"),\n        risky_streak     = bv.streak(where=bv.col(\"risky\")),\n        last_action      = bv.last(\"action\"),\n    )\n\napp = bv.App(\"http:\u002F\u002Flocalhost:8080\").register(AgentStep, SessionReflexes)\n\napp.push(\"AgentStep\", {\n    \"session_id\": \"session_44\",\n    \"agent_id\":   \"agent_91\",\n    \"action\":     \"tool_call\",\n    \"tool\":       \"browser\",\n    \"ok\":         False,\n    \"risky\":      True,\n    \"tokens\":     4200,\n    \"latency_ms\": 830,\n})\n\nfeatures = app.get(\"SessionReflexes\", \"session_44\")\n\nif features[\"failure_rate_5m\"] > 0.8:\n    lock_tool_access()\nif features[\"risky_streak\"] >= 2:\n    require_human_approval()\nif features[\"token_burn_1m\"] > 100_000:\n    switch_to_cheaper_model()\n```\n\nThat is the reflex loop: **event in → feature recomputed → decision served.** `app.push` writes the event straight to beava. The next `app.get` reflects it. Your product can act before the next request, next tool call, or next screen.\n\n## Why beava\n\nMost products already have events. The hard part is turning those events into fresh decision state.\n\nWithout beava, this usually becomes a pile of Redis counters, cron jobs, queue workers, Postgres triggers, stream processors, and drift-prone glue code.\n\nbeava gives you one declarative feature layer:\n\n- define events in Python\n- declare per-entity feature tables\n- push live events\n- read fresh features by key\n- make the product act immediately\n\nNo Kafka. No Flink. No feature store. One Rust binary.\n\n## Three pipelines. Six live signals.\n\n| Pipeline | Live signal | Product reflex |\n|---|---|---|\n| **Agent runtime control** | `session_44.failure_rate_5m = 83%` | lock tool access |\n| **Agent runtime control** | `session_44.risky_streak = 2` | require human approval |\n| **Marketplace reranking** | `sku_882.cart_velocity_5m = 91` | boost trending item |\n| **Marketplace reranking** | `user_1382.avg_view_price_30m = $211` | sort toward premium picks |\n| **SaaS growth rescue** | `user_1271.top_error_topic_10m = \"auth\"` | launch setup rescue |\n| **SaaS growth rescue** | `org_acme.limit_hits_24h = 12` | show team upgrade path |\n\nThese are not dashboards. They are decision features your app can read while the user, agent, or shopper is still active.\n\n## What you can build\n\n**Agent runtime control.** Catch agent loops before the next tool call. Track repeated actions, risky tools, failure rates, token burn, latency spikes, and approval triggers per session or agent. Pause loops, lock risky tools, require human approval, switch to a cheaper model, route around a slow provider.\n\n**Marketplace reranking.** Reorder the marketplace while shoppers are still shopping. Track live price intent, cart velocity, product momentum, category spikes, and recommendation fatigue. Boost fast-moving SKUs, sort toward premium picks, show affordable alternatives, diversify stale recommendations, promote matching inventory.\n\n**SaaS growth rescue.** Rescue stuck users before the session ends. Track error loops, docs spirals, setup attempts, usage limits, invite momentum, and expansion signals. Launch setup rescue, open guided onboarding, escalate to support, show an upgrade path, route expansion-ready accounts to sales.\n\n## 60-second quickstart\n\nPick the install path that matches your environment. All three deliver the same `beava` binary.\n\n```bash\n# pip — installs the Python SDK and bundled Rust server binary\npip install beava\n\n# brew — macOS and Linuxbrew\nbrew install beava-dev\u002Fbeava\u002Fbeava\n\n# docker — zero host dependencies\ndocker run -p 8080:8080 -p 8081:8081 beavadev\u002Fbeava:latest\n```\n\nStart the server:\n\n```bash\nbeava --data-dir .\u002F.beava\u002F\n```\n\nOr run the in-process demo:\n\n```bash\nbeava quickstart\n```\n\nFull walkthrough: [beava.dev\u002Fdocs](https:\u002F\u002Fbeava.dev\u002Fdocs).\n\n## The primitives\n\nbeava has three core primitives:\n\n```python\n@bv.event\nclass ProductEvent:\n    ...\n\n@bv.table(key=\"user_id\")\ndef UserReflexes(e: ProductEvent):\n    return e.group_by(\"user_id\").agg(...)\n\napp.get(\"UserReflexes\", \"user_123\")\n```\n\nThe Python SDK includes operators for counters, windows, ratios, top-k, recency, sketches, decay, velocity, buffers, and geo signals:\n\n```python\nbv.count(window=\"10m\")\nbv.ratio(window=\"5m\", where=...)\nbv.top_k(\"tool\", k=3, window=\"10m\")\nbv.n_unique(\"sku\", window=\"30m\")\nbv.mean(\"price\", window=\"30m\")\nbv.quantile(\"latency_ms\", q=0.95, window=\"5m\")\nbv.streak(where=...)\nbv.time_since(where=...)\nbv.decayed_sum(\"tokens\", half_life=\"10m\")\n```\n\n## Performance and durability\n\nbeava is built for hot-path feature reads.\n\n- Push and read are inline: the read after a push reflects that push.\n- HTTP\u002FJSON is available for debugging and integration.\n- Framed TCP is available for the sub-millisecond hot path.\n- WAL on every push plus periodic snapshots.\n- Recovery rebuilds state from disk on boot.\n- In-memory state only; size your box for your entity count and feature pack.\n\n## When not to use beava\n\nbeava is intentionally small and direct. It is not a replacement for every streaming system. Do not use beava if:\n\n- you need strict event-time semantics with watermarks\n- you need cross-process sharding inside a single logical cluster\n- your product can tolerate 5–30 seconds of feature staleness\n- you want a managed service today\n- you need long-term analytical storage or SQL exploration\n\nUse beava when the product needs to act now.\n\n## Wire surface\n\nbeava binds three listeners:\n\n- **HTTP\u002FJSON on `127.0.0.1:8080`** — curl-compatible debugging path.\n- **Framed TCP on `127.0.0.1:8081`** — sub-millisecond fast-path. JSON or msgpack content.\n- **Admin sidecar on `127.0.0.1:8090`** — `\u002Fhealth`, `\u002Fready`, `\u002Fmetrics`, `\u002Fregistry`.\n\n```bash\ncurl -X POST localhost:8080\u002Fregister -d '{...schema...}'\n\ncurl -X POST localhost:8080\u002Fpush -d '{\n  \"event\": \"AgentStep\",\n  \"data\": {\n    \"session_id\": \"session_44\",\n    \"agent_id\":   \"agent_91\",\n    \"action\":     \"tool_call\",\n    \"tool\":       \"browser\",\n    \"ok\":         false,\n    \"risky\":      true,\n    \"tokens\":     4200,\n    \"latency_ms\": 830\n  }\n}'\n\ncurl -X POST localhost:8080\u002Fget -d '{\n  \"table\": \"SessionReflexes\",\n  \"key\":   \"session_44\"\n}'\n```\n\n## Learn more\n\n- [beava.dev](https:\u002F\u002Fbeava.dev) — site, docs, guides, and roadmap\n- [examples\u002F](examples\u002F) — vertical examples in Python\n- [crates\u002Fbeava-bench\u002FREADME.md](crates\u002Fbeava-bench\u002FREADME.md) — benchmark harness\n\n## Community and open source\n\nThe open-source project is the real system: something you can clone, run, test, operate, and trust as your use case grows. A managed beava service may remove operational burden later, but the open-source binary is the core product. Apache-2.0. No open-core lock-in.\n\n- **Discussions:** [github.com\u002Fbeava-dev\u002Fbeava\u002Fdiscussions](https:\u002F\u002Fgithub.com\u002Fbeava-dev\u002Fbeava\u002Fdiscussions)\n- **Discord:** [discord.gg\u002FJ5trwbCYpS](https:\u002F\u002Fdiscord.gg\u002FJ5trwbCYpS)\n- **Security:** private disclosure to `hoang@beava.dev`\n\n[Apache 2.0](LICENSE) · [CHANGELOG](CHANGELOG.md) · [SECURITY](SECURITY.md) · [CONTRIBUTING](CONTRIBUTING.md) · [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md)\n","beava 是一个用于欺诈检测、广告技术和行为分析的实时特征服务器。它使用 Rust 语言开发，能够将实时事件转换为决策特征，支持通过 HTTP 或 TCP 推送事件，并在下一个读取操作中立即反映这些事件的变化，无需批处理延迟或中间流处理组件。其核心功能包括实时聚合、窗口计算和基于时间的统计分析等。beava 适用于需要快速响应用户行为变化的应用场景，如在线交易风险控制、个性化广告投放及用户体验优化等领域。","2026-06-11 03:31:42","CREATED_QUERY"]