{"id":47689520,"url":"https://github.com/koppajs/koppajs-core","last_synced_at":"2026-04-02T15:19:36.962Z","repository":{"id":341363923,"uuid":"946925941","full_name":"koppajs/koppajs-core","owner":"koppajs","description":"Minimal frontend framework with .kpa components, proxy reactivity, and no hidden layers. Built for clarity, speed, and full control.","archived":false,"fork":false,"pushed_at":"2026-03-26T15:12:02.000Z","size":891,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-27T05:52:36.291Z","etag":null,"topics":["custom-components","direct-dom","fast","frontend","koppa","koppajs","lightweight","modular","no-virtual-dom","performance","pragmatic","reactive","single-file-components","ui-framework","vite","web-development"],"latest_commit_sha":null,"homepage":"http://koppajs.org","language":"TypeScript","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/koppajs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","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-03-11T22:25:40.000Z","updated_at":"2026-03-26T14:59:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/koppajs/koppajs-core","commit_stats":null,"previous_names":["koppajs/koppajs-core"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/koppajs/koppajs-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koppajs%2Fkoppajs-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koppajs%2Fkoppajs-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koppajs%2Fkoppajs-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koppajs%2Fkoppajs-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koppajs","download_url":"https://codeload.github.com/koppajs/koppajs-core/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koppajs%2Fkoppajs-core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31308933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"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":["custom-components","direct-dom","fast","frontend","koppa","koppajs","lightweight","modular","no-virtual-dom","performance","pragmatic","reactive","single-file-components","ui-framework","vite","web-development"],"created_at":"2026-04-02T15:19:36.080Z","updated_at":"2026-04-02T15:19:36.949Z","avatar_url":"https://github.com/koppajs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca id=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://public-assets-1b57ca06-687a-4142-a525-0635f7649a5c.s3.eu-central-1.amazonaws.com/koppajs/koppajs-logo-text-900x226.png\" width=\"500\" alt=\"KoppaJS Logo\"\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@koppajs/koppajs-core\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@koppajs/koppajs-core?style=flat-square\" alt=\"npm version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/koppajs/koppajs-core/actions\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/koppajs/koppajs-core/ci.yml?branch=main\u0026style=flat-square\" alt=\"CI Status\"\u003e\u003c/a\u003e\n  \u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003e@koppajs/koppajs-core\u003c/h1\u003e\n  \u003ch3 align=\"center\"\u003eCore runtime and component model for KoppaJS\u003c/h3\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ci\u003eReactive components, explicit lifecycle seams, and a small runtime without virtual DOM overhead.\u003c/i\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/koppajs/koppajs-documentation\"\u003eDocumentation\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/koppajs/create-koppajs\"\u003ecreate-koppajs\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/koppajs/koppajs-vite-plugin\"\u003eVite Plugin\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/koppajs/koppajs-router\"\u003eRouter\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/koppajs/koppajs-core/issues\"\u003eIssues\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\u003ca href=\"#what-is-koppajs-core\"\u003eWhat is KoppaJS Core?\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#requirements\"\u003eRequirements\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#runtime-model\"\u003eRuntime Model\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#architecture-governance\"\u003eArchitecture \u0026 Governance\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#community-contribution\"\u003eCommunity \u0026 Contribution\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n---\n\n## What is KoppaJS Core?\n\n`@koppajs/koppajs-core` is the runtime package at the center of the KoppaJS\nstack.\n\nIt owns the public bootstrap surface, component registration, DOM runtime\nsetup, lifecycle coordination, and the stable contracts that other KoppaJS\npackages build on top of.\n\nIn practice that means:\n\n- applications register components through `Core.take(...)`\n- the runtime boots once through `Core()`\n- the Vite plugin handles `.kpa` transformation, while core stays focused on\n  runtime behavior\n\n---\n\n## Features\n\n- component registration via the stable `Core.take(...)` API\n- one-time runtime bootstrap through `Core()`\n- reactive component model with explicit methods, refs, props, and lifecycle\n  hooks\n- modular extension surface for plugins and modules\n- no virtual DOM dependency\n- published package with ESM, CommonJS, and TypeScript types\n\n---\n\n## Installation\n\n```bash\npnpm add @koppajs/koppajs-core\npnpm add -D @koppajs/koppajs-vite-plugin vite typescript\n```\n\n```bash\nnpm install @koppajs/koppajs-core\nnpm install -D @koppajs/koppajs-vite-plugin vite typescript\n```\n\nThe fastest path for most users is still the official starter:\n\n```bash\npnpm create koppajs my-app\n```\n\n---\n\n## Requirements\n\nFor package consumers:\n\n- a browser-based application environment\n- a build pipeline that can consume KoppaJS components, typically Vite plus\n  `@koppajs/koppajs-vite-plugin`\n- package installation supports Node.js \u003e= 22\n\nFor local repository work:\n\n- Node.js \u003e= 22\n- pnpm \u003e= 10.24.0\n\n---\n\n## Getting Started\n\nRecommended bootstrap path:\n\n```bash\npnpm create koppajs my-app\ncd my-app\npnpm install\npnpm dev\n```\n\nManual registration with the public core API:\n\n```ts\nimport { Core } from '@koppajs/koppajs-core'\n\nimport appView from './app-view.kpa'\nimport counterComponent from './counter-component.kpa'\n\nCore.take(appView, 'app-view')\nCore.take(counterComponent, 'counter-component')\nCore()\n```\n\nThis mirrors the bootstrap used in the official example project.\n\n---\n\n## Runtime Model\n\nKoppaJS Core deliberately keeps its top-level contract small:\n\n- `Core.take(componentSource, name)` registers a component definition\n- `Core.take(pluginOrModule)` installs an extension definition\n- `Core()` initializes the DOM environment and flushes queued registrations\n- repeated `Core()` calls are safe and idempotent\n\nThe runtime does not own `.kpa` parsing. That stays in\n`@koppajs/koppajs-vite-plugin`, which emits the component source objects that\ncore consumes at runtime.\n\n---\n\n## Roadmap\n\n- continue hardening the stable runtime contracts\n- keep the public bootstrap surface small and explicit\n- deepen runtime specs and package-level governance documents\n- support ecosystem packages such as the router, component library, and editor\n  tooling without growing hidden runtime coupling\n\n---\n\n## Architecture \u0026 Governance\n\nProject intent, contributor rules, and documentation contracts live in the local repo meta layer:\n\n- [AI_CONSTITUTION.md](./AI_CONSTITUTION.md)\n- [ARCHITECTURE.md](./ARCHITECTURE.md)\n- [DECISION_HIERARCHY.md](./DECISION_HIERARCHY.md)\n- [DEVELOPMENT_RULES.md](./DEVELOPMENT_RULES.md)\n- [TESTING_STRATEGY.md](./TESTING_STRATEGY.md)\n- [RELEASE.md](./RELEASE.md)\n- [ROADMAP.md](./ROADMAP.md)\n- [CHANGELOG.md](./CHANGELOG.md)\n- [CONTRIBUTING.md](./CONTRIBUTING.md)\n- [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)\n- [docs/specs/README.md](./docs/specs/README.md)\n- [docs/specs/repository-documentation-contract.md](./docs/specs/repository-documentation-contract.md)\n- [docs/meta/README.md](./docs/meta/README.md)\n\nThe file-shape contract for `README.md`, `CHANGELOG.md`, `CODE_OF_CONDUCT.md`, and `CONTRIBUTING.md` is defined in [docs/specs/repository-documentation-contract.md](./docs/specs/repository-documentation-contract.md).\n\nRun the local document guard before committing:\n\n```bash\npnpm run check:docs\n```\n\n---\n\n## Community \u0026 Contribution\n\nIssues and pull requests are welcome:\n\nhttps://github.com/koppajs/koppajs-core/issues\n\nContributor workflow details live in [CONTRIBUTING.md](./CONTRIBUTING.md).\n\nCommunity expectations live in [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md).\n\n---\n\n## License\n\nApache License 2.0 — © 2026 KoppaJS, Bastian Bensch\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoppajs%2Fkoppajs-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoppajs%2Fkoppajs-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoppajs%2Fkoppajs-core/lists"}