Use https://github.com/jjlharrison/gulp-rtlcss, which is just a gulp wrapper of https://github.com/MohammadYounes/rtlcss

(Grunt wrapper available directly from RTLCSS author: \<https://github.com/MohammadYounes/grunt-rtlcss>)

To keep both LTR and RTL version, we will need also https://github.com/hparra/gulp-rename

Given that we have one main stylus file in e.g. app/stylus/main.styl and we wanna generate main.css and main.rtl.css in .tmp/styles/:

var gulp = require('gulp');
var stylus = require('gulp-stylus');
var rename = require('gulp-rename');
var rtlcss = require('gulp-rtlcss');
gulp.task("stylus", function (event) {
 return gulp.src("app/stylus/main.styl")
 .pipe(plumber())
 .pipe(stylus({}))
 .pipe(gulp.dest(".tmp/styles/"))
 .pipe(rename(function (path) {
 path.basename += ".rtl";
 }))
 .pipe(rtlcss())
 .pipe(gulp.dest(".tmp/styles/"));
});

How to tell RTLCSS to ignore some rules: (Thanks to @MK in comments)

/* Ignore whole rule */
/*!rtl:ignore*/
.example
 top: 20px;
 right 4px;

/* Ignore just declaration */
.test
 margin-left: 10px;
 padding-left: 10px @css{/*rtl:ignore*/};

Examples of behavior

Screenshots of results

Just for illustration