a CSS LTR ∞ RTL converter for i18 friendly layouts
JavaScript CSS
Latest commit dbc72c1 Aug 7, 2014 @BYK BYK Merge pull request #31 from ded/multi-bg
Support multiple background-position values
Failed to load latest commit information.
bin added stdin and out reading and writing Jun 11, 2012
.gitignore Ignore IntelliJ files Dec 4, 2013
README.md Move shields next to the main header Jan 18, 2014
example.css handles important declarations. fixes and closes #11 Jun 19, 2012
example.rtl.css handles important declarations. fixes and closes #11 Jun 19, 2012
package.json Bump up the version to 1.4.3 Aug 5, 2014
r2.js Support multiple background-position values Aug 5, 2014


R2 build status NPM version

R2 helps you achieve cross-language layout-friendly websites (including bi-directional text). It looks like this:

/* before */
#content {
  float: left;
  margin-right: 2px;
  padding: 1px 2px 3px 4px;
  left: 5px;
.info {
  text-align: right;

/* after */
#content {
  float: right;
  margin-left: 2px;
  padding: 1px 4px 3px 2px;
  right: 5px;
.info {
  text-align: left;

Install it

$ [sudo] npm install R2 -g

Use it as a CLI

Print to stdout

$ r2 input.css

Print to output file

$ r2 input.css output.css

Print to output file without compression

$ r2 input.css output.css  --no-compress

Read from output of another command

$ lessc input.less | r2 > output.css

Require it as a Node module

var output = require('R2').swap(css)

Test It

$ npm test


R2 will only work as good as what you give it, therefore inline-styles embedded in your HTML will not converted, and therefore may cause unexpected results. However inline-styles apart from R2 is still a bad idea, and you should avoid it anyway in favor of separating content from presentation.

Happy layout Swapping!