inline css for react et al
JavaScript HTML
Latest commit 5ec5418 Jan 17, 2017 @threepointone 2.20.22
Failed to load latest commit information.
docs . Dec 30, 2016
examples bip Dec 28, 2016
new move to src Dec 28, 2016
perf some tests, misc Oct 29, 2016
src Fix placeholder support Jan 5, 2017
tests add data-glamor as an attribute to the style tags generated Dec 28, 2016
webpack css`` vars Nov 30, 2016
.babelrc use object-assign instead of Object.assign, merge up Dec 27, 2016
.editorconfig Add .editorconfig file Aug 28, 2016
.gitignore upgraded glamor/reset Dec 13, 2016
.stylelintrc move stuff around Oct 25, 2016
.travis.yml try to fix travis Nov 30, 2016 Stylesheet::replace(index, rule), ::delete(index) Oct 18, 2016 point to from root Dec 30, 2016
aphrodite.d.ts added typings Sep 9, 2016
aphrodite.js - extract stylesheet into own module Aug 23, 2016
babel-hoist.js prep package for babel hoist Dec 28, 2016
babel.js prepping for css literals Nov 21, 2016
index.d.ts enhanced typings Jan 3, 2017
jsxstyle.d.ts added typings Sep 9, 2016
jsxstyle.js recover 4k by using local react/lib/CSSPropertyOperations (!) Aug 22, 2016
ous.d.ts Update ous.d.ts Sep 10, 2016
ous.js *glamorous*!!! first cut Aug 8, 2016
package.json 2.20.22 Jan 17, 2017
react.d.ts add support for propMerge() in react package Oct 27, 2016
react.js react integration! Aug 10, 2016
reset.js include reset at base Aug 8, 2016
server.js - extract stylesheet into own module Aug 23, 2016
styled.js some some Nov 21, 2016
utils.d.ts added typings Sep 9, 2016
utils.js - extract stylesheet into own module Aug 23, 2016
yarn.lock yarn Jan 17, 2017


Join the chat at

build status

css in your javascript

npm install glamor --save


import { css } from 'glamor'

// make css rules 
let rule = css({ 
  color: 'red',
  ':hover': {
    color: 'pink'
  '@media(min-width: 300px)': {
    color: 'green',
    ':hover': {
      color: 'yellow'

// add as data attributes
<div {...rule} {...another}>

// or as classes 
<div className={`${rule} ${another}`}>

// merge rules for great justice 
let mono = css({
  fontFamily: 'monospace'

let bolder = css({
  fontWeight: 'bolder'

<div {...css(mono, bolder)}>
  bold code!


This expands on ideas from @vjeux's 2014 css-in-js talk. We introduce an api to annotate arbitrary dom nodes with style definitions ("rules") for, um, the greater good.


  • fast / efficient, with a fluent api
  • ~8k gz, including the prefixer
  • framework independent
  • adds vendor prefixes / fallback values
  • supports all the pseudo :classes/::elements
  • @media queries
  • @supports statements
  • @font-face / @keyframes
  • escape hatches for parent / child / contextual selectors
  • dev helper to simulate pseudo classes like :hover, etc
  • server side / static rendering
  • tests / coverage
  • experimental - write real css, with syntax highlighting and linting

(thanks to BrowserStack for providing the infrastructure that allows us to run our build in real browsers.)



speedy mode

there are two methods by which the library adds styles to the document -

  • by appending css 'rules' to a browser backed stylesheet. This is really fast, but has the disadvantage of making the styles uneditable in the devtools sidebar.
  • by appending text nodes to a style tag. This is fairly slow, but doesn't have the editing drawback.

as a compromise, we enable the former 'speedy' mode NODE_ENV=production, and disable it otherwise. You can manually toggle this with the speedy() function.


while glamor shares most common attributes of other inline style / css-in-js systems, here are some key differences -

  • uses 'real' stylesheets, so you can use all css features.
  • rules can be used as data-attributes or classNames.
  • simulate pseudo-classes with the simulate helper. very useful, especially when combined when hot-loading and/or editing directly in devtools.
  • really fast, by way of deduping rules, and using insertRule in production.


profit, profit

I get it