{"id":14173965,"url":"https://github.com/radical-ui/objection","last_synced_at":"2026-01-14T17:54:14.579Z","repository":{"id":37733332,"uuid":"192413681","full_name":"radical-ui/objection","owner":"radical-ui","description":"Build server-first, highly-interactive, and beautiful web applications in Rust","archived":false,"fork":false,"pushed_at":"2025-09-22T15:50:00.000Z","size":5058,"stargazers_count":78,"open_issues_count":19,"forks_count":4,"subscribers_count":5,"default_branch":"next","last_synced_at":"2025-11-09T05:03:41.590Z","etag":null,"topics":["component","library","svelte","svelte-components","ui","uikit"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/radical-ui.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,"zenodo":null}},"created_at":"2019-06-17T20:24:59.000Z","updated_at":"2024-10-15T07:43:48.000Z","dependencies_parsed_at":"2024-01-06T01:11:34.850Z","dependency_job_id":"5f24d058-00b2-48ba-9c84-9c68b71cd1b3","html_url":"https://github.com/radical-ui/objection","commit_stats":{"total_commits":387,"total_committers":7,"mean_commits":"55.285714285714285","dds":0.4418604651162791,"last_synced_commit":"77cf1731e51e9bf8b93e26c7e7e35e79833e2513"},"previous_names":["radical-ui/svelte-toolbox","svelte-toolbox/svelte-toolbox","radical-ui/objection"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/radical-ui/objection","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radical-ui%2Fobjection","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radical-ui%2Fobjection/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radical-ui%2Fobjection/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radical-ui%2Fobjection/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/radical-ui","download_url":"https://codeload.github.com/radical-ui/objection/tar.gz/refs/heads/next","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radical-ui%2Fobjection/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28428984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T16:38:47.836Z","status":"ssl_error","status_checked_at":"2026-01-14T16:34:59.695Z","response_time":107,"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":["component","library","svelte","svelte-components","ui","uikit"],"created_at":"2024-08-18T01:00:58.543Z","updated_at":"2026-01-14T17:54:14.564Z","avatar_url":"https://github.com/radical-ui.png","language":"Rust","funding_links":[],"categories":["Svelte"],"sub_categories":[],"readme":"# Objection\n\nBuild server-first, highly-interactive, and beautiful web applications in Rust.\n\n...because the current web-based application development trends are worth objecting to.\n\n\u003e Due to an ongoing refactor, breaking changes are expected in the near future. See [#320](https://github.com/radical-ui/objection/pull/320) for current status.\n\n## Installation\n\nUnfortunately, [Deno](https://deno.com/) is a required runtime dependency. We aim to remove this dependency in the near future.\n\n```sh\n# MacOS\nbrew install radical-ui/tap/objection\n\n# Linux / Windows\ncargo install --git https://github.com/radical-ui/objection.git --bin objection\n```\n\n## Usage\n\nObjection works by generating a network bridge, allowing a series of typescript components (referred to as the runtime)\nto be managed by your backend (referred to as the engine). In practice, it feels like a merge between Phenix Liveview\nand HTMX.\n\nThe default runtime is located in the `runtime` folder, but you can create and use your own.\n\n### Rust Engine\n\nThe runtime can be started, and Rust bindings generated, by using the following command:\n\n```sh\nobjection --engine rust --bindings-path src/bindings.rs --engine-url http://localhost:8000/ui run\n```\n\nThe corresponding Rust engine can be written like so:\n\n```rust\n// src/main.rs\n\nuse axum::{extract::State, routing::post, Json, Router};\nuse bindings::Label;\nuse objection::{handle_request, RootUi, UiResponse};\nuse tokio::net::TcpListener;\nuse tower_http::cors::CorsLayer;\n\nmod bindings;\n\n#[tokio::main]\nasync fn main() {\n\tlet app = Router::new()\n\t\t.route(\n\t\t\t\"/ui\",\n\t\t\tpost(move |Json(body): Json\u003cValue\u003e| async move {\n\t\t\t\tJson(handle_request(body, |_, ui| async {\n\t\t\t\t\tui.set_root_ui(Label::new(\"Hello, world!\"));\n\t\t\t\t\tOk(ui.into_reponse())\n\t\t\t\t}).await)\n\t\t\t}),\n\t\t)\n\t\t.layer(CorsLayer::very_permissive());\n\n\tlet listener = TcpListener::bind((\"localhost\", 8000)).await.unwrap();\n\tprintln!(\"listening at http://localhost:8000\");\n\n\taxum::serve(listener, app).await.unwrap();\n}\n```\n\nThat should do it. After starting the engine, navigate to the app server that objection will have started at `http://localhost:3000`.\nBehind the scenes, the app will connect to the engine at `http://localhost:8000` over the generated network bridge.\n\n## Development\n\nYou'll want to make sure that you have development dependencies installed:\n\n- [Rust](https://www.rust-lang.org/tools/install)\n- [Runner](https://github.com/stylemistake/runner)\n- [WatchExec](https://github.com/watchexec/watchexec)\n- [Deno](https://deno.com/)\n- [Ripgrep](https://github.com/BurntSushi/ripgrep)\n- [sd](https://github.com/chmln/sd)\n- [Static Web Server](https://github.com/static-web-server/static-web-server)\n\nThen, start up the example project:\n\n```sh\nrunner dev\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradical-ui%2Fobjection","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fradical-ui%2Fobjection","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradical-ui%2Fobjection/lists"}