{"id":20235058,"url":"https://github.com/paranatural/turntable","last_synced_at":"2025-04-10T18:52:14.804Z","repository":{"id":57113249,"uuid":"237996991","full_name":"paranatural/turntable","owner":"paranatural","description":"Framework-agnostic flexible SPA router","archived":false,"fork":false,"pushed_at":"2023-11-05T03:13:44.000Z","size":905,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T20:31:44.741Z","etag":null,"topics":["paranatural","react","router","routing","spa","turntable","vanilla-javascript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/paranatural.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":"contributing.md","funding":null,"license":"license.md","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}},"created_at":"2020-02-03T15:26:22.000Z","updated_at":"2023-11-03T23:56:14.000Z","dependencies_parsed_at":"2022-08-22T02:30:46.588Z","dependency_job_id":"61107951-4abc-4f86-8af1-087b84bb8af8","html_url":"https://github.com/paranatural/turntable","commit_stats":{"total_commits":38,"total_committers":1,"mean_commits":38.0,"dds":0.0,"last_synced_commit":"4eb692aeb036ccfcef51d9a7eb82cb45043d6100"},"previous_names":["paranatural/turntable"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paranatural%2Fturntable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paranatural%2Fturntable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paranatural%2Fturntable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paranatural%2Fturntable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paranatural","download_url":"https://codeload.github.com/paranatural/turntable/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248274576,"owners_count":21076419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["paranatural","react","router","routing","spa","turntable","vanilla-javascript"],"created_at":"2024-11-14T08:14:27.659Z","updated_at":"2025-04-10T18:52:14.767Z","avatar_url":"https://github.com/paranatural.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align='center'\u003e\n    \u003cpicture\u003e\n        \u003csource media='(prefers-color-scheme: dark)' srcset='./.github/turntable-logo-light-160.png' /\u003e\n        \u003csource media='(prefers-color-scheme: light)' srcset='./.github/turntable-logo-dark-160.png' /\u003e\n        \u003cimg src='./.github/turntable-logo-dark-160.png' /\u003e\n    \u003c/picture\u003e\n\u003c/div\u003e\n\n# ⬡ Turntable\n\nFramework-agnostic flexible SPA router\n\n# ⬡ Motivation/Promise\n\nThere are plenty of client-side routing libraries, but all of them aren't really lightweight and do not support middlewares or guards out-of-the-box\n\n# ⬡ Features\n\n- Expandable with [middlewares](./docs/middleware.md)\n- Written in [TypeScript](https://github.com/microsoft/TypeScript)\n- Batteries included (in a separate [package](./packages/stdlib), but it's officially supported)\n- Really lightweight [(\u003c3kb min+gzip)](https://bundlephobia.com/result?p=@paranatural/turntable)\n\n# ⬡ Installation\n\n```shell\nnpm i @paranatural/turntable @paranatural/turntable-stdlib @paranatural/turntable-react\n```\n\n```shell\nyarn add @paranatural/turntable @paranatural/turntable-stdlib @paranatural/turntable-react\n```\n\n```shell\npnpm add @paranatural/turntable @paranatural/turntable-stdlib @paranatural/turntable-react\n```\n\n# ⬡ Usage/Utilizing/Enjoyment\n\n```typescript jsx\nimport React from 'react'\nimport ReactDom from 'react-dom'\nimport { Ghostship } from '@ghostship/core'\nimport { GhostshipComponent } from '@ghostship/react'\n\nimport { HomePage, PostPage, NotFoundPage } from './components/pages'\n\nconst ghostship = new Ghostship(\n  // routes tree\n  [{\n    path: '/',\n    component: HomePage,\n  }, {\n    path: '/post/:slug',\n    components: PostPage,\n  }],\n  // options\n  {\n    trailingSlash: true,\n    notFound: NotFoundPage\n  }\n)\n\nReactDom.render(\n  \u003cGhostshipComponent instance={ghostship} /\u003e,\n  document.getElementById('react')\n)\n```\n\n# ⬡ API\n\n\n\n# ⬡ Contribution\n\nFeel free to open an issue/discussion with request/report, but ensure you read/follow [Contributor Covenant Code of Conduct](docs/5-development/code-of-conduct.md)\n\n# ⬡ Development/History\n\n[Changelog/Past/Versions](./docs/changelog.md)\n\n[Roadmap/Future](roadmap.md)\n\n# ⬡ Legal info\n\nProject licensed under [MIT License](license.md). [What it means](https://choosealicense.com/licenses/mit/)\n\n# ⬡ Brand/Look\n\nProject name, logo, visual design and writing style heavily inspired by [Control game](https://www.remedygames.com/games/control/) (made by [Remedy Entertainment](https://www.remedygames.com/))\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparanatural%2Fturntable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparanatural%2Fturntable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparanatural%2Fturntable/lists"}