<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: bmarkov</title>
    <description>The latest articles on DEV Community by bmarkov (@bmarkov).</description>
    <link>https://dev.to/bmarkov</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F137371%2Fe101bc37-e23b-4ab5-aeb3-cac077021867.png</url>
      <title>DEV Community: bmarkov</title>
      <link>https://dev.to/bmarkov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bmarkov"/>
    <language>en</language>
    <item>
      <title>SvGrid: a Svelte 5 native data grid (MIT core, headless + render component, MCP-ready)</title>
      <dc:creator>bmarkov</dc:creator>
      <pubDate>Sat, 20 Jun 2026 08:17:11 +0000</pubDate>
      <link>https://dev.to/bmarkov/svgrid-a-svelte-5-native-data-grid-mit-core-headless-render-component-mcp-ready-1j8l</link>
      <guid>https://dev.to/bmarkov/svgrid-a-svelte-5-native-data-grid-mit-core-headless-render-component-mcp-ready-1j8l</guid>
      <description>&lt;p&gt;The Svelte ecosystem has matured fast in the last year, but one thing I kept hitting was the data grid problem. If you wanted a real one, your options were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TanStack Table&lt;/strong&gt; (Svelte adapter). Headless only, multi-framework. You build the entire DOM layer yourself. Beautiful primitives, but you still ship a thousand lines before you have a sortable table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AG Grid via a Svelte wrapper.&lt;/strong&gt; Production-grade, but the React shape underneath fights Svelte 5 runes the moment you try anything reactive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;svelte-headless-table.&lt;/strong&gt; Lovely for small tables, not built for 100k rows with virtualization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of them felt right for the Svelte 5 era. So we spent the last year building one: &lt;strong&gt;SvGrid&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is MIT-licensed, on npm as &lt;code&gt;@svgrid/grid&lt;/code&gt;, and has a sibling package &lt;code&gt;@svgrid/enterprise&lt;/code&gt; for the heavier features (export, pivot, AI helpers). Site, docs, 150+ live demos: &lt;a href="https://svgrid.com" rel="noopener noreferrer"&gt;svgrid.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it in 30 seconds
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create sv-grid@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That scaffolds a working Vite + Svelte 5 app with a sortable, filterable, virtualized grid wired up.&lt;/p&gt;

&lt;p&gt;Or drop the package straight into an existing app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @svgrid/grid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The hello-world that actually does something
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight svelte"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SvGrid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ColumnDef&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@svgrid/grid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ada&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Linus&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inactive&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ColumnDef&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;firstName&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;First name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;SvGrid&lt;/span&gt; &lt;span class="na"&gt;data=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;columns=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a real, working, accessible grid. Sorting, filtering, cell-range selection, inline editing, virtualization all light up the moment you turn on the matching prop. No provider wrapping, no DOM you have to author yourself, no &lt;code&gt;.subscribe&lt;/code&gt; ceremony.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Svelte 5 native" matters
&lt;/h2&gt;

&lt;p&gt;A data grid is, at its core, a reactivity problem. A hundred thousand cells, any of which can change, and you want to repaint only what actually moved. Svelte 5 runes (&lt;code&gt;$state&lt;/code&gt;, &lt;code&gt;$derived&lt;/code&gt;, &lt;code&gt;$effect&lt;/code&gt;) give you fine-grained reactivity at exactly that scope.&lt;/p&gt;

&lt;p&gt;Three patterns the engine uses that turned out to matter:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. &lt;code&gt;$state.raw&lt;/code&gt; for large arrays.&lt;/strong&gt; Svelte's deep proxy is wonderful for forms and brutal for 100k-row tables. The row backing is &lt;code&gt;$state.raw&lt;/code&gt;; the array reference is reactive, the contents are not. Sort-and-filter on the dataset I was profiling went from ~80ms to ~6ms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. &lt;code&gt;$effect.pre&lt;/code&gt; for measure-before-paint.&lt;/strong&gt; Virtualization needs the viewport height before the paint that uses it. With plain &lt;code&gt;$effect&lt;/code&gt; you get one frame of "rows render at 0 height, then snap to real height." &lt;code&gt;$effect.pre&lt;/code&gt; kills the flicker without a &lt;code&gt;requestAnimationFrame&lt;/code&gt; hack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Snippets as cell renderers.&lt;/strong&gt; Svelte 5 snippets are first-class values. You attach one to a &lt;code&gt;ColumnDef.cell&lt;/code&gt; and &lt;code&gt;{@render cell.cell(...)}&lt;/code&gt; from the body component, and the args (&lt;code&gt;value&lt;/code&gt;, &lt;code&gt;row&lt;/code&gt;, &lt;code&gt;getValue&lt;/code&gt;) typecheck the whole way through. No more named slots, no &lt;code&gt;&amp;lt;svelte:fragment&amp;gt;&lt;/code&gt; dance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the free MIT core (&lt;code&gt;@svgrid/grid&lt;/code&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Row + column virtualization.&lt;/strong&gt; 100k rows by 100 cols stays smooth. There's a 1M-row demo if you want to see it break later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filtering.&lt;/strong&gt; Excel-style filter menu, inline filter row, locale-aware text matching, set / value-list filter, between operator on numbers and dates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editing.&lt;/strong&gt; 14 built-in &lt;code&gt;editorType&lt;/code&gt;s (text, number, date, datetime, time, select, rich-select with typeahead, textarea, color, checkbox, list, chips, rating, password) and a &lt;code&gt;cellEditor&lt;/code&gt; snippet slot for anything else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selection.&lt;/strong&gt; Cell-range click+drag and Shift+arrows, copy/paste as TSV, Excel-style fill handle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchy.&lt;/strong&gt; Row grouping with aggregation, tree data, master/detail, full-width detail rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout.&lt;/strong&gt; Row + column pinning, sticky header + first column, header drag-to-reorder, column sizing API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operations.&lt;/strong&gt; Find in grid (Ctrl+F), undo/redo (Ctrl+Z), transaction API, optimistic updates, server-side row model with sort / filter / group pushdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A11y.&lt;/strong&gt; WAI-ARIA + full keyboard nav, RTL, high-contrast theme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bundle.&lt;/strong&gt; ~7.5 KB gzipped for the headless core, ~42 KB gzipped for the full render component. Svelte stays a peer dependency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The community core has zero feature gating, no license key, no watermark, no row-count cap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI-native bit
&lt;/h2&gt;

&lt;p&gt;This is the part I am most excited about, and the part I think is underappreciated in the component-library space.&lt;/p&gt;

&lt;p&gt;SvGrid ships an &lt;strong&gt;MCP (Model Context Protocol) server&lt;/strong&gt;. Add it to your Claude Desktop, Cursor, or Zed config and the assistant gets accurate, version-pinned answers about every prop, method, and event in the library, plus the source of all 150+ demos as context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"svgrid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@svgrid/mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now when you ask Cursor "give me a grid with row grouping and server-side data," it grounds the answer in actual SvGrid types and emits code that compiles, instead of hallucinating ag-grid props.&lt;/p&gt;

&lt;p&gt;There is also a published &lt;code&gt;llms.txt&lt;/code&gt; / &lt;code&gt;llms-full.txt&lt;/code&gt; for retrieval-augmented setups, and the gallery has live AI demos (a natural-language filter bar that turns "EMEA over 50k active" into a typed filter expression, plus a Smart Paste that turns free-form text into typed rows).&lt;/p&gt;

&lt;h2&gt;
  
  
  Open core, upfront
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;@svgrid/grid&lt;/code&gt; is MIT-licensed and free for commercial use.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@svgrid/enterprise&lt;/code&gt; is a separately-licensed companion that adds export to Excel / PDF / CSV / TSV / HTML with branded headers, footers, and password protection; a paginated printable view; pivot tables with a drag-and-drop Designer + drill-through; and AI helpers. Per-developer pricing, perpetual license with an optional yearly renewal for updates, OSS projects get it for free.&lt;/p&gt;

&lt;p&gt;If everything you need is in the core, you never have to touch the paid package.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest about what is not there yet
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Column spanning (&lt;code&gt;colSpan&lt;/code&gt; on cell context). On the roadmap, large effort.&lt;/li&gt;
&lt;li&gt;Built-in row dragging across grids. Demos cover the in-grid case, but the cross-grid version is not in the engine yet.&lt;/li&gt;
&lt;li&gt;Variable row height on the &lt;code&gt;&amp;lt;SvGrid&amp;gt;&lt;/code&gt; render component. The headless virtualizer does it today.&lt;/li&gt;
&lt;li&gt;Engine-level formula language. There is a working in-grid formula engine in a demo, but it has not graduated into the package.&lt;/li&gt;
&lt;li&gt;Custom calendar systems (Hijri, Buddhist, fiscal year) for the date editor. Gregorian dates / times / datetimes are all built in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full public roadmap with effort tags and a "recently shipped" track record: &lt;a href="https://svgrid.com/roadmap" rel="noopener noreferrer"&gt;svgrid.com/roadmap&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Site + 150+ demos: &lt;a href="https://svgrid.com" rel="noopener noreferrer"&gt;svgrid.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/sv-grid/sv-grid" rel="noopener noreferrer"&gt;github.com/sv-grid/sv-grid&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/@svgrid/grid" rel="noopener noreferrer"&gt;@svgrid/grid&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Scaffold: &lt;code&gt;npm create sv-grid@latest&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would love feedback. What is the first thing that breaks when you try it, and what is the one missing feature that would stop you adopting it? I am reading every reply.&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>showdev</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>New Smart UI for React with 60+ components</title>
      <dc:creator>bmarkov</dc:creator>
      <pubDate>Mon, 08 Jun 2020 11:53:06 +0000</pubDate>
      <link>https://dev.to/bmarkov/new-smart-ui-for-react-with-60-components-2903</link>
      <guid>https://dev.to/bmarkov/new-smart-ui-for-react-with-60-components-2903</guid>
      <description>&lt;p&gt;Demos: &lt;a href="https://www.htmlelements.com/react/"&gt;https://www.htmlelements.com/react/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>datagrid</category>
      <category>kanban</category>
    </item>
    <item>
      <title>First Gantt Chart Web Component</title>
      <dc:creator>bmarkov</dc:creator>
      <pubDate>Tue, 30 Jul 2019 18:26:31 +0000</pubDate>
      <link>https://dev.to/bmarkov/first-gantt-chart-web-component-42kf</link>
      <guid>https://dev.to/bmarkov/first-gantt-chart-web-component-42kf</guid>
      <description>&lt;p&gt;Ideal for project management:&lt;br&gt;
&lt;a href="https://www.htmlelements.com/demos/gantt/overview/index.htm"&gt;https://www.htmlelements.com/demos/gantt/overview/index.htm&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gantt</category>
      <category>webcomponents</category>
      <category>ganttchart</category>
      <category>ganttcustomelement</category>
    </item>
    <item>
      <title>SMART HTML ELEMENTS Colors Element</title>
      <dc:creator>bmarkov</dc:creator>
      <pubDate>Thu, 23 May 2019 10:26:21 +0000</pubDate>
      <link>https://dev.to/bmarkov/smart-html-elements-colors-element-211c</link>
      <guid>https://dev.to/bmarkov/smart-html-elements-colors-element-211c</guid>
      <description>&lt;p&gt;Creates a Custom Element by using Smart Custom Elements library. Smart provides API for Web Components &amp;amp; Custom Elements development. You can use it to create your own HTML Tags.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/anon/embed/JqpWeb?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>colorpicker</category>
    </item>
    <item>
      <title>Feature Complete Chart Web Component </title>
      <dc:creator>bmarkov</dc:creator>
      <pubDate>Wed, 08 May 2019 04:17:56 +0000</pubDate>
      <link>https://dev.to/bmarkov/feature-complete-chart-web-component-4ia3</link>
      <guid>https://dev.to/bmarkov/feature-complete-chart-web-component-4ia3</guid>
      <description>&lt;p&gt;Feature Complete Chart Web Component with SVG and HTML5 rendering. Pie, Donut, Bar, Column, Financial, Pyramid, Bubble, Scatter and 30 more Chart types.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.htmlelements.com/demos/chart/overview/"&gt;https://www.htmlelements.com/demos/chart/overview/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>chart</category>
      <category>charting</category>
      <category>chartwebcomponent</category>
    </item>
    <item>
      <title>Awesome Web Components and HTML Elements</title>
      <dc:creator>bmarkov</dc:creator>
      <pubDate>Tue, 19 Feb 2019 08:46:26 +0000</pubDate>
      <link>https://dev.to/bmarkov/awesome-web-components-and-html-elements-573j</link>
      <guid>https://dev.to/bmarkov/awesome-web-components-and-html-elements-573j</guid>
      <description>

&lt;p&gt;Website: &lt;a href="https://www.htmlelements.com/demos/"&gt;https://www.htmlelements.com/demos/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JCUDOcp_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.htmlelements.com/demos/images/checkout-web-page-template.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JCUDOcp_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.htmlelements.com/demos/images/checkout-web-page-template.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0FJiJIXO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.htmlelements.com/demos/images/dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0FJiJIXO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.htmlelements.com/demos/images/dashboard.png"&gt;&lt;/a&gt;&lt;/p&gt;


</description>
      <category>webcomponents</category>
      <category>customelements</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Cute - CSS in JS: https://bmarkov.github.io/cute-css/</title>
      <dc:creator>bmarkov</dc:creator>
      <pubDate>Mon, 18 Feb 2019 05:57:25 +0000</pubDate>
      <link>https://dev.to/bmarkov/cute---css-in-js-3dmc</link>
      <guid>https://dev.to/bmarkov/cute---css-in-js-3dmc</guid>
      <description>

&lt;p&gt;Utilising tagged template literals and the power of CSS.&lt;br&gt;
Automatic CSS - adds css to a web page on demand, fully automatically. Your users load the least amount of code necessary.&lt;br&gt;
No class name bugs - unique class names for your styles. You never have to worry about duplication or misspellings.&lt;br&gt;
Removes the mapping between components and styles&lt;br&gt;
FREE&lt;/p&gt;


</description>
      <category>css</category>
      <category>javascript</category>
      <category>cssinjs</category>
    </item>
    <item>
      <title>Custom Elements: https://www.htmlelements.com/</title>
      <dc:creator>bmarkov</dc:creator>
      <pubDate>Mon, 18 Feb 2019 05:18:33 +0000</pubDate>
      <link>https://dev.to/bmarkov/custom-elements-httpswwwhtmlelementscom-2f10</link>
      <guid>https://dev.to/bmarkov/custom-elements-httpswwwhtmlelementscom-2f10</guid>
      <description>

&lt;p&gt;Vanilla JS and ES6 library and next-generation front-end framework: &lt;a href="https://www.htmlelements.com/"&gt;https://www.htmlelements.com/&lt;/a&gt;&lt;br&gt;
Ideal for the new Web Apps. Automatically adapts to different device types.&lt;br&gt;
0 dependencies. 0 learning curve.&lt;br&gt;
-Javascript library that helps you to create Custom UI Elements.&lt;br&gt;
-Integrates with Angular, ReactJS, Vue.js and any other framework.&lt;br&gt;
Arbitrary-precision arithmetic and Math functions.&lt;br&gt;
DateTime precision up to a yoctosecond (10⁻²⁴ second).&lt;/p&gt;


</description>
      <category>customelemements</category>
      <category>webcomponents</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
