My Open Source Projects

Markdown Navigator

Open source version of the plugin. This version has the same preview capabilities as the licensed version but lacks the support for advanced features such as find usages, refactoring, reformatting annotations and quick fixes.

The plugin for Markdown language support on IntelliJ IDEA, RubyMine, PhpStorm, WebStorm, PyCharm, AppCode, Android Studio, CLion and DataGrip.

GitHub Wiki

Open Source Markdown Navigator

JetBrains plugin page

Missing In Actions

JetBrains plugin page

Adds missing editor actions for end of word navigation but that is just the beginning:

  • Automatic Selection stack, stores last 5 selections by default. Recall last selection or any previous selection from a list.

  • Enable Auto Indent Lines after move line/selection up or down actions to have them indented automatically.

  • Use Smart Paste to eliminate case change and prefix edits when pasting identifiers. MIA will match case and style of identifier at destination when you paste, undo to get results before MIA adjusted them.

    Copy myColumnData and paste it over DEFAULT_VALUE to get COLUMN_DATA, reverse the order and get myDefaultValue.

    Works when pasting at the beginning, end and middle of identifiers.

    Supports: camelCase, PascalCase, snake_case, SCREAMING_SNAKE_CASE

  • Enable Auto Line Selections and select full lines without loosing time or column position by moving the caret to the start of line when selecting or pasting.

    Choose whether you want to paste full line selections: above or below the current line regardless of the caret’s column.

  • Toggle between selection and multiple carets on selected lines to save time re-selecting the same text again.

  • Filter multiple carets saves you time when creating multiple carets by removing carets on blank or comment lines so you can edit only code lines.

  • Enhanced Paste from History dialog:

    • combine, arrange and reverse the order of content entries
    • combine multiple clipboard contents with caret information intact
    • paste and re-create multiple carets from information already stored on the clipboard
    • duplicate line/block for each caret in the clipboard content and put a caret on the first line of the block, ready for multi-caret select and paste
    • see caret information stored on the clipboard for each content entry
  • Many more options and adjustments to make multiple caret text editing fast, efficient and easy.

Plugin website: Missing In Actions GitHub Repo

Bug tracking & feature requests: Missing In Actions GitHub Issues


flexmark-java is a fork of commonmark-java project, modified to generate an AST which reflects all the elements in the original source, full source position tracking for all elements in the AST and easier JetBrains Open API PsiTree generation.

The API was changed to allow more granular control of the parsing process and optimized for parsing with a large number of installed extensions. The parser and extensions come with many tweaking options for parser behavior and HTML rendering variations. The end goal is to have the parser and renderer be able to mimic other parsers with great degree of accuracy.

Motivation for this was the need to replace pegdown parser in Markdown Navigator plugin. pegdown has a great feature set but its speed in general is less than ideal and for pathological input either hangs or practically hangs during parsing.

Latest Additions

flexmark-java source

flexmark-java wiki


reverse-regex is a Java utility library that allows Java to perform backward search using standard RegEx Java classes on a reversed character sequence of original text.

reverse-regex source

Laravel 5 Translation Manager

This package is used to comfortably manage, view, edit and translate Laravel language files with translation assistance through the Yandex Translation API. It augments the Laravel Translator system with a ton of practical functionality. Features

Detailed information is in the wiki.

Laravel 5.1 Scaffold Generators

This Laravel package provides a variety of generators to speed up the development process. I used it extensively in creating this site for creating the Models, Database Migrations, Translation files, Controllers and Administration forms for all the database objects, including updating the routes.php file that maps all web requests to controller methods. In Laravel each model needs 6 files in order to follow the framework’s conventions. Doing this by hand is a PITA but with generators it is a piece of cake.

Using this package I create a bash script with the artisan commands for each scaffold to be generated. The generated models have been tweaked to my own conventions which include Model and Controller traits to allow remote database synchronization. What this means is that I can create/edit models on my local development environment and then push them to the production server. The code to handle foreign key resolution, creating missing related models, updating changed models, etc. is all generated automatically from the model description to the generators and the trait for the Model and Controller that handles remote model updates.

The forms for displaying the list of a model with filters and detailed create/edit/view/delete form are also generated. The detailed forms do require rearranging the fields to create a nicer fit since the generators put all fields into rows in the form. However, it is a 30 second edit and the model can be created, edited, viewed and deleted in the admin panel.

This package is a work in progress and not quite ready for prime time simply because I have not updated the wiki documentation with examples of how I use it and document the additional classes/traits that are required to implement the fancy features. The templates included in the package are original ones from before the fork and have none of the goodies that were added since.

The wiki. New features are documented for the most part in the Release Notes

Contributor on Open Source Projects


JetBrains’ IntelliJ IDEA Community Edition an indispensable source of JetBrains API knowledge. If you are building plugins for IntelliJ IDEs then you should have the ability to run a version built from source. Nothing beats reading actual source code to understand what is going on with your plugin and why.

Proud contributor of a few small bugs and feature patches. Some of which have been accepted. Two years ago I could not get it built, a year ago I could not figure out where to begin. Today, I feel comfortable hacking features and fixing bugs.


YouTrack: JetBrains Issue Tracker


pegdown a pure Java library for clean and lightweight Markdown processing based on a parboiled PEG parser. You can download pegdown source on GitHub.

pegdown is nearly 100% compatible with the original Markdown specification and fully passes the original Markdown test suite.

On top of the standard Markdown feature set pegdown implements a number of extensions similar to what other popular Markdown processors offer. You can also extend pegdown by your own plugins! Currently pegdown supports the following extensions over standard Markdown:

Script Monkey

scriptmonkey is an IntelliJ plugin that helps achieve the power & flexibilities of nashorn scripting in a plugin environment. It helps Java achieve the best of both worlds.


Thanks to the embedded Nashorn & Scripting API it is an all-in-one plugin which means, anything that was possible only by writing a plugin can be done using plugin-scripts(simple javascript code). And, any tasks that makes more sense to be scripted can be implemented using this tool.

There are some differences between Rhino and Nashorn, see the Rhino Migration Guide.

Constructive comments and suggestions are welcome. I can also be reached me at