{"id":50521910,"url":"https://github.com/GianIac/numax","last_synced_at":"2026-06-19T23:00:37.736Z","repository":{"id":357622036,"uuid":"1096719269","full_name":"GianIac/numax","owner":"GianIac","description":"The beginning of a new runtime model","archived":false,"fork":false,"pushed_at":"2026-06-16T10:34:14.000Z","size":1019,"stargazers_count":86,"open_issues_count":12,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-06-16T12:22:58.930Z","etag":null,"topics":["crdt","distributed-systems","edge-computing","gossip-protocol","key-value-store","local-first","runtime","rust","sled","wasm","wasm-runtime","wasmtime","webassembly"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/GianIac.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-14T21:03:38.000Z","updated_at":"2026-06-16T10:34:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/GianIac/numax","commit_stats":null,"previous_names":["gianiac/numax"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/GianIac/numax","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianIac%2Fnumax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianIac%2Fnumax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianIac%2Fnumax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianIac%2Fnumax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GianIac","download_url":"https://codeload.github.com/GianIac/numax/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GianIac%2Fnumax/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34550858,"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-19T02:00:06.005Z","response_time":61,"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":["crdt","distributed-systems","edge-computing","gossip-protocol","key-value-store","local-first","runtime","rust","sled","wasm","wasm-runtime","wasmtime","webassembly"],"created_at":"2026-06-03T05:00:34.606Z","updated_at":"2026-06-19T23:00:37.731Z","avatar_url":"https://github.com/GianIac.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"800\" alt=\"NUMAX\" src=\"https://github.com/user-attachments/assets/c628c233-8523-4abd-a57c-a15e32c6947a\" /\u003e\n\u003c/p\u003e\n\n# numax\n\n[![Docs](https://img.shields.io/badge/docs-site-blue)](https://gianiac.github.io/numax/)\n[![Whitepaper](https://img.shields.io/badge/docs-whitepaper-blue)](https://gianiac.github.io/numax/whitepaper/)\n[![Roadmap](https://img.shields.io/badge/project-roadmap-orange)](https://gianiac.github.io/numax/roadmap/)\n\nA portable runtime for distributed apps. Written in Rust.\n\nThree things, and only three:\n\n1. Runs WebAssembly modules in an isolated sandbox.\n2. Has a local embedded key/value datastore, state lives next to the code.\n3. Syncs state across nodes with CRDTs and gossip.\n\nYou write a WASM module. numax runs it. The state is there. Sync just happens.\n\n\u003e **Status:** `v0.1.0` - first stable Numax release line for controlled, non-critical workloads.\n\u003e It works, it's tested, and the remaining limits are documented. See the [`Roadmap`](https://gianiac.github.io/numax/roadmap/).\n\n---\n\n## Why\n\nBuilding distributed software today is heavier than the problem it's trying to solve.\nContainers, orchestrators, remote databases, ad-hoc sync layers, three different toolchains depending on where the code runs.\n\nnumax tries a different path: keep the runtime tiny, keep the state local, let CRDTs handle convergence.\nThe hard parts of distributed systems don't disappear, but you stop paying for the ones you didn't actually need.\n\n---\n\n## Quickstart\n\n[`Quickstart in 5 Minutes`](https://gianiac.github.io/numax/getting-started/quickstart-5-min/).\n\nFor now, build from source:\n\n```bash\ngit clone https://github.com/GianIac/numax\ncd numax\ncargo build --release\n```\n\nRun the `distributed_counter` example on two nodes:\n\n```bash\n# Node A\nnx run distributed_counter.wasm \\\n    --listen 0.0.0.0:9000 \\\n    --datastore-path ./data-a -v\n\n# Node B\nnx run distributed_counter.wasm \\\n    --listen 0.0.0.0:9001 \\\n    --peer 127.0.0.1:9000 \\\n    --datastore-path ./data-b -v\n```\n\nThe two nodes find each other, sync, and converge. You don't have to do anything else.\n\nYou can also move the node settings into TOML files and keep the command line\nfocused on run-specific options:\n\n```toml\n# node-a.toml\n[storage]\ndatastore_path = \"./data-a\"\n\n[network]\nlisten = \"0.0.0.0:9000\"\npeers = [\"127.0.0.1:9001\"]\nserialization_format = \"bincode\"\n\n[discovery]\nmode = \"static\"\n```\n\n```bash\nnx config validate --config node-a.toml\nnx config show --config node-a.toml --effective\n\nnx run distributed_counter.wasm \\\n    --config node-a.toml \\\n    --settle-for 5s \\\n    --print-gcounter counter:visits\n```\n\nRuntime precedence is explicit: CLI flags override `NX_*` environment\nvariables, environment variables override the TOML file, and the file overrides\nruntime defaults. The distributed examples below include full two-node TOML\nsetups.\n\n---\n\n## Writing a guest module\n\n[`Your first module`](https://gianiac.github.io/numax/getting-started/your-first-module/)\n\nA minimal module using the local datastore:\n\n```rust\nuse nx_sdk::{db, log};\n\n#[no_mangle]\npub extern \"C\" fn run() {\n    db::set(\"hello\", b\"numax\").unwrap();\n    log(\"done.\");\n}\n```\n\nOr with a replicated CRDT counter:\n\n```rust\nuse nx_sdk::{log, crdt::gcounter};\n\n#[no_mangle]\npub extern \"C\" fn run() {\n    gcounter::inc(\"visits\", 1).unwrap();\n    let v = gcounter::value(\"visits\").unwrap();\n    log(\u0026format!(\"visits: {}\", v));\n}\n```\n\nSame module, any node. State stays local. Sync happens through the runtime.\n\n---\n\n## Learn more\n\n- [`Documentation`](https://gianiac.github.io/numax/) - guides, concepts and reference pages.\n- [`Whitepaper`](https://gianiac.github.io/numax/whitepaper/) - the vision, the architecture, the principles.\n- [`Roadmap`](https://gianiac.github.io/numax/roadmap/) - where we are, where we're going, what's still missing.\n- [`Host API`](https://gianiac.github.io/numax/reference/host-api/) - the host API available to WASM modules.\n- [`examples/distributed_inventory`](./examples/distributed_inventory) - replicated PNCounter inventory.\n- [`examples/distributed_status`](./examples/distributed_status) - replicated LWW-Register status.\n- [`examples/distributed_tags`](./examples/distributed_tags) - replicated ORSet tags.\n- [`examples/distributed_settings`](./examples/distributed_settings) - replicated LWW-Map settings.\n- [`examples/distributed_comments`](./examples/distributed_comments) - replicated RGA comments.\n\n---\n\n## A small ask\n\nIf numax interests you - if you think the idea is worth something - drop a star !\n\nRight now it's pretty much the only signal I have to understand whether this is worth pushing further.\n\n---\n\n## Try it. Break it. Tell me.\n\nnumax is in its first stable release line. It is usable, but still early: focused feedback matters a lot.\n\n- Clone it, run the examples, see if the two nodes really converge on your machine.\n- Write a tiny module of your own and try to break the sandbox or the sync.\n- If something behaves in a way you didn't expect - open an issue. Even a small one. Especially a small one.\n- If you have an opinion on the design, the host API, the CRDT model - open an issue for that too.\n\nThere's no community to pretend already exists. There's a project, an idea, and a door that's open.\nIf you walk through it now, you're early. That's the best moment to leave a mark.\n\nps: If you'd like to help, take a look at [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n- GianIac\n\n---\n\n**License:** Apache 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGianIac%2Fnumax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGianIac%2Fnumax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGianIac%2Fnumax/lists"}