This is a demo of Strapping. Play with the values on the left to alter the colors, styles, and fonts used on this page. Then click the Preview button to see your changes.

You can Save your custom theme as Sass, CSS, or JSON, and can Load saved themes from Sass or JSON.



Check out the demo

Strapping is a web plugin for live-editing custom Bootstrap themes. Include Strapping on any page that uses Bootstrap CSS, and use the toolbar to modify the page's colors, sizes, and fonts.

You can incorporate Strapping into your project in two ways:

  1. Include Strapping in development to help you customize your site's styles
  2. Include Strapping in production to allow users and teams to create themes for your site


npm install --save strapping

The dist/ folder comes with two files:

  • strapping.min.js
  • sass.worker.js - from sass.js

sass.worker.js is rather large (~3MB), so it's only loaded if Strapping is initialized.

    <script src="path/to/strapping.min.js"></script>
  <body onload="strapping.initialize('path/to/sass.worker.js')">
    <div class="alert alert-info">
      Customize Me!



By default, Strapping provides buttons for saving the resulting CSS or Sass to a local file. If you're using Strapping in production to allow your users to customize your UI, you'll probably want to save the result to a CDN or database. To do this, you can replace the default buttons with your own: = function(result) {
  if (result.status) throw new Error(result.message);
  // Pass the result to S3, localStorage, ...

  workerPath: 'path/to/sass.worker.js',
  heading: `
<a onclick="strapping.compile()">Preview</a>
<a onclick="strapping.compile(save)">Save</a>


You can use strapping.load() to set the theme using saved JSON or Sass: = function((result) => {
  localStorage.setItem('_variables.scss', result.sass);

let saved = localStorage.getItem('_variables.scss');
if (saved) strapping.load(saved);

Position and Styles

By default Strapping will just append itself to the document body. You can also pass in a parent element:

  <div id="Strapping"></div>
      workerPath: 'path/to/sass.worker.js',
      parent: document.getElementById('Strapping'),

The inserted element will have the id #StrappingEditor, so you can also apply CSS to it:

#StrappingEditor {
  position: fixed;
  top: 0;
  bottom: 0;
  right: 0;
  width: 300px;


By default, Strapping allows modification of any Bootstrap variable. You can restrict the list of available fields using strings and regular expressions:

  workerPath: 'path/to/sass.worker.js',
  fields: [/^(alert-|button-|brand-)/, 'border-radius-base', 'link-color'],


Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Example body text

Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.

This line of text is meant to be treated as fine print.

The following snippet of text is rendered as bold text.

The following snippet of text is rendered as italicized text.

An abbreviation of the word attribute is attr.

Emphasis classes

Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.

Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod.

Donec ullamcorper nulla non metus auctor fringilla.

Duis mollis, est non commodo luctus, nisi erat porttitor ligula.

Maecenas sed diam eget risus varius blandit sit amet non magna.


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

Someone famous in Source Title

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

Someone famous in Source Title
# Column heading Column heading Column heading
1 Column content Column content Column content
2 Column content Column content Column content
3 Column content Column content Column content
4 Column content Column content Column content
5 Column content Column content Column content
6 Column content Column content Column content
7 Column content Column content Column content
A longer block of help text that breaks onto a new line and may extend beyond one line.


Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.

Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit.




Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

Oh snap! Change a few things up and try submitting again.
Well done! You successfully read this important alert message.
Heads up! This alert needs your attention, but it's not super important.


Default Primary Success Warning Danger Info


Contextual alternatives





This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.

Learn more

List groups


Basic panel
Panel heading
Panel content
Panel content

Panel primary

Panel content

Panel success

Panel content

Panel warning

Panel content

Panel danger

Panel content

Panel info

Panel content


Look, I'm in a well!
Look, I'm in a small well!
Look, I'm in a large well!