The Bootstrap Blog

News and announcements for all things Bootstrap, including new releases, Bootstrap Themes, and Bootstrap Icons.

Bootstrap 3.1.1 released

Today we’re releasing Bootstrap v3.1.1. As our first patch release for the v3.1.x release series, we’ve focused on CSS bug fixes, documentation improvements, and further refinements to our build tools. See the included changelog for more details.

Download Bootstrap

Download Bootstrap directly from GitHub:

Download Bootstrap 3.1.1

Hit the project repository or Sass repository for more options.

Bootstrap CDN

Update your CDN links to point to the v3.1.1 files:

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="">

<!-- Optional theme -->
<link rel="stylesheet" href="">

<!-- Latest compiled and minified JavaScript -->
<script src=""></script>

Full changelog


  • #11659, #12349, #12698: Always show the input above appended buttons in input groups for proper focus and disabled state borders.
  • #12025: Ensure responsive utility classes can be combined with one another.
  • #12195: Apply .btn:focused styles to for improved accessibility.
  • #12412: Refactored and renamed our internal grid mixins for generating custom number of grid columns.
  • #12433: Use negative margin on .list-inlines so we don’t override the padding-left on the first list item.
  • #12448: Use @navbar-height instead on .navbar-brand to prevent element from being shorter than navbar height. Corrects a change introduced in v3.1.0.
  • #12462: Add border-radius to tables when in panels for proper rounding with all background settings.
  • #12470: Scope large modal styles to minimum viewport width.
  • #12486: Restore full-width inputs for input groups in inline forms and navbars.
  • #12502: Remove long-deprecated :-moz-placeholder styles.
  • #12532: Scope popover arrow styles to immediate children.
  • #12552: Fixes two typos in carousel.less for the Glyphicon classes.
  • #12620, #12621: Use :extend(.img-responsive) instead of mixin in thumbnail and carousel.
  • #12625: Only remove top and bottom borders on list groups in panels if the list group is the first or last element.
  • #12629: Override the default rounded corners in iOS’s search input with -webkit-appearance: none;.
  • #12633: Properly reset borders on table cells in panels.
  • #12639: Drop the unsupported by Opera -o-user-select.
  • #12659: Add @blockquote-font-size variable for calculated text size.
  • #12673: Use @popover-arrow-width for popover offsets.
  • #12674: Update popover border colors to use computed values rather than static ones.


  • #523: Rails 3.2 compatibility
  • #518: scale mixin Sass compatibility issue
  • Updated Bower docs


  • #12436: Update docs, examples, and tests to use jQuery v1.11.0.


  • #12437: Note specific versions of IE where progress bar animation is supported.
  • #12439: Correct docs error about available grid resets.
  • #12477: Clarify supported versions of Internet Explorer (we do v8-11) in browser support docs.
  • #12494: Update docs to reflect modal remote change from #11933.
  • #12497: Remove manual full-width container callout now that there’s .container-fluid.
  • #12512: Improve alignment of the Dashboard example placeholder images.
  • #12519: Add Bower badge to README.
  • #12527: Clarify that dropdowns always require data-toggle="dropdown".
  • #12543, #12544, #12545, #12546: Various fixes to the v2.x to v3.x migration docs.
  • #12555: Rearrange variables to place grids and containers closer together in Customizer.
  • #12564: Distribution zip folder renamed to be more descriptive.
  • #12589: Add “Back to top” link to bottom of sidenav.
  • #12590: Add link to Korean translation.
  • #12610: Better and more consistent prefixing of docs CSS with .bs-docs-.
  • #12611: Mention limitation of one JavaScript plugin’s data attributes per element.
  • #12614: Add progress bar example with visible label.
  • #12645: Omit semicolons consistently in JS examples.
  • #12655: Upgrade holder.js to v2.3.1 so docs images are rendered properly in Internet Explorer >=9.


  • #12455: Fix typo in Dashboard example’s CSS.
  • #12512: Improve alignment of the Dashboard example’s placeholder images.
  • #12526: Add scrollbars when necessary to the Dashboard example’s sidebar.
  • #12579: Improve sticky footer examples to avoid any wrappers and improve rendering in IE8.
  • #12695: Fixed transitions on offcanvas example by adding initial left and right values.

Build tools

  • #12466: Add the examples’ CSS to the csslint task.
  • #12531: Add /docs/dist/ to the clean task.
  • #12534: Allow the bootstrap package in npm to directly expose CSS and Less files.
  • #12568: Add the examples’ CSS to the csscomb task.
  • #12581, #12583: Reorganize all Grunt tasks into one directory so that grunt runs properly in Bower installations.
  • #12605: Use license object instead of licenses array in Grunt.

For an even more complete list of changes, see the v3.1.1 milestone.


Bootstrap 3.1.0 released

Today we’re stoked to ship Bootstrap v3.1. We’ve got a handful of new features, plenty of bug fixes and improvements, and updated build tools.

New docs

New Bootstrap docs

We’ve made tons of changes across the board, most notably to our documentation. Just like v2.1 brought a brand new design, v3.1 overhauls the docs to refocus on the actual documentation rather than the chrome around it. Our new homepage restores the quick run through of key features and showcases some awesome examples from the Expo.

Official Sass port

Bootstrap for Sass

The best part about v3.1 is that we’re shipping with an official Sass port. A few weeks ago we moved over the most popular port on GitHub and made it official—Bootstrap is now available in Sass. Rather than bloat the main project with support for Less and Sass—and all the documentation for both—we’ve kept them separate for the time being. Prominent links in the docs are included though, so enjoy!

New examples

New examples

We’ve added three new examples: Blog, Cover, and Dashboard. Each example provides a single page of awesomeness for you to quickly get started on a project built with Bootstrap. They’re responsive and ready to go.

Improved features

A handful of features that aren’t exactly new to Bootstrap have seen an update in v3.1:

  • Modals now include optional sizes
  • Dropdowns now have their own alignment classes for easier customization
  • Form feedback styles for validation states now include optional icons to reinforce color changes

All-in-all these make components more focused, more durable, and easier to work with. See the changelog included with the GitHub release for the complete list of new features.

Remote modal content

One of the more important improved features is for our modals. If you currently use the modal’s remote option, be aware this release may break your modals. Yes, this is a breaking change, but it’s first and foremost a bug fix that corrects a rather longstanding and overlooked error. Our apologies for any headaches it may cause, but it’s been missed in the last few patch releases.

See the #11933 pull request for details on the code changes.

New license

We’ve been talking about it for what seems like forever, but thanks to all our contributors and the core team, we’ve finally done it. As of v3.1, Bootstrap ships under the MIT license to allow as many people to utilize Bootstrap as possible. Thanks to all our contributors for helping make it happen.

Improved build tools

We’re constantly trying to improve our tools for developing Bootstrap and v3.1 brings a slew of updates to do just that.

  • We’ve switched from Recess to grunt-contrib-less for our compiler, giving us access to Less 1.6.x (as opposed to 1.3.x with Recess).
  • Our compiled code is virtually identical in formatting and organization thanks to CSScomb and some other Grunt-fu.
  • Tests also run a tad faster with the help of some magical caching and parallelization.
  • The web Customizer is now generated from a Grunt task, meaning we’ll never miss updating or adding a variable again. If you contribute to Bootstrap regularly, just run grunt and commit to update the page.

Heads up! If you develop Bootstrap locally, be sure to nuke your node_modules/ directory and run npm install before getting started with v3.1.

Download Bootstrap

Get downloading now, or see the list below for more information on what’s new in this release. Download it from GitHub or snag it from the CDN:

Download Bootstrap 3.1.0

Or, hit the project repository or Sass repository.

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="">

<!-- Optional theme -->
<link rel="stylesheet" href="">

<!-- Latest compiled and minified JavaScript -->
<script src=""></script>

Full changelog

New features

  • Three new templates: Blog, Cover, and Dashboard.
  • #10884: Add .info variant to contextual table classes.
  • #11138: Add contextual styles to list groups.
  • #11162: Add new sizes, .modal-lg and .modal-sm, to modals for quicker settings on modals. Only applies to modals above the small breakpoint.
  • #11193: Add <kbd> element styles to indicate user input via keyboard.
  • #11244: Add .animation() mixins.
  • #11572: Add contextual background-color classes to match our existing text classes. (This also moves both sets of classes to the Helper Classes section of the CSS docs.)
  • #11675: Add .text-justify class to round out the text alignment classes.
  • #11836: Add new form control feedback classes to toggle icons for each validation state. Works on regular forms, horizontal, and inline.

While we originally wanted v3.1 to include RTL support, we decided to hold back on that for some potentially beneficial unreleased tooling. We’ll share more on that when we know more, but suffice to say it’s been bumped to v3.2.

CSS changes

  • #10951: Add outline: 0 to .modal to prevent a focus outline from appearing in Chrome for Windows.
  • #11107: Add @modal-backdrop-opacity variable for customizable modal backdrop.
  • #11266: Apply a pixel-based line-height that matches the height to date inputs for iOS 7 for proper vertical alignment of text in the form control.
  • #11286: Add @well-border variable.
  • #11302: Refactor the responsive utility classes to cut a few hundred lines of CSS (more context in #11214).
  • #11435: Prevent the double borders between multiple buttons in an input group.
  • #11561: Add float: left; to .form-controls within input groups to prevent IE9 from screwing up placeholder text and select menu arrows.
  • #11588: Scope font-size to only <p> elements in .jumbotrons and remove the super-sized line-height from the base class to avoid interference with sub-components.
  • #11676: Add -webkit-overflow-scrolling: touch; to modals for smooth scrolling on iOS devices.
  • #11744: Clean up some incompatible properties in forms.less: block level inputs no longer receive vertical-align: middle; unless necessary, e.g. in inline forms.
  • #11748: Updated .scale() mixin so that it accepts optional vertical scale as second parameter.
  • #11750: Reverts v3.0.3’s refactor to contextual table classes to ensure they work with striped tables.
  • #11757: Darken default navbar toggle bars to meet WCAG criteria.
  • #11766: Use @color variable in .button-variant() mixin to set background-color on .badges in buttons for proper default button badge styles.
  • #11741: Don’t set @headings-font-family to the same font stack as the <body>; instead, just use inherit for same default CSS.
  • #11786: Nest media queries within print utilities for mixin-friendliness.
  • #11790: With upgrade to Less v1.6.0, remove duplicate CSS generated from the nested .clearfix class and mixin by switching to &:extend(.clearfix all).
  • #11801: Use correct variables for grid containers.
  • #11817: Rework input groups to use the font-size: 0; and white-space: nowrap hack for a more durable component with regards to code formatting and custom font size changes.
  • #11829: Add .make-xs-column mixins to complement the recently added extra small predefined grid classes.
  • #11836: Along with the form validation update, we reset some key form and icon styles:
    • All .form-controls within inline forms are set to width: auto; to prevent stacking of .form-label within a .form-group.
    • Removes all select.form-control settings since those are now inherited by the above change
    • Removes the width: 1em; from the Glyphicons because it was virtually impossible to override.
  • #11841: Breadcrumb padding values now use variables.
  • #11859: Restore @dropdown-caret-color variable, but deprecate it.
  • #11861: Add @list-group-active-text-color variable for improved customization on active list group items.
  • #11868: Cleanup modal z-index values in modals.less.
  • #11990, #12159: Make range inputs block level and 100% wide by default.
  • #12073: Make order of component variations consistent throughout the repo.
  • #12164: Fix value of SVG font ID and removed hard coded value.
  • #12171: Ensure panel groups have a bottom margin since we nuke it on child panels.
  • #12247: Add and use .text-emphasis-variant() mixin for emphasis classes. Also updated emphasis classes to only apply :hover styles to linked content.
  • #12248: Add and use .bg-variant() mixin to generate background classes.
  • #12249: Add and use @modal-md Less variable for uniformity.
  • #12250: Remove print margins per upstream H5BP change, thus deferring to browser defaults, or users’ custom values should they set them.
  • #12286: Only remove appropriate border-radius from first and last tables or list groups in panels.
  • #12353: Scope table border reset in panels to first-child rows.
  • #12359: Reset min-width on <fieldset>s so they don’t break responsive tables and behave more like standard block level elements.
  • #12406: Upgrade to Normalize v3.
  • #12422: Reset height on select[multiple] in .input-size() mixin.
  • #12424: Given Normalize v3 upgrade, account for change on <figure> element so that we don’t cause backward compatibility issues.
  • #12388: Apply a fixed height to .navbar-brand to ensure adding a Glyphicon doesn’t increase it’s height.
  • Updated <blockquote> to no longer thin text or modify line-height for improved readability.

JavaScript changes

  • #9318, #9459, #10105: Properly place remote content within the .modal-content instead of .modal-body (see note above).
  • #10044: Check that href id’s are followed by valid characters in dropdowns.
  • #10134: Don’t use jQuery offset directly because it uses sub pixel rendering.
  • #10199: Correct and events firing too early in tooltips and popovers.
  • #10205: Enable support of arbitrary characters in Scrollspy targets.
  • #10236: Properly calculate offset positioning for affix plugin when reloading a scrolled window.
  • #10260, #10568, #10740: Properly hide tooltips and popovers if no animation is set.
  • #10283: Prevent IE8 from complaining about $.support.transition.end.
  • #10327: Correctly reset carousel when the slide event is prevented.
  • #10359: Pass $element to offset top/bottom calc funcs for better dynamic offsets.
  • #10658: Don’t let popover content lose bound events on second setContent call.
  • #10675: Ensure scrollspy target in tab content works properly.
  • #10709: Be consistent about type of quotes in our JS—switches double quotes to single quotes throughout.
  • #10761: Don’t create new tooltip/popover objects just to destroy them immediately.
  • #10798: Modal namespacing.
  • #10801: Restore .collapse to .in after collapsing animation finishes in collapse plugin.
  • #10834: Only preventDefault on click on [data-toggle="modal"] when the element is a link.
  • #10890: Calling $().button(state) shouldn’t enable a disabled button.
  • #10911: Add loaded event for use with modal’s remote option.
  • #10921: Input groups within button toolbars are now supported.
  • #11203: Improve scrollspy’s handling of hidden targets.
  • #11288: Save vertical scroll position of modal between openings.
  • #11362: Update affix and scrollspy on speedy scroll to top of page.
  • #11373: Add related target to dropdown events.
  • #11379: Fix carousel this.sliding not getting reset if $next.hasClass('active').
  • #11416: Use the transition duration from the CSS for the carousel.
  • #11496: Clear tooltip timeout on destroy.
  • #11555: Add @tooltip-opacity variable.
  • #11720: Add events (affix, affixed, affix-top, etc) to affix plugin.
  • #11722: Use document scroll height instead of offset height in affix plugin.
  • #11788: Use focusin/focusout instead of focus/blur for tooltip and popover focus trigger for Firefox and Safari.
  • #11825: Add dropdown ARIA roles.
  • #12270: Add namespace .bs also to the event dismiss.modal.


  • #10370: Deprecated the .pull-right method for aligning dropdown menus. Includes the following changes:
    • Removed an old and unused pair of selectors that didn’t properly target the right-aligned navbar alignment of dropdown menus.
    • Deprecates the .pull-right alignment in favor of a more specific and unique class name.
    • Adds .dropdown-menu-right as the new alignment class. This is then mixin-ed into the .navbar-right.navbar-nav dropdown menus for auto-alignment (keeping the current behavior we have today).
    • Adds new ability to override that auto-alignment though with the new .dropdown-menu-left, which is mixin-ed in the same way to provide the appropriate specificity of an override. This should never need to be used except for within right-aligned .navbar-nav components.
  • #11660: Deprecate small and .small in blockquote citation in favor of footer element.
  • #12398: Deprecate .box-shadow() mixin.


  • #10486: Add note about data-toggle dropdown dependency.
  • #10505: Document more of our Less variables and mixins (not all, but the commonly used ones).
  • #11158: Customizer’s variables are now generated via Grunt task from the variables.less file.
  • #11447: Document that modal remote URL is only loaded once.
  • #11655: Normalize disabled inputs and buttons in iOS with opacity: 1;.
  • #11723: Mention removal of .pill-content and .pill-pane in the migration guide.
  • #11738, #11765: Load minified assets in the docs to improve performance.
  • #11742: Add link to French translation in About page (v3.0.3 saw Ukrainian added as well).
  • #11760: Remove mailing list links from readme and about pages.
  • #11764: Add meta tags to docs for description, keywords, and authors.
  • #11770: Move component-animations.less to the utility section of import list to match Customizer
  • #11830, #11832: More help for Windows users installing Jekyll with requirement of Python and link to @juthilo’s guide, Run Jekyll on Windows.
  • #11876: Enable failHard grunt-html-validation option.
  • #11977: Concatenate and minify all docs assets.
  • #12037: Move docs .html pages and assets into docs/ subfolder to clean up project root directory. Also moves .csscomb.json and .csslintrc to less/ to further clean up project root.
  • #12073: Make order of component variations consistent throughout the repo.
  • #12244: Move v2.x to v3.x migration docs to a separate page.
  • #12311: Expand information on how to handle overflowing content in navbars.
  • #12314: Add warning about modal markup placement affecting modal appearance/functionality.
  • #12345: Add note about printer viewport weirdness.
  • #12380: Add link to unofficial German translation,
  • Updated browser and device support documentation:
    • #11055: add mention of select menu styling on Android stock browsers with included optional fix.
    • Update IDs and docs nav to include bookmark links to each section.
    • Add callout to navbar docs about fixed position, inputs, and virtual keyboard.

Build system & packaging

  • #11761: Add JavaScript Code Style checker integration.
  • #11739: Lint docs-assets/js/application.js and docs-assets/js/customizer.js.
  • #11780: Don’t ignore Gruntfile.js or package.json in bower.json as they’re required for compilation.
  • #11790: Switch from Recess to grunt-contrib-less.
    • Dropped grunt-recess for grunt-contrib-less to get the latest version of Less (v1.6.x) since Recess was still quite behind.
    • Adds CSScomb to take place of Recess’s CSS linting. Includes custom .csscomb.json in project root with basically the same property order as Recess.
    • Fixes duplicate CSS generation from the nested .clearfix class and mixin by switching to &:extend(.mixin all) (also mentioned in changes section).
    • Compiled CSS looks only slightly different—yay!
  • #11804: Enable CSS source maps in grunt-contrib-less.
  • #12003: Customizer now compiles theme.less with updated values.
  • #12315: Add npm caching based on npm-shrinkwrap.canonical.json.

Bootstrap 3.0.3 released

Today we’re shipping another patch release, v3.0.3, to fix a few dozen bugs and improve our documentation.

Download Bootstrap 3.0.3 or hit the GitHub repository

Key changes

There are a few dozen bug fixes and changes in this release, but we’ve called out the ones we think matter most:

  • Padding of .navbar-collapse and alignment of .navbar-right:last-child elements has been reworked.
  • Added a max-width: 100%; to .containers.
  • Restored the twelfth column’s float: left; at all grid tiers.

See the list below for more information on those changes and more.

Specific bug fixes and changes

  • #9927: Update non-responsive example to prevent .navbar-collapse border from increasing height and increase specificity of nav selectors to keep dropdowns looking the same.
  • #10147: Remove outline from carousel controls on focus.
  • #10353: Tell Bower to ignore development and documentation files.
  • #10483, #10357: Make .container mixin-friendly by moving the width declarations within one class.
  • #10662: Enable individually linked images within thumbnails.
  • #10744: Use border-style: solid; on .carets to undo a previous Firefox fix that appears to no longer work.
  • #10936: Increase height of large inputs to fix Firefox inconsistencies by using ceil() instead of floor().
  • #10941: Fix Glyphicons path for those importing bootstrap.less from another directory.
  • #10979: Don’t use .img-thumbnail as a mixin for .thumbnail to avoid duplicate and unnecessary styles.
  • #11217: Fix vertical alignment of labels within buttons, just like badges in buttons.
  • #11268: Account for badges within buttons by matching background to text color and text color to background.
  • #11277: Drop the abbr element from the .initialism selector.
  • #11299: Support .h1 in jumbotrons.
  • #11351: Correct grid class reset on input groups by using attribute selector, not an old class from v3 betas.
  • #11357: Vertically center .btn-sm and .btn-xs variations of .navbar-btns in the navbar.
  • #11376: Don’t deselect radio buttons when double clicking.
  • #11387: Improve nesting on table classes to enable easier use of mixins.
  • #11388: Simplify contextual table styles mixin (also drops the border parameter since we longer apply that anyway).
  • #11390: Add max-width: 100%; to containers within jumbotrons to avoid horizontal scrollbar.
  • #11402: Set width: auto; on select.form-control within .form-inline.
  • #11414: Add .small support to blockquote citations.
  • #11425: Use margin instead of padding on .modal-dialog to click-thru to .modal-backdrop.
  • #11432: Corrected color contrast to WCAG 2.0 AA for @state- variables (applies to forms and labels).
  • #11444: Use @navbar-padding-vertical for nav links vertical padding.
  • #11449: Prefer Menlo over Monaco for monospaced fonts.
  • #11468: Prevent default gradient background-image on .navbar-toggle in Firefox for Android.
  • #11476: Remove unnecessary prefixed keyframe declarations for animated progress bars. Given our browser support requirements, we can drop the -moz- prefix as the last several versions don’t require it.
  • #11477: Use namespace events for dropdowns and carousel.
  • #11493: Ensure proper width of dropdown buttons within vertical button groups.
  • #11499: Switch from overflow-y: auto; to overflow-y: visible; to prevent vertical scrollbar in some navbar situations.
  • #11502: Add missing data namespace for dropdown plugin.
  • #11513: Float navbar-text elements only when screen width is above @grid-float-breakpoint.
  • #11515: Reorder the headings with body text and text emphasis classes.
  • #11516: Invert dropdown divider border in navbars.
  • #11530: Reworked padding on .navbar-collapse and negative margin for right-aligned navbar content to ensure proper alignment on the right side.
  • #11536: Add support for button dropdowns within justified button groups.
  • #11544: Add color: inherit; to .panel-title to ensure proper text color when customizing @headings-color.
  • #11551: Remove color from outline reset for improved outlines on focus.
  • #11553: Prevent double border on tables in panels without thead content.
  • #11598: Remove line breaks in minified CSS.
  • #11599: Explicitly call out font files in bower.json to avoid npm errors.
  • #11610: Add @grid-float-breakpoint-max to better link navbar behavior across viewports and improve customization when setting @grid-float-breakpoint.
  • #11614: Account for responsive tables within panels.
  • #11617: Include jspm package configuration in package.json.
  • #11623: Reset position to static for grid columns within tables to prevent borders from hiding in IE9, IE10, and Firefox.
  • #11648: Restore twelfth column’s float.
  • #11658: Increase min-height of .radio/.checkbox for horizontal forms to ensure alignment of content below.
  • #11693: Adds .table to responsive visibility mixin.
  • #11694: Remove unnecessary prefixes for gradient mixins given our stated browser support.
  • #11712: Better support for .table-responsive within .panel’s.
  • Removed browser default top margin from dls. Commit

Docs changes

Be sure to run npm install if you’re running grunt locally—we’ve updated our build process and have some new dependencies.

  • #9898: Improve scrollspy and affix plugin documentation.
  • #10716: Update “What’s included” docs section with info on full source code download directory structure.
  • #11303: Add link to the docs site in compiled assets, and remove personal usernames.
  • #11330: Add overflow-x: hidden; to body in offcanvas example to prevent horizontal scrolling.
  • #11369: Speed up jQuery and Twitter widgets on docs pages by using Google’s CDN for jQuery and the async snippet from the Twitter dev site for the widgets.
  • #11385: Warn about Webkit bug for justified nav example.
  • #11409: Add release checklist to contributing guidelines.
  • #11412: Add word-wrap: break-word; to docs Glyphicons class names to ensure proper wrapping in IE10-11.
  • #11434: Mention form validation class changes in migration docs.
  • #11534: Document that modal show() and hide() return before animation finishes.
  • #11634: Add warning to docs to not combine icon classes with other elements.
  • #11671: Updated third party asset libraries (for Customizer and Holder, our thumbnail utility).
  • #11701: Switch to Sauce Labs for our cross-browser JS unit testing needs.
  • Removed mention of Chrome from Webkit rendering bug for justified nav. Commit

As always, get the details from the v3.0.3 milestone.

Up next

Next up is v3.1.0, the first new feature release for Bootstrap 3. Stay tuned for more information on what’ll be in that release as we continue to plan out subsequent releases.


@mdo and team

Bootstrap 3.0.2 released

Today we’re shipping a quick v3.0.2 patch to fix incorrect version numbers in our JavaScript files, restore missing grid classes, and make a few improvements to our documentation.

Download Bootstrap 3.0.2 or hit the GitHub repository

Key changes

Here’s the rundown on what’s changed:

  • #10039: Remove window.jQuery for jQuery.
  • #11273: Add branch alias for composer.json.
  • #11295: Restore offset, push, and pull zero classes (e.g., .col-md-offset-0)
  • #11315: Add navigation role to example navbars.
  • #11327: Improve nesting of .thumbnail styles.
  • #11334: Remove unnecessary & from CSS nesting for panels.
  • #11335: Add Grunt task to update version numbers across entire project. (Note: If you run our docs locally, you’ll need to run npm install in order to run grunt).
  • #11336: Don’t use nonstandard window.location.origin in Customizer.
  • #11345: Remove duplicate class changes in migration instructions.
  • #11349: Add screen reader text for navbar toggles.
  • #11378: Use .navbar-* alignment classes in .navbar-text example.
  • Update Node to v0.10.x (current stable)
  • Fix links to same-page anchors
  • Drop media type on basic template example
  • Correct download links in readme

As always, get the details from the v3.0.2 milestone.

Up next

This release was unplanned, and as such it bumps a lot of planned fixes to a v3.0.3 release. We’ve already updated the relevant issues to be under the new v3.0.3 milestone. Look for that release, and perhaps another patch, before v3.1.0 ships in the coming months.


@mdo and team

Bootstrap 3.0.1 released

Today we’re shipping v3.0.1, a huge patch release with over 750 commits since v3 was released two months ago. We’ve outlined most of the changes below, including documentation updates, bug fixes, and even a few deprecations (our first in the history of the project).

Download Bootstrap 3.0.1 or hit the GitHub repository


Compared to previous releases, we’re going into a bit more detail here with the docs and bug fixes. Expect more of this with future releases.


  • #9880: Use medium grid classes on jumbotron example
  • #9887: Document .show and .hide classes
  • #9908: Add type="submit" to Customizer compile button to prevent accidental submissions
  • #9915: Fix inaccurate comment in media query docs
  • #9917: Updated broken download link in README
  • #9924: Removed non-ASCII character from non-responsive example CSS
  • #9928, #9932: Update carousel example to work in IE10 and correctly display navbar in narrow viewports
  • #9931: Add ARIA role="toolbar" to elements with .btn-toolbar in docs examples
  • #9991: Better docs for tabbable tab markup and its fade option
  • #10011: Update Grunt instruction links and wording
  • #10012: Add David to project readme to monitor dependency currentness
  • #10034: Use npm-registered recent version of grunt-html-validation instead of its git repo
  • #10040: Better cross referencing of default and navbar pull utilities
  • #10042: Updated JS Fiddle tooltip delegation example linked in docs
  • #10045: Use v2.3.2 release ZIP instead of master zip for downloads from old docs
  • #10081: Documents workaround for tooltips+popovers on disabled elements
  • #10082: Documents .navbar-form
  • #10087: Add version number to all docs pages (in the footer)
  • #10088: Updates accessibility docs regarding nesting heading elements
  • #10112: More role attributes in the docs, this time on link buttons
  • #10126: Update responsive test cases to properly highlight hidden class examples
  • #10131: Corrects button group selector in JavaScript docs
  • #10136: Broken image link in Carousel example
  • #10146: Document data-ride carousel feature
  • #10209: Fixed broken dismissable alert example
  • #10215: More compressed touch icons, updates Respond.js to v1.3.0 and html5shiv.js to v3.6.2, adds bugs to package.json
  • #10249: Correct component name of jumbotron component in Jumbotron example
  • #10272: Removed unused link for nav alignment in Components page
  • #10277: Mention removal of navbar vertical dividers in migration docs
  • #10278: Change Google Maps compatibility warning to a general box-sizing warning with optional reset
  • #10282: Cross reference tabs and tabs plugin
  • #10298: Add progress bar to migration docs
  • #10299, #10323: Getting Started wording changes
  • #10316: Document .active and :active for buttons
  • #10324, #10338: Restore opt-in warning for tooltips and popovers
  • #10342: Update affix docs to better communicate plugin behavior
  • #10344: Update IE8-9 support section with table of specific CSS3 and HTML5 features and their support in Bootstrap
  • #10372: Homepage now shows two download buttons, one for our assets (CSS, JS, and fonts) and one for the source code (the entire repo)
  • #10382: Update Disabling responsiveness docs section for brevity
  • #10411: Color coded IE8-9 browser support table
  • #10414: Carousel now uses Glyphicons as default left/right chevron icons (text icons are still supported)
  • #10417: Document .hidden in the Helper classes Screen reader content section
  • #10419: Add nav lists to migration guide
  • #10453: Add additional screen reader text to button group dropdown toggles
  • #10459: Update Customization section in Getting started page
  • #10492: Account for responsive tables in panels
  • #10497, #10584: Fix Windows 8 and Windows Phone 8 behavior in Internet Explorer 10 and applies “bug fix” to docs
  • #10528: Add new About page to the docs with backstory, core team, community links, and translations
  • #10573: Un-hardcode tooltip arrow widths and padding for easier customization
  • #10591: Add modal remote option semantics change to migration docs
  • #10693: Include a copy of the docs license as a file in the repo
  • #10711: Address 100% fluid layouts in grid docs and the required padding
  • #10768: Fix mention of renamed .img-polaroid class in Migration docs
  • #10770: Rename /assets to /docs-assets to reduce confusion between /dist and docs dependencies
  • #10790: Disable IE compatibility mode in all docs pages and examples
  • #10856: Update grid docs to better explain the sizing and interactions when using multiple grid tier classes
  • #11013: Use CDNs for jQuery and HTML5 shiv
  • Add blog link back to docs homepage
  • Remove links to navbar examples from example navbars in Theme example
  • Delete smaller touch icons and only include one
  • Remove unused mention of .prettyprint styles from code.less (we no longer use that plugin and the class is undocumented, so we’re nuking it)
  • Remove unnecessary left and right properties from .modal-dialog since we use margin to center the modal
  • Add Linux Firefox to supported browsers list
  • Update outdated JSFiddle example

Bug fixes and changes

  • #9855: Partial fix for open modal content shifting: removed all margin settings to prevent some of the content shifting. Still needs JS love to detect scrollbars and adjust content accordingly (will address in v3.0.2).
  • #9877: Add improved .active state to navbar nav in theme
  • #9879: Add hover state (move gradient up 15px) to theme buttons]
  • #9909: Add @component-active-color variable to complement @component-active-bg (and apply it to dropdowns, nav pills, and list group items)
  • #9964: Add fonts directory to bower.json main files list
  • #9968: Simplify striped progress bar mixin to remove unused color
  • #9969: Add support for output element by styling it more like our .form-control
  • #9973: Removed unnecessary -ms-linear-gradient prefix
  • #9981: Account for hover and focus states on pagination disabled items
  • #9989: Set monospace font-family on <kbd> and <samp> to match browser defaults
  • #9999: Make .table-hover styling apply to <th> within contextual table rows too
  • #10013: Position carousel left and right controls from the left and right, respectively
  • #10014, #10406: Update grid to use width on .containers instead of max-width as IE8 doesn’t fully support box-sizing: border-box when combined with min/max width/height
  • #10022: Add width: 1em; to all empty Glyphicons to prevent loading flicker
  • #10024: Use negative margin to fix the border between button and input in input groups
  • #10025: Add additional transform mixins
  • #10057: Autohiding scrollbars in responsive tables for Windows Phone 8
  • #10059: Add .transition-property() mixin
  • #10079: Native-style scrolling in responsive tables for iOS
  • #10101, #10541, #10565: Generate CSS file banners via Gruntfile
  • #10111: Use different colors for dropdown link hover and active states
  • #10115: Default carousel controls and Glyphicon controls should behave the same on small devices and up
  • #10153: Restore @headings-color variable
  • #10154: Add .small to pair with our heading classes (e.g., h1 and .h1)
  • #10164: Document .center-block() mixin and update CSS to include it as a class
  • #10169: Remove old @navbar-inverse-search-* variables
  • #10223: Add @input-color to .input-group-addon to match the form controls
  • #10227: Use correct max-width on Offcanvas example media query and add overflow-x: hidden to prevent scrollbar on narrow devices
  • #10232: Scope .table styles to immediate thead, tbody, and tfoot elements
  • #10245: Add @breadcrumb-separator variable for customizing breadcrumbs
  • #10246: Use correct variable for link hover color in Customizer
  • #10256: Use @navbar-default-brand-color within the @navbar-default-brand-hover-color variable
  • #10257: Remove filter on navbars in theme.less so that dropdowns can be triggered in IE<10
  • #10265: Scope background-image reset to Bootstrap buttons and form controls only to avoid Android Firefox bug
  • #10336: Replace non-ASCII dash in LESS source file
  • #10341: Don’t change border color on contextual table classes
  • #10399: Add hover styles to text emphasis classes
  • #10407: Add line-height to progress bar for proper text alignment within
  • #10436: Use @screen-sm variable instead of hardcoded pixel value in type.less
  • #10484: Allow for .table-bordered in panels by removing side and bottom margins
  • #10516: Use auto positioning for dropdowns in justified nav to fix Firefox rendering
  • #10521: Only remove bottom-border from last row of cells in tbody and tfoot within responsive tables
  • #10522: Enable use of form validation class on .radio, .checkbox, .radio-inline, and .checkbox-inline
  • #10526: Remove custom background on responsive tables and set it in the docs where it should’ve been originally
  • #10560: Remove display: block; from address element since browsers set that to start
  • #10590: Mention required jQuery version in docs
  • #10601: Use overflow-y: auto; for .navbar-collapse instead of visible to better enable scrolling on Android 4.x devices (see issue for more details on support and gotchas)
  • #10620: Remove filter on buttons for IE9 in theme.less due to bleed-through with rounded corners (matches behavior and style of Bootstrap 2.x)
  • #10641: Remove unused .accordion-toggle class from docs example
  • #10656: Inherit link and caret colors for textual dropdowns in panel headers
  • #10694: Remove unnecessary content property from .caret
  • #10695: Ensure carets in .nav-pills dropdown links inherit active color
  • #10729: Removed the unnecessary override and the !important from .wrap in the sticky footer examples
  • #10755: Don’t remove quotes around q element by default
  • #10778: Use newly-updated Glyphicons to workaround old Android WebKit bug
  • #10763: Update html5shiv to v3.7.0
  • #10863: Fix check for presence of jQuery
  • #10893: Remove comma separating the color and the color-stop in -webkit-linear-gradient in #gradient > .vertical mixin
  • #10927: Scope padding-top on .form-control-static to horizontal forms only
  • #10949: Use variable for jumbotron font-size instead of hard-coded value
  • #10959: Round .lead font-size to nearest whole pixel
  • #10997: Move .hidden from responsive utilities to utilities (where it belongs, especially on account of deprecated .hide per #10769)
  • #11050: Restore grid mixins
  • #11126: Remove box-shadow from .btn-link.dropdown-toggle
  • #11127: .navbar-fixed-bottom should have a top border, not a bottom border
  • #11139: Add position: relative; to .modal-dialog so that the z-index takes effect
  • #11151: Remove rogue H5BP .ir class from print styles
  • #11186: Add background-color hacks so that clicking carousel indicators in IE8-9 works as intended
  • #11188: Refactor z-index on navbars. Removes the default z-index: 1000; and instead only applies it to static-top, fixed-top, and fixed-bottom. Also fixes up the broken default navbar example’s fubared padding.
  • #11206: Remove padding-left from first list item within .list-inline
  • #11244: Adds .animation() mixin to replace .progress-bar’s regular CSS animation properties (and drops the -moz, -ms, and -o prefixes as they are not needed per
  • #11248: Apply background-color: #fff; to selects in print styles to fix Chrome bug
  • Audited Customizer variables section and rearranged content


  • #9963, #10567: Deprecate @screen-* variables for @screen-*-min to better match the @screen-*-max variables and provide more context to their actual uses.
  • #10005: Finish removing uses of @screen-{device} variables by deprecating them for @screen-*-min wherever possible.
  • #10100: Deprecate .hide-text mixin for .text-hide. This matches our class-mixin strategy elsewhere (e.g., .clearfix) and ensures the class and mixin use the same name to avoid confusion.
  • #10125: Deprecate inconsistent container variables for new @container-{screen-size} variables (e.g., use @container-sm instead of @container-tablet)
  • #10769: Deprecate .hide for .hidden so we don’t duplicate functionality.

For even more details, see the 3.0.1 milestone.

Moving to MIT license

We’ve been looking to move to the MIT license for quite some time, and today’s release takes us that much closer. Starting with v3.0.1, all new contributions to Bootstrap will be dual-licensed as Apache 2 and MIT. The intent is to move the entire project (including all prior contributions) to the MIT license in a future version (hopefully v3.1.0).

To make the change, every contributor to Bootstrap must consent to relicense their changes (since we have no CLA). We’re making excellent progress on that front with the community’s help and will address holdouts as they come up.

As a heads up, we’ve placed notices in the contributing guidelines and our project readme about the pending change and transition period.

It goes without saying that we don’t need to do this, but we want to make Bootstrap available to all communities who cannot currently use it due to licensing conflicts. Theoretically these communities could change their licenses, but when you step back and objectively look at the situation, it’s much easier for us to change. We hope you understand and stick it out with us as we make the move.

Growing the team

The Bootstrap core team doubled a few months ago when we added Chris and Julian to the project. They’ve helped manage issues, written some awesome code, and provided critical input in the direction of the project. As Bootstrap grows, so too must our core team, and we’re once again actively seeking new team members.

It’ll be a slow process, much like last time, but we need the help on several fronts to keep us shipping and iterating. In particular, we’ll be keeping an eye out for folks with top notch CSS and JavaScript skills.

Up next

We’re already tracking issues for a v3.0.2 release and its changes will be along the same lines as today’s release—bugs and docs. v3.1.0 will likely ship after that sometime with a few new features. As always, no dates have been set yet for any future releases.


@mdo and team