{"id":50960664,"url":"https://github.com/thefrontside/freedom","last_synced_at":"2026-06-18T13:32:43.274Z","repository":{"id":351877418,"uuid":"1209707385","full_name":"thefrontside/freedom","owner":"thefrontside","description":"Freedom (free DOM) — a general-purpose abstract component tree built on Effection structured concurrency","archived":false,"fork":false,"pushed_at":"2026-04-28T01:16:09.000Z","size":125,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-15T03:46:59.125Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/thefrontside.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-13T17:45:12.000Z","updated_at":"2026-04-28T01:08:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/thefrontside/freedom","commit_stats":null,"previous_names":["cowboyd/freedom","thefrontside/freedom"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thefrontside/freedom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Ffreedom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Ffreedom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Ffreedom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Ffreedom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thefrontside","download_url":"https://codeload.github.com/thefrontside/freedom/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Ffreedom/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34493361,"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-18T02:00:06.871Z","response_time":128,"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":[],"created_at":"2026-06-18T13:32:41.982Z","updated_at":"2026-06-18T13:32:43.265Z","avatar_url":"https://github.com/thefrontside.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Freedom\n\nA general-purpose abstract component tree built on\n[Effection](https://frontside.com/effection) structured concurrency. Freedom\n(\"free DOM\") maintains a tree of long-lived, stateful component nodes where each\nnode is an Effection resource with a scope, a JSON-like property bag, and\nordered children. It is designed to accept a firehose of events of any type\nthrough a single synchronous `dispatch()` entry point, and emit change\nnotifications on an output stream for renderers to consume.\n\n## Specs\n\n- [Freedom Specification](specs/freedom-spec.md)\n- [Freedom Conformance Test Plan](specs/freedom-test-plan.md)\n\n## Extension Modules\n\nFreedom is extensible through extension modules — operations installed by the\nroot component that add capabilities to the tree using Freedom's context APIs.\nExtensions use middleware interception, scoped evaluation, and the property bag\nto layer behavior without modifying the core.\n\n### Focus\n\nThe [Focus extension](specs/freedom-focus-spec.md) tracks which node in the tree\nis currently receiving input. Focus state is observable as a regular node\nproperty (`node.props.focused`), and the focus chain is derived from the tree by\ndepth-first traversal. See the [research summary](research/focus.md) for\nbackground on focus management across UI paradigms.\n\nInstall focus in the root component:\n\n```ts\nfunction* app(): Operation\u003cvoid\u003e {\n  yield* useFocus();\n  // ... rest of app\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthefrontside%2Ffreedom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthefrontside%2Ffreedom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthefrontside%2Ffreedom/lists"}