{"id":17535379,"url":"https://github.com/yznts/kyoto","last_synced_at":"2026-01-23T10:42:52.089Z","repository":{"id":37004569,"uuid":"351754723","full_name":"yznts/kyoto","owner":"yznts","description":"Asynchronous html components with Go","archived":false,"fork":false,"pushed_at":"2024-10-14T09:58:44.000Z","size":3213,"stargazers_count":652,"open_issues_count":5,"forks_count":27,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-01-15T07:33:25.283Z","etag":null,"topics":["components","framework","frontend","go","golang","htmx","htmx-go","ui","ui-components","view"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/yznts/kyoto/v3","language":"Go","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/yznts.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}},"created_at":"2021-03-26T11:10:27.000Z","updated_at":"2025-12-22T11:22:11.000Z","dependencies_parsed_at":"2023-01-17T12:34:29.022Z","dependency_job_id":"501d0455-71d9-49ae-9965-f5fa786f915a","html_url":"https://github.com/yznts/kyoto","commit_stats":{"total_commits":542,"total_committers":11,"mean_commits":49.27272727272727,"dds":0.08856088560885611,"last_synced_commit":"069f55a1676bc306b37a2c4a5f461efb7b0c4ed1"},"previous_names":["yuriizinets/go-ssc","yuriizinets/ssceng","yuriizinets/kyoto","yznts/kyoto","kyoto-framework/kyoto"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/yznts/kyoto","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yznts%2Fkyoto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yznts%2Fkyoto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yznts%2Fkyoto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yznts%2Fkyoto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yznts","download_url":"https://codeload.github.com/yznts/kyoto/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yznts%2Fkyoto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28689068,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: 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":["components","framework","frontend","go","golang","htmx","htmx-go","ui","ui-components","view"],"created_at":"2024-10-20T19:01:37.474Z","updated_at":"2026-01-23T10:42:52.070Z","avatar_url":"https://github.com/yznts.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\n    \u003cimg width=\"200\" src=\"logo.svg\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003ekyoto\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    Go server side frontend framework\n\u003c/p\u003e\n\n```go\nimport \"github.com/yznts/kyoto/v3\"\n```\n\nKyoto is a library for creating fast, server side frontend avoiding vanilla templating downsides.\n\nIt tries to address complexities in frontend domain like responsibility separation, components structure, asynchronous load and hassle\\-free dynamic layout updates. These issues are common for frontends written with Go.\n\nThe library provides you with primitives for pages and components creation, state and rendering management, dynamic layout updates \\(with client configuration\\), utility functions and asynchronous components out of the box. Still, it bundles with minimal dependencies and tries to utilize built\\-ins as much as possible.\n\nYou would probably want to opt out from this library in few cases, like, if you're not ready for drastic API changes between major version, you want to develop SPA/PWA and/or complex client\\-side logic, or you're just feeling OK with your current setup. Please, don't compare kyoto with a popular JS libraries like React, Vue or Svelte. I know you will have such a desire, but most likely you will be wrong. Use cases and underlying principles are just too different.\n\nIf you want to get an idea of what a typical static component would look like, here's some sample code. It's very ascetic and simplistic, as we don't want to overload you with implementation details. Markup is also not included here \\(it's just a well\\-known \\`html/template\\`\\).\n\n```go\n// State is declared separately from component itself\ntype ComponentState struct {\n\t// We're providing component with some abilities here\n\tcomponent.Universal // This component uses universal state, that can be (un)marshalled with both server and client\n\n\t// Actual component state is just struct fields\n\tFoo string\n\tBar string\n}\n\n// Component is a function, that returns configured state.\n// To be able to provide additional arguments to the component on initialization,\n// you have to wrap component with additional function that will handle args and return actual component.\n// Until then, you may keep component declaration as-is.\nfunc Component(ctx *component.Context) component.State {\n\t// Initialize state here.\n\t// As far as component.Universal provided in declaration,\n\t// we're implementing component.State interface.\n\tstate := \u0026ComponentState{}\n\t// Do whatever you want with a state\n\tstate.Foo = \"foo\"\n\tstate.Bar = \"bar\"\n\t// Done\n\treturn state\n}\n```\n\nFor details, please check project's website on https://kyoto.codes. Also, you may check the library index to explore available sub\\-packages and https://pkg.go.dev for Go'ish documentation style.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyznts%2Fkyoto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyznts%2Fkyoto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyznts%2Fkyoto/lists"}