Repository files navigation


logo
Shopify Skeleton Theme

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

LicenseCI

Getting started

Prerequisites

Before starting, ensure you have the latest Shopify CLI installed:

  • Shopify CLI – helps you download, upload, preview themes, and streamline your workflows

If you use VS Code:

  • Shopify Liquid VS Code Extension – provides syntax highlighting, linting, inline documentation, and auto-completion specifically designed for Liquid templates

Clone

Clone this repository using Git or Shopify CLI:

git clone git@github.com:Shopify/skeleton-theme.git
# or
shopify theme init

Preview

Preview this theme using Shopify CLI:

shopify theme dev

Theme architecture

.
├── assets # Stores static assets (CSS, JS, images, fonts, etc.)
├── blocks # Reusable, nestable, customizable UI components
├── config # Global theme settings and customization options
├── layout # Top-level wrappers for pages (layout templates)
├── locales # Translation files for theme internationalization
├── sections # Modular full-width page components
├── snippets # Reusable Liquid code or HTML fragments
└── templates # Templates combining sections to define page structures

To learn more, refer to the theme architecture documentation.

Templates

Templates control what's rendered on each type of page in a theme.

The Skeleton Theme scaffolds JSON templates to make it easy for merchants to customize their store.

None of the template types are required, and not all of them are included in the Skeleton Theme. Refer to the template types reference for a full list.

Sections

Sections are Liquid files that allow you to create reusable modules of content that can be customized by merchants. They can also include blocks which allow merchants to add, remove, and reorder content within a section.

Sections are made customizable by including a {% schema %} in the body. For more information, refer to the section schema documentation.

Blocks

Blocks let developers create flexible layouts by breaking down sections into smaller, reusable pieces of Liquid. Each block has its own set of settings, and can be added, removed, and reordered within a section.

Blocks are made customizable by including a {% schema %} in the body. For more information, refer to the block schema documentation.

Schemas

When developing components defined by schema settings, we recommend these guidelines to simplify your code:

  • Single property settings: For settings that correspond to a single CSS property, use CSS variables:

    <divclass="collection"style="--gap: {{ block.settings.gap }}px">
    ...
    </div>
    {% stylesheet %}
    .collection {
    gap: var(--gap);
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "range",
    "label": "gap",
    "id": "gap",
    "min": 0,
    "max": 100,
    "unit": "px",
    "default": 0,
    }]
    }
    {% endschema %}
  • Multiple property settings: For settings that control multiple CSS properties, use CSS classes:

    <divclass="collection {{ block.settings.layout }}">
    ...
    </div>
    {% stylesheet %}
    .collection--full-width {
    /* multiple styles */
    }
    .collection--narrow {
    /* multiple styles */
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "select",
    "id": "layout",
    "label": "layout",
    "values": [
    { "value": "collection--full-width", "label": "t:options.full" },
    { "value": "collection--narrow", "label": "t:options.narrow" }
    ]
    }]
    }
    {% endschema %}

CSS & JavaScript

For CSS and JavaScript, we recommend using the {% stylesheet %} and {% javascript %} tags. They can be included multiple times, but the code will only appear once.

critical.css

The Skeleton Theme explicitly separates essential CSS necessary for every page into a dedicated critical.css file.

Contributing

We're excited for your contributions to the Skeleton Theme! This repository aims to remain as lean, lightweight, and fundamental as possible, and we kindly ask your contributions to align with this intention.

Visit our CONTRIBUTING.md for a detailed overview of our process, guidelines, and recommendations.

License

Skeleton Theme is open-sourced under the MIT License.

About

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

Resources

Code of conduct

Contributing

Security policy

Stars

795 stars

Watchers

369 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation


logo
Shopify Skeleton Theme

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

LicenseCI

Getting started

Prerequisites

Before starting, ensure you have the latest Shopify CLI installed:

  • Shopify CLI – helps you download, upload, preview themes, and streamline your workflows

If you use VS Code:

  • Shopify Liquid VS Code Extension – provides syntax highlighting, linting, inline documentation, and auto-completion specifically designed for Liquid templates

Clone

Clone this repository using Git or Shopify CLI:

git clone git@github.com:Shopify/skeleton-theme.git
# or
shopify theme init

Preview

Preview this theme using Shopify CLI:

shopify theme dev

Theme architecture

.
├── assets # Stores static assets (CSS, JS, images, fonts, etc.)
├── blocks # Reusable, nestable, customizable UI components
├── config # Global theme settings and customization options
├── layout # Top-level wrappers for pages (layout templates)
├── locales # Translation files for theme internationalization
├── sections # Modular full-width page components
├── snippets # Reusable Liquid code or HTML fragments
└── templates # Templates combining sections to define page structures

To learn more, refer to the theme architecture documentation.

Templates

Templates control what's rendered on each type of page in a theme.

The Skeleton Theme scaffolds JSON templates to make it easy for merchants to customize their store.

None of the template types are required, and not all of them are included in the Skeleton Theme. Refer to the template types reference for a full list.

Sections

Sections are Liquid files that allow you to create reusable modules of content that can be customized by merchants. They can also include blocks which allow merchants to add, remove, and reorder content within a section.

Sections are made customizable by including a {% schema %} in the body. For more information, refer to the section schema documentation.

Blocks

Blocks let developers create flexible layouts by breaking down sections into smaller, reusable pieces of Liquid. Each block has its own set of settings, and can be added, removed, and reordered within a section.

Blocks are made customizable by including a {% schema %} in the body. For more information, refer to the block schema documentation.

Schemas

When developing components defined by schema settings, we recommend these guidelines to simplify your code:

  • Single property settings: For settings that correspond to a single CSS property, use CSS variables:

    <divclass="collection"style="--gap: {{ block.settings.gap }}px">
    ...
    </div>
    {% stylesheet %}
    .collection {
    gap: var(--gap);
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "range",
    "label": "gap",
    "id": "gap",
    "min": 0,
    "max": 100,
    "unit": "px",
    "default": 0,
    }]
    }
    {% endschema %}
  • Multiple property settings: For settings that control multiple CSS properties, use CSS classes:

    <divclass="collection {{ block.settings.layout }}">
    ...
    </div>
    {% stylesheet %}
    .collection--full-width {
    /* multiple styles */
    }
    .collection--narrow {
    /* multiple styles */
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "select",
    "id": "layout",
    "label": "layout",
    "values": [
    { "value": "collection--full-width", "label": "t:options.full" },
    { "value": "collection--narrow", "label": "t:options.narrow" }
    ]
    }]
    }
    {% endschema %}

CSS & JavaScript

For CSS and JavaScript, we recommend using the {% stylesheet %} and {% javascript %} tags. They can be included multiple times, but the code will only appear once.

critical.css

The Skeleton Theme explicitly separates essential CSS necessary for every page into a dedicated critical.css file.

Contributing

We're excited for your contributions to the Skeleton Theme! This repository aims to remain as lean, lightweight, and fundamental as possible, and we kindly ask your contributions to align with this intention.

Visit our CONTRIBUTING.md for a detailed overview of our process, guidelines, and recommendations.

License

Skeleton Theme is open-sourced under the MIT License.

About

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

Resources

Code of conduct

Contributing

Security policy

Stars

795 stars

Watchers

369 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation


logo
Shopify Skeleton Theme

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

LicenseCI

Getting started

Prerequisites

Before starting, ensure you have the latest Shopify CLI installed:

  • Shopify CLI – helps you download, upload, preview themes, and streamline your workflows

If you use VS Code:

  • Shopify Liquid VS Code Extension – provides syntax highlighting, linting, inline documentation, and auto-completion specifically designed for Liquid templates

Clone

Clone this repository using Git or Shopify CLI:

git clone git@github.com:Shopify/skeleton-theme.git
# or
shopify theme init

Preview

Preview this theme using Shopify CLI:

shopify theme dev

Theme architecture

.
├── assets # Stores static assets (CSS, JS, images, fonts, etc.)
├── blocks # Reusable, nestable, customizable UI components
├── config # Global theme settings and customization options
├── layout # Top-level wrappers for pages (layout templates)
├── locales # Translation files for theme internationalization
├── sections # Modular full-width page components
├── snippets # Reusable Liquid code or HTML fragments
└── templates # Templates combining sections to define page structures

To learn more, refer to the theme architecture documentation.

Templates

Templates control what's rendered on each type of page in a theme.

The Skeleton Theme scaffolds JSON templates to make it easy for merchants to customize their store.

None of the template types are required, and not all of them are included in the Skeleton Theme. Refer to the template types reference for a full list.

Sections

Sections are Liquid files that allow you to create reusable modules of content that can be customized by merchants. They can also include blocks which allow merchants to add, remove, and reorder content within a section.

Sections are made customizable by including a {% schema %} in the body. For more information, refer to the section schema documentation.

Blocks

Blocks let developers create flexible layouts by breaking down sections into smaller, reusable pieces of Liquid. Each block has its own set of settings, and can be added, removed, and reordered within a section.

Blocks are made customizable by including a {% schema %} in the body. For more information, refer to the block schema documentation.

Schemas

When developing components defined by schema settings, we recommend these guidelines to simplify your code:

  • Single property settings: For settings that correspond to a single CSS property, use CSS variables:

    <divclass="collection"style="--gap: {{ block.settings.gap }}px">
    ...
    </div>
    {% stylesheet %}
    .collection {
    gap: var(--gap);
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "range",
    "label": "gap",
    "id": "gap",
    "min": 0,
    "max": 100,
    "unit": "px",
    "default": 0,
    }]
    }
    {% endschema %}
  • Multiple property settings: For settings that control multiple CSS properties, use CSS classes:

    <divclass="collection {{ block.settings.layout }}">
    ...
    </div>
    {% stylesheet %}
    .collection--full-width {
    /* multiple styles */
    }
    .collection--narrow {
    /* multiple styles */
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "select",
    "id": "layout",
    "label": "layout",
    "values": [
    { "value": "collection--full-width", "label": "t:options.full" },
    { "value": "collection--narrow", "label": "t:options.narrow" }
    ]
    }]
    }
    {% endschema %}

CSS & JavaScript

For CSS and JavaScript, we recommend using the {% stylesheet %} and {% javascript %} tags. They can be included multiple times, but the code will only appear once.

critical.css

The Skeleton Theme explicitly separates essential CSS necessary for every page into a dedicated critical.css file.

Contributing

We're excited for your contributions to the Skeleton Theme! This repository aims to remain as lean, lightweight, and fundamental as possible, and we kindly ask your contributions to align with this intention.

Visit our CONTRIBUTING.md for a detailed overview of our process, guidelines, and recommendations.

License

Skeleton Theme is open-sourced under the MIT License.

About

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

Resources

Code of conduct

Contributing

Security policy

Stars

795 stars

Watchers

369 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation


logo
Shopify Skeleton Theme

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

LicenseCI

Getting started

Prerequisites

Before starting, ensure you have the latest Shopify CLI installed:

  • Shopify CLI – helps you download, upload, preview themes, and streamline your workflows

If you use VS Code:

  • Shopify Liquid VS Code Extension – provides syntax highlighting, linting, inline documentation, and auto-completion specifically designed for Liquid templates

Clone

Clone this repository using Git or Shopify CLI:

git clone git@github.com:Shopify/skeleton-theme.git
# or
shopify theme init

Preview

Preview this theme using Shopify CLI:

shopify theme dev

Theme architecture

.
├── assets # Stores static assets (CSS, JS, images, fonts, etc.)
├── blocks # Reusable, nestable, customizable UI components
├── config # Global theme settings and customization options
├── layout # Top-level wrappers for pages (layout templates)
├── locales # Translation files for theme internationalization
├── sections # Modular full-width page components
├── snippets # Reusable Liquid code or HTML fragments
└── templates # Templates combining sections to define page structures

To learn more, refer to the theme architecture documentation.

Templates

Templates control what's rendered on each type of page in a theme.

The Skeleton Theme scaffolds JSON templates to make it easy for merchants to customize their store.

None of the template types are required, and not all of them are included in the Skeleton Theme. Refer to the template types reference for a full list.

Sections

Sections are Liquid files that allow you to create reusable modules of content that can be customized by merchants. They can also include blocks which allow merchants to add, remove, and reorder content within a section.

Sections are made customizable by including a {% schema %} in the body. For more information, refer to the section schema documentation.

Blocks

Blocks let developers create flexible layouts by breaking down sections into smaller, reusable pieces of Liquid. Each block has its own set of settings, and can be added, removed, and reordered within a section.

Blocks are made customizable by including a {% schema %} in the body. For more information, refer to the block schema documentation.

Schemas

When developing components defined by schema settings, we recommend these guidelines to simplify your code:

  • Single property settings: For settings that correspond to a single CSS property, use CSS variables:

    <divclass="collection"style="--gap: {{ block.settings.gap }}px">
    ...
    </div>
    {% stylesheet %}
    .collection {
    gap: var(--gap);
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "range",
    "label": "gap",
    "id": "gap",
    "min": 0,
    "max": 100,
    "unit": "px",
    "default": 0,
    }]
    }
    {% endschema %}
  • Multiple property settings: For settings that control multiple CSS properties, use CSS classes:

    <divclass="collection {{ block.settings.layout }}">
    ...
    </div>
    {% stylesheet %}
    .collection--full-width {
    /* multiple styles */
    }
    .collection--narrow {
    /* multiple styles */
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "select",
    "id": "layout",
    "label": "layout",
    "values": [
    { "value": "collection--full-width", "label": "t:options.full" },
    { "value": "collection--narrow", "label": "t:options.narrow" }
    ]
    }]
    }
    {% endschema %}

CSS & JavaScript

For CSS and JavaScript, we recommend using the {% stylesheet %} and {% javascript %} tags. They can be included multiple times, but the code will only appear once.

critical.css

The Skeleton Theme explicitly separates essential CSS necessary for every page into a dedicated critical.css file.

Contributing

We're excited for your contributions to the Skeleton Theme! This repository aims to remain as lean, lightweight, and fundamental as possible, and we kindly ask your contributions to align with this intention.

Visit our CONTRIBUTING.md for a detailed overview of our process, guidelines, and recommendations.

License

Skeleton Theme is open-sourced under the MIT License.

About

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

Resources

Code of conduct

Contributing

Security policy

Stars

795 stars

Watchers

369 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation


logo
Shopify Skeleton Theme

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

LicenseCI

Getting started

Prerequisites

Before starting, ensure you have the latest Shopify CLI installed:

  • Shopify CLI – helps you download, upload, preview themes, and streamline your workflows

If you use VS Code:

  • Shopify Liquid VS Code Extension – provides syntax highlighting, linting, inline documentation, and auto-completion specifically designed for Liquid templates

Clone

Clone this repository using Git or Shopify CLI:

git clone git@github.com:Shopify/skeleton-theme.git
# or
shopify theme init

Preview

Preview this theme using Shopify CLI:

shopify theme dev

Theme architecture

.
├── assets # Stores static assets (CSS, JS, images, fonts, etc.)
├── blocks # Reusable, nestable, customizable UI components
├── config # Global theme settings and customization options
├── layout # Top-level wrappers for pages (layout templates)
├── locales # Translation files for theme internationalization
├── sections # Modular full-width page components
├── snippets # Reusable Liquid code or HTML fragments
└── templates # Templates combining sections to define page structures

To learn more, refer to the theme architecture documentation.

Templates

Templates control what's rendered on each type of page in a theme.

The Skeleton Theme scaffolds JSON templates to make it easy for merchants to customize their store.

None of the template types are required, and not all of them are included in the Skeleton Theme. Refer to the template types reference for a full list.

Sections

Sections are Liquid files that allow you to create reusable modules of content that can be customized by merchants. They can also include blocks which allow merchants to add, remove, and reorder content within a section.

Sections are made customizable by including a {% schema %} in the body. For more information, refer to the section schema documentation.

Blocks

Blocks let developers create flexible layouts by breaking down sections into smaller, reusable pieces of Liquid. Each block has its own set of settings, and can be added, removed, and reordered within a section.

Blocks are made customizable by including a {% schema %} in the body. For more information, refer to the block schema documentation.

Schemas

When developing components defined by schema settings, we recommend these guidelines to simplify your code:

  • Single property settings: For settings that correspond to a single CSS property, use CSS variables:

    <divclass="collection"style="--gap: {{ block.settings.gap }}px">
    ...
    </div>
    {% stylesheet %}
    .collection {
    gap: var(--gap);
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "range",
    "label": "gap",
    "id": "gap",
    "min": 0,
    "max": 100,
    "unit": "px",
    "default": 0,
    }]
    }
    {% endschema %}
  • Multiple property settings: For settings that control multiple CSS properties, use CSS classes:

    <divclass="collection {{ block.settings.layout }}">
    ...
    </div>
    {% stylesheet %}
    .collection--full-width {
    /* multiple styles */
    }
    .collection--narrow {
    /* multiple styles */
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "select",
    "id": "layout",
    "label": "layout",
    "values": [
    { "value": "collection--full-width", "label": "t:options.full" },
    { "value": "collection--narrow", "label": "t:options.narrow" }
    ]
    }]
    }
    {% endschema %}

CSS & JavaScript

For CSS and JavaScript, we recommend using the {% stylesheet %} and {% javascript %} tags. They can be included multiple times, but the code will only appear once.

critical.css

The Skeleton Theme explicitly separates essential CSS necessary for every page into a dedicated critical.css file.

Contributing

We're excited for your contributions to the Skeleton Theme! This repository aims to remain as lean, lightweight, and fundamental as possible, and we kindly ask your contributions to align with this intention.

Visit our CONTRIBUTING.md for a detailed overview of our process, guidelines, and recommendations.

License

Skeleton Theme is open-sourced under the MIT License.

About

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

Resources

Code of conduct

Contributing

Security policy

Stars

795 stars

Watchers

369 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation


logo
Shopify Skeleton Theme

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

LicenseCI

Getting started

Prerequisites

Before starting, ensure you have the latest Shopify CLI installed:

  • Shopify CLI – helps you download, upload, preview themes, and streamline your workflows

If you use VS Code:

  • Shopify Liquid VS Code Extension – provides syntax highlighting, linting, inline documentation, and auto-completion specifically designed for Liquid templates

Clone

Clone this repository using Git or Shopify CLI:

git clone git@github.com:Shopify/skeleton-theme.git
# or
shopify theme init

Preview

Preview this theme using Shopify CLI:

shopify theme dev

Theme architecture

.
├── assets # Stores static assets (CSS, JS, images, fonts, etc.)
├── blocks # Reusable, nestable, customizable UI components
├── config # Global theme settings and customization options
├── layout # Top-level wrappers for pages (layout templates)
├── locales # Translation files for theme internationalization
├── sections # Modular full-width page components
├── snippets # Reusable Liquid code or HTML fragments
└── templates # Templates combining sections to define page structures

To learn more, refer to the theme architecture documentation.

Templates

Templates control what's rendered on each type of page in a theme.

The Skeleton Theme scaffolds JSON templates to make it easy for merchants to customize their store.

None of the template types are required, and not all of them are included in the Skeleton Theme. Refer to the template types reference for a full list.

Sections

Sections are Liquid files that allow you to create reusable modules of content that can be customized by merchants. They can also include blocks which allow merchants to add, remove, and reorder content within a section.

Sections are made customizable by including a {% schema %} in the body. For more information, refer to the section schema documentation.

Blocks

Blocks let developers create flexible layouts by breaking down sections into smaller, reusable pieces of Liquid. Each block has its own set of settings, and can be added, removed, and reordered within a section.

Blocks are made customizable by including a {% schema %} in the body. For more information, refer to the block schema documentation.

Schemas

When developing components defined by schema settings, we recommend these guidelines to simplify your code:

  • Single property settings: For settings that correspond to a single CSS property, use CSS variables:

    <divclass="collection"style="--gap: {{ block.settings.gap }}px">
    ...
    </div>
    {% stylesheet %}
    .collection {
    gap: var(--gap);
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "range",
    "label": "gap",
    "id": "gap",
    "min": 0,
    "max": 100,
    "unit": "px",
    "default": 0,
    }]
    }
    {% endschema %}
  • Multiple property settings: For settings that control multiple CSS properties, use CSS classes:

    <divclass="collection {{ block.settings.layout }}">
    ...
    </div>
    {% stylesheet %}
    .collection--full-width {
    /* multiple styles */
    }
    .collection--narrow {
    /* multiple styles */
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "select",
    "id": "layout",
    "label": "layout",
    "values": [
    { "value": "collection--full-width", "label": "t:options.full" },
    { "value": "collection--narrow", "label": "t:options.narrow" }
    ]
    }]
    }
    {% endschema %}

CSS & JavaScript

For CSS and JavaScript, we recommend using the {% stylesheet %} and {% javascript %} tags. They can be included multiple times, but the code will only appear once.

critical.css

The Skeleton Theme explicitly separates essential CSS necessary for every page into a dedicated critical.css file.

Contributing

We're excited for your contributions to the Skeleton Theme! This repository aims to remain as lean, lightweight, and fundamental as possible, and we kindly ask your contributions to align with this intention.

Visit our CONTRIBUTING.md for a detailed overview of our process, guidelines, and recommendations.

License

Skeleton Theme is open-sourced under the MIT License.

About

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

Resources

Code of conduct

Contributing

Security policy

Stars

795 stars

Watchers

369 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation


logo
Shopify Skeleton Theme

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

LicenseCI

Getting started

Prerequisites

Before starting, ensure you have the latest Shopify CLI installed:

  • Shopify CLI – helps you download, upload, preview themes, and streamline your workflows

If you use VS Code:

  • Shopify Liquid VS Code Extension – provides syntax highlighting, linting, inline documentation, and auto-completion specifically designed for Liquid templates

Clone

Clone this repository using Git or Shopify CLI:

git clone git@github.com:Shopify/skeleton-theme.git
# or
shopify theme init

Preview

Preview this theme using Shopify CLI:

shopify theme dev

Theme architecture

.
├── assets # Stores static assets (CSS, JS, images, fonts, etc.)
├── blocks # Reusable, nestable, customizable UI components
├── config # Global theme settings and customization options
├── layout # Top-level wrappers for pages (layout templates)
├── locales # Translation files for theme internationalization
├── sections # Modular full-width page components
├── snippets # Reusable Liquid code or HTML fragments
└── templates # Templates combining sections to define page structures

To learn more, refer to the theme architecture documentation.

Templates

Templates control what's rendered on each type of page in a theme.

The Skeleton Theme scaffolds JSON templates to make it easy for merchants to customize their store.

None of the template types are required, and not all of them are included in the Skeleton Theme. Refer to the template types reference for a full list.

Sections

Sections are Liquid files that allow you to create reusable modules of content that can be customized by merchants. They can also include blocks which allow merchants to add, remove, and reorder content within a section.

Sections are made customizable by including a {% schema %} in the body. For more information, refer to the section schema documentation.

Blocks

Blocks let developers create flexible layouts by breaking down sections into smaller, reusable pieces of Liquid. Each block has its own set of settings, and can be added, removed, and reordered within a section.

Blocks are made customizable by including a {% schema %} in the body. For more information, refer to the block schema documentation.

Schemas

When developing components defined by schema settings, we recommend these guidelines to simplify your code:

  • Single property settings: For settings that correspond to a single CSS property, use CSS variables:

    <divclass="collection"style="--gap: {{ block.settings.gap }}px">
    ...
    </div>
    {% stylesheet %}
    .collection {
    gap: var(--gap);
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "range",
    "label": "gap",
    "id": "gap",
    "min": 0,
    "max": 100,
    "unit": "px",
    "default": 0,
    }]
    }
    {% endschema %}
  • Multiple property settings: For settings that control multiple CSS properties, use CSS classes:

    <divclass="collection {{ block.settings.layout }}">
    ...
    </div>
    {% stylesheet %}
    .collection--full-width {
    /* multiple styles */
    }
    .collection--narrow {
    /* multiple styles */
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "select",
    "id": "layout",
    "label": "layout",
    "values": [
    { "value": "collection--full-width", "label": "t:options.full" },
    { "value": "collection--narrow", "label": "t:options.narrow" }
    ]
    }]
    }
    {% endschema %}

CSS & JavaScript

For CSS and JavaScript, we recommend using the {% stylesheet %} and {% javascript %} tags. They can be included multiple times, but the code will only appear once.

critical.css

The Skeleton Theme explicitly separates essential CSS necessary for every page into a dedicated critical.css file.

Contributing

We're excited for your contributions to the Skeleton Theme! This repository aims to remain as lean, lightweight, and fundamental as possible, and we kindly ask your contributions to align with this intention.

Visit our CONTRIBUTING.md for a detailed overview of our process, guidelines, and recommendations.

License

Skeleton Theme is open-sourced under the MIT License.

About

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

Resources

Code of conduct

Contributing

Security policy

Stars

795 stars

Watchers

369 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation


logo
Shopify Skeleton Theme

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

LicenseCI

Getting started

Prerequisites

Before starting, ensure you have the latest Shopify CLI installed:

  • Shopify CLI – helps you download, upload, preview themes, and streamline your workflows

If you use VS Code:

  • Shopify Liquid VS Code Extension – provides syntax highlighting, linting, inline documentation, and auto-completion specifically designed for Liquid templates

Clone

Clone this repository using Git or Shopify CLI:

git clone git@github.com:Shopify/skeleton-theme.git
# or
shopify theme init

Preview

Preview this theme using Shopify CLI:

shopify theme dev

Theme architecture

.
├── assets # Stores static assets (CSS, JS, images, fonts, etc.)
├── blocks # Reusable, nestable, customizable UI components
├── config # Global theme settings and customization options
├── layout # Top-level wrappers for pages (layout templates)
├── locales # Translation files for theme internationalization
├── sections # Modular full-width page components
├── snippets # Reusable Liquid code or HTML fragments
└── templates # Templates combining sections to define page structures

To learn more, refer to the theme architecture documentation.

Templates

Templates control what's rendered on each type of page in a theme.

The Skeleton Theme scaffolds JSON templates to make it easy for merchants to customize their store.

None of the template types are required, and not all of them are included in the Skeleton Theme. Refer to the template types reference for a full list.

Sections

Sections are Liquid files that allow you to create reusable modules of content that can be customized by merchants. They can also include blocks which allow merchants to add, remove, and reorder content within a section.

Sections are made customizable by including a {% schema %} in the body. For more information, refer to the section schema documentation.

Blocks

Blocks let developers create flexible layouts by breaking down sections into smaller, reusable pieces of Liquid. Each block has its own set of settings, and can be added, removed, and reordered within a section.

Blocks are made customizable by including a {% schema %} in the body. For more information, refer to the block schema documentation.

Schemas

When developing components defined by schema settings, we recommend these guidelines to simplify your code:

  • Single property settings: For settings that correspond to a single CSS property, use CSS variables:

    <divclass="collection"style="--gap: {{ block.settings.gap }}px">
    ...
    </div>
    {% stylesheet %}
    .collection {
    gap: var(--gap);
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "range",
    "label": "gap",
    "id": "gap",
    "min": 0,
    "max": 100,
    "unit": "px",
    "default": 0,
    }]
    }
    {% endschema %}
  • Multiple property settings: For settings that control multiple CSS properties, use CSS classes:

    <divclass="collection {{ block.settings.layout }}">
    ...
    </div>
    {% stylesheet %}
    .collection--full-width {
    /* multiple styles */
    }
    .collection--narrow {
    /* multiple styles */
    }
    {% endstylesheet %}
    {% schema %}
    {
    "settings": [{
    "type": "select",
    "id": "layout",
    "label": "layout",
    "values": [
    { "value": "collection--full-width", "label": "t:options.full" },
    { "value": "collection--narrow", "label": "t:options.narrow" }
    ]
    }]
    }
    {% endschema %}

CSS & JavaScript

For CSS and JavaScript, we recommend using the {% stylesheet %} and {% javascript %} tags. They can be included multiple times, but the code will only appear once.

critical.css

The Skeleton Theme explicitly separates essential CSS necessary for every page into a dedicated critical.css file.

Contributing

We're excited for your contributions to the Skeleton Theme! This repository aims to remain as lean, lightweight, and fundamental as possible, and we kindly ask your contributions to align with this intention.

Visit our CONTRIBUTING.md for a detailed overview of our process, guidelines, and recommendations.

License

Skeleton Theme is open-sourced under the MIT License.

About

A minimal, carefully structured Shopify theme designed to help you quickly get started. Designed with modularity, maintainability, and Shopify's best practices in mind.

Resources

Code of conduct

Contributing

Security policy

Stars

795 stars

Watchers

369 watching

Forks

Used by

Contributors

Languages