{"id":22819527,"url":"https://github.com/humanspeak/svelte-headless-table","last_synced_at":"2026-05-22T23:08:12.726Z","repository":{"id":267097292,"uuid":"886387018","full_name":"humanspeak/svelte-headless-table","owner":"humanspeak","description":"A powerful, headless table library for Svelte that provides complete control over table UI while handling complex data operations like sorting, filtering, pagination, grouping, and row expansion. Build custom, accessible data tables with zero styling opinions.","archived":false,"fork":false,"pushed_at":"2025-05-18T10:55:35.000Z","size":4859,"stargazers_count":5,"open_issues_count":19,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-10T00:37:43.813Z","etag":null,"topics":["column-sorting","customizable","datagrid","datatable","expanding","filtering","grouping","headless","ordering","pagination","plugin","row-selection","sorting","svelte","sveltekit","table","table-component","typescript"],"latest_commit_sha":null,"homepage":"https://table.svelte.page","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/humanspeak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"zenodo":null},"funding":{"github":["humanspeak"]}},"created_at":"2024-11-10T21:26:26.000Z","updated_at":"2025-05-18T10:55:37.000Z","dependencies_parsed_at":"2024-12-08T10:46:00.587Z","dependency_job_id":"820bf64f-d4e4-4e95-ac8c-f3809825fbc3","html_url":"https://github.com/humanspeak/svelte-headless-table","commit_stats":null,"previous_names":["humanspeak/svelte-headless-table"],"tags_count":77,"template":false,"template_full_name":null,"purl":"pkg:github/humanspeak/svelte-headless-table","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanspeak%2Fsvelte-headless-table","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanspeak%2Fsvelte-headless-table/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanspeak%2Fsvelte-headless-table/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanspeak%2Fsvelte-headless-table/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/humanspeak","download_url":"https://codeload.github.com/humanspeak/svelte-headless-table/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanspeak%2Fsvelte-headless-table/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259395458,"owners_count":22850833,"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":["column-sorting","customizable","datagrid","datatable","expanding","filtering","grouping","headless","ordering","pagination","plugin","row-selection","sorting","svelte","sveltekit","table","table-component","typescript"],"created_at":"2024-12-12T15:12:45.612Z","updated_at":"2026-05-22T23:08:12.718Z","avatar_url":"https://github.com/humanspeak.png","language":"TypeScript","funding_links":["https://github.com/sponsors/humanspeak"],"categories":[],"sub_categories":[],"readme":"\u003c!-- trunk-ignore-all(markdownlint/MD033) --\u003e\n\u003c!-- trunk-ignore(markdownlint/MD041) --\u003e\n\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://user-images.githubusercontent.com/42545742/169733428-295e2678-e509-4175-aeb3-cb3a9c9894e1.svg\" alt=\"svelte-headless-table\" width=\"400\" /\u003e\n\n# Svelte Headless Table\n\n\u003c/div\u003e\n\n[![NPM version](https://img.shields.io/npm/v/@humanspeak/svelte-headless-table.svg)](https://www.npmjs.com/package/@humanspeak/svelte-headless-table)\n[![Build Status](https://github.com/humanspeak/svelte-headless-table/actions/workflows/npm-publish.yml/badge.svg)](https://github.com/humanspeak/svelte-headless-table/actions/workflows/npm-publish.yml)\n[![Coverage Status](https://coveralls.io/repos/github/humanspeak/svelte-headless-table/badge.svg?branch=main)](https://coveralls.io/github/humanspeak/svelte-headless-table?branch=main)\n[![License](https://img.shields.io/npm/l/@humanspeak/svelte-headless-table.svg)](https://github.com/humanspeak/svelte-headless-table/blob/main/LICENSE)\n[![Downloads](https://img.shields.io/npm/dm/@humanspeak/svelte-headless-table.svg)](https://www.npmjs.com/package/@humanspeak/svelte-headless-table)\n[![CodeQL](https://github.com/humanspeak/svelte-headless-table/actions/workflows/codeql.yml/badge.svg)](https://github.com/humanspeak/svelte-headless-table/actions/workflows/codeql.yml)\n[![Install size](https://packagephobia.com/badge?p=@humanspeak/svelte-headless-table)](https://packagephobia.com/result?p=@humanspeak/svelte-headless-table)\n[![Code Style: Trunk](https://img.shields.io/badge/code%20style-trunk-blue.svg)](https://trunk.io)\n[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/)\n[![Types](https://img.shields.io/npm/types/@humanspeak/svelte-headless-table.svg)](https://www.npmjs.com/package/@humanspeak/svelte-headless-table)\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/humanspeak/svelte-headless-table/graphs/commit-activity)\n\n\u003c/div\u003e\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://table.svelte.page/) for code examples and API reference, and get started with the [quick start guide](https://table.svelte.page/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://table.svelte.page/docs/plugins/add-sort-by)\n- [x] [addColumnFilters](https://table.svelte.page/docs/plugins/add-column-filters)\n- [x] [addTableFilter](https://table.svelte.page/docs/plugins/add-table-filter)\n- [x] [addColumnOrder](https://table.svelte.page/docs/plugins/add-column-order)\n- [x] [addHiddenColumns](https://table.svelte.page/docs/plugins/add-hidden-columns)\n- [x] [addPagination](https://table.svelte.page/docs/plugins/add-pagination)\n- [x] [addSubRows](https://table.svelte.page/docs/plugins/add-sub-rows)\n- [x] [addGroupBy](https://table.svelte.page/docs/plugins/add-group-by)\n- [x] [addExpandedRows](https://table.svelte.page/docs/plugins/add-expanded-rows)\n- [x] [addSelectedRows](https://table.svelte.page/docs/plugins/add-selected-rows)\n- [x] [addResizedColumns](https://table.svelte.page/docs/plugins/add-resized-columns)\n- [x] [addGridLayout](https://table.svelte.page/docs/plugins/add-grid-layout)\n- [x] [addVirtualScroll](https://table.svelte.page/docs/plugins/add-virtual-scroll)\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://table.svelte.page/docs/plugins/overview).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumanspeak%2Fsvelte-headless-table","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhumanspeak%2Fsvelte-headless-table","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumanspeak%2Fsvelte-headless-table/lists"}