{"id":13810496,"url":"https://github.com/bryanmylee/svelte-headless-table","last_synced_at":"2025-05-14T14:10:05.988Z","repository":{"id":37357438,"uuid":"480740776","full_name":"bryanmylee/svelte-headless-table","owner":"bryanmylee","description":"Unopinionated and extensible data tables for Svelte","archived":false,"fork":false,"pushed_at":"2024-10-28T12:33:49.000Z","size":2278,"stargazers_count":494,"open_issues_count":39,"forks_count":33,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-05-11T00:39:26.404Z","etag":null,"topics":["datagrid","datatable","expanding","filtering","flattening","grouping","headless","hiding","ordering","plugin","resizing","selecting","sorting","svelte","sveltejs","table"],"latest_commit_sha":null,"homepage":"https://svelte-headless-table.bryanmylee.com/","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/bryanmylee.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}},"created_at":"2022-04-12T09:30:33.000Z","updated_at":"2025-04-26T14:00:38.000Z","dependencies_parsed_at":"2024-02-22T11:27:54.275Z","dependency_job_id":"67337bc3-068b-480f-89fc-082d82679c1a","html_url":"https://github.com/bryanmylee/svelte-headless-table","commit_stats":{"total_commits":661,"total_committers":10,"mean_commits":66.1,"dds":"0.22692889561270801","last_synced_commit":"5fefb332c5d5f3532cdf5f2f8211501ee9c32e4b"},"previous_names":[],"tags_count":71,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryanmylee%2Fsvelte-headless-table","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryanmylee%2Fsvelte-headless-table/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryanmylee%2Fsvelte-headless-table/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryanmylee%2Fsvelte-headless-table/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bryanmylee","download_url":"https://codeload.github.com/bryanmylee/svelte-headless-table/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254160555,"owners_count":22024571,"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":["datagrid","datatable","expanding","filtering","flattening","grouping","headless","hiding","ordering","plugin","resizing","selecting","sorting","svelte","sveltejs","table"],"created_at":"2024-08-04T02:00:56.363Z","updated_at":"2025-05-14T14:10:00.958Z","avatar_url":"https://github.com/bryanmylee.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/42545742/169733428-295e2678-e509-4175-aeb3-cb3a9c9894e1.svg\" alt=\"svelte-headless-table\" width=\"400px\"/\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eSvelte Headless Table\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![npm version](http://img.shields.io/npm/v/svelte-headless-table.svg)](https://www.npmjs.com/package/svelte-headless-table)\n[![npm downloads](https://img.shields.io/npm/dm/svelte-headless-table.svg)](https://www.npmjs.com/package/svelte-headless-table)\n![license](https://img.shields.io/npm/l/svelte-headless-table)\n![build](https://img.shields.io/github/actions/workflow/status/bryanmylee/svelte-headless-table/publish.yml)\n\n\u003c!--[![coverage](https://coveralls.io/repos/github/bryanmylee/svelte-headless-table/badge.svg?branch=main)](https://coveralls.io/github/bryanmylee/svelte-headless-table?branch=main)--\u003e\n\n\u003c/div\u003e\n\n## 🚧 Deprecation\n\n\u003e I've really appreciated all the support this project has received over the years, but I've been struggling to juggle my full-time job and this project simultaneously.\n\u003e\n\u003e There are no current plans to work on a Svelte 5 port of this project nor is there a maintenance schedule for Svelte 3/4. I'll merge fixes and PRs as they arrive, but I'd highly recommend seeking an alternative library for your future projects or forking this one.\n\n**Unopinionated and extensible data tables for Svelte**\n\n\u003e Build and design powerful datagrid experiences while retaining 100% control over styles and markup.\n\nVisit the [documentation](https://svelte-headless-table.bryanmylee.com/) for code examples and API reference, and get started with the [quick start guide](https://svelte-headless-table.bryanmylee.com/docs/getting-started/quick-start)!\n\n## Why Svelte Headless Table?\n\nSvelte Headless Table is designed to work **seamlessly** with Svelte. If you love Svelte, you will love Svelte Headless Table.\n\n- **Full TypeScript support**\n- Compatible with **SvelteKit** and SSR\n- Manage state with Svelte stores\n- Headless and fully customizable\n- Intuitive column-first declarative model\n- Highly performant\n- Feature-rich\n\n## All the features you could ever need!\n\nSvelte Headless Table comes with an extensive suite of plugins.\n\nEasily extend Svelte Headless Table with complex **sorting**, **filtering**, **grouping**, **pagination**, and much more.\n\n### Plugin roadmap\n\n- [x] [addSortBy](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-sort-by)\n- [x] [addColumnFilters](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-column-filters)\n- [x] [addTableFilter](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-table-filter)\n- [x] [addColumnOrder](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-column-order)\n- [x] [addHiddenColumns](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-hidden-columns)\n- [x] [addPagination](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-pagination)\n- [x] [addSubRows](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-sub-rows)\n- [x] [addGroupBy](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-group-by)\n- [x] [addExpandedRows](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-expanded-rows)\n- [x] [addSelectedRows](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-selected-rows)\n- [x] [addResizedColumns](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-resized-columns)\n- [x] [addGridLayout](https://svelte-headless-table.bryanmylee.com/docs/plugins/add-grid-layout)\n\n## Examples\n\n\u003c!-- prettier-ignore --\u003e\n```svelte\n\u003cscript\u003e\n  const data = readable([\n    { name: 'Ada Lovelace', age: 21 },\n    { name: 'Barbara Liskov', age: 52 },\n    { name: 'Richard Hamming', age: 38 },\n  ]);\n\n  const table = createTable(data);\n\n  const columns = table.createColumns([\n    table.column({\n      header: 'Name',\n      accessor: 'name',\n    }),\n    table.column({\n      header: 'Age',\n      accessor: 'age',\n    }),\n  ]);\n\n  const {\n    headerRows,\n    rows,\n    tableAttrs,\n    tableBodyAttrs,\n  } = table.createViewModel(columns);\n\u003c/script\u003e\n\n\u003ctable {...$tableAttrs}\u003e\n  \u003cthead\u003e\n    {#each $headerRows as headerRow (headerRow.id)}\n      \u003cSubscribe rowAttrs={headerRow.attrs()} let:rowAttrs\u003e\n        \u003ctr {...rowAttrs}\u003e\n          {#each headerRow.cells as cell (cell.id)}\n            \u003cSubscribe attrs={cell.attrs()} let:attrs\u003e\n              \u003cth {...attrs}\u003e\n                \u003cRender of={cell.render()} /\u003e\n              \u003c/th\u003e\n            \u003c/Subscribe\u003e\n          {/each}\n        \u003c/tr\u003e\n      \u003c/Subscribe\u003e\n    {/each}\n  \u003c/thead\u003e\n  \u003ctbody {...$tableBodyAttrs}\u003e\n    {#each $rows as row (row.id)}\n      \u003cSubscribe rowAttrs={row.attrs()} let:rowAttrs\u003e\n        \u003ctr {...rowAttrs}\u003e\n          {#each row.cells as cell (cell.id)}\n            \u003cSubscribe attrs={cell.attrs()} let:attrs\u003e\n              \u003ctd {...attrs}\u003e\n                \u003cRender of={cell.render()} /\u003e\n              \u003c/td\u003e\n            \u003c/Subscribe\u003e\n          {/each}\n        \u003c/tr\u003e\n      \u003c/Subscribe\u003e\n    {/each}\n  \u003c/tbody\u003e\n\u003c/table\u003e\n```\n\nFor more complex examples with advanced features, visit the [documentation site](https://svelte-headless-table.bryanmylee.com/docs/plugins/overview).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryanmylee%2Fsvelte-headless-table","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbryanmylee%2Fsvelte-headless-table","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryanmylee%2Fsvelte-headless-table/lists"}