INTRODUCTION: CudaText is both an excellent general-purpose text editor, and an advanced, feature-rich programmer's editor, from the author of SynWrite, another programmer's editor, and shares most features with it. Both are free, open-source software, available from sourceforge. This review is based on CudaText 184.108.40.206 (2017-07-11) 64-bit Windows version.
AUTHOR: As with most open-source software, there are multiple contributors to the project. The sourceforge CudaText home page lists some of them, including the primary developer mentioned in the first paragraph.
The developers are very responsive to user feedback in their forums, and are open to users' suggestions. Replies are generally quick, and bug fixes and implementation of requested features is often amazingly fast. This doesn't mean that every feature requested will be implemented, but reasons are given for those which may not be.
CROSS-PLATFORM: While SynWrite is a 32-bit only, Windows-only program developed in Delphi (Pascal), its successor CudaText is developed in Lazarus, an IDE for Free Pascal, and is available in both 32-bit and 64-bit versions, for Windows, Linux, and Mac. I have used only the 64-bit Windows version, with which this review is being written, but intend to make CudaText my default on Linux as well.
INSTALLATION: Being portable, CudaText does not include an installer. Simply unzip the archive file into your installation directory. If Start Menu shortcuts are desired, they must be manually created.
CudaText does not use the registry for anything other than to set file associations. It keeps all of its settings in sub-directories of the installation directory. Unzipping the archive will create a /settings_default/ directory which contains the default settings, and a /settings/ directory which is initially empty and where the user's settings will be stored.
Since unzipping the archive does not place anything into the directory containing the user's settings, updating to a newer version can be done simply by unzipping the new version right over top of the original installation directory. My preferred method is to unzip the new version to a temporary directory, and then move the needed files to the installation directory. This safeguards against overwriting the user's settings, should the zip file happen to contain any files in that directory, which has been known to happen with some testing versions. As usual, of course, the user should always maintain backups.
FEATURES: CudaText sports an abundance of features, including projects, sessions, syntax highlighting, code folding, code tree, multi-carets, multi-selections, auto-completion, snippets, search/replace with regex, macros, tabbed interface, tab groups, split-views, minimap, micromap, bookmarks, many HTML/CSS features, customizable key mappings, themes, and so much more.
DISPLAY: In addition to the main client area where actual editing takes place, the program window supports a menu bar; a toolbar; a tab bar; a ruler; a status bar; the gutter which may display line numbers, bookmarks, and a folding bar; a sidebar (similar to a vertical toolbar); left-side panel which may display a project panel, code tree, or tab list; a right-side panel (actually part of the edit area) which may display the minimap and micromap; and a bottom panel which may display the console, output, validation, and search results.
The client area may have multiple tabs, each containing an individual file, and each tab may be split either vertically or horizontally to give two independent views of that file. In addition, the client area may be split into up to six individual groups which may be arranged horizontally and vertically. Each group may contain its own set of tabs, and again each of those tabs may be split. Tabs may be freely dragged between groups. Each tab, and each tab split-view, may independently toggle on/off its own ruler line, line numbers, folding bar, minimap and micromap, and those settings will remain with the tab if it is dragged to another group.
CONFIGURATION: CudaText is incredibly customizable. The sidebar may be turned on or off; the side and bottom panels, the gutter which contains the line numbers among other things, the toolbar, tab bar, ruler line, staus bar, etc. may all be toggled on and off. Themes may be applied. Custom colours (including background) and fonts may be set for the various elements, and the elements' sizes adjusted as, for example, setting the height of the tab bar, ruler line, status bar, etc. In addition, the spacing between text lines in the client area may be set, right down to the pixel. These settings allow the entire UI to be configured to perfectly fit a given amount of screen real-estate. The individual panels on the status bar (line/column numbers, tab size, lexer, etc.) may be turned on or off, their order re-arranged, and their contents set according to user preference. Even the main menu may be fully customized, with new menus and items being added, and existing menus and their items added to, renamed, re-ordered, or removed. All of the hotkeys (keyboard shortcuts) may be remapped, and the new hotkeys will also be displayed in the menus. And much more.
All of this customization comes at a price. Here CudaText, unlike its older brother SynWrite, has taken a Linux-like approach, with all settings contained in standard text files; in this case in .json format. To alter a setting, the user must edit the configuration file. This will present no problem for any experienced programmer or Linux user, but may be daunting for first-time CudaText users or neophyte computer users. But again like Linux, this issue is somewhat alleviated by graphical front-ends, dialogs implemented as plugins, to actually modify the configuration files for the user. CudaText may be used right out-of-the-box, but the best user experience will be realized if one takes the time to customize it to suit his own preferences.
PLUGINS: As much as CudaText is customizable, it is just as extensible by way of plugins. Plugins are an excellent way to add additional features which needn't be part of the core code. In fact, much of CudaText's existing functionality is implemented this way. Of course there remain certain types of operations (primarily live-editing functions), which don't work well as plugins, and are better implemented as part of the main code. More about this later.
The plugin manager allows the user to install, update, configure or remove plugins, to view an individual plugin's readme file or homepage, or to install a plugin directly from Github. The update function will scan the configured repositories, and show the user a list of installed plugins, with each one's installed date and version, along with the latest available date and version. Each plugin with a newer version available will be automatically selected, allowing the user to easily update them all at once, or he may manually choose which ones to update.
There are a large number of plugins available from a group of very capable authors, including general features, lexers, linters, snippets, themes, and translations. The user may also develop his own extensions. Most plugins are written in Python.
SYNTAX HIGHLIGHTING: CudaText shares its lexer engine with SynWrite, and it is one of the most powerful I have seen, sporting capabilities far beyond the syntax-highlighting abilities found in many other editors. According to the CudaText home page, more than 180 lexers are currently available, and that number is growing.
If the lexer you require has not yet been created, it is easy enough to create simple lexers. Developing with the more advanced features is, of course, more challenging, but nothing that an experienced programmer can't handle. The rub, though, is that while CudaText uses, and fully supports the same lexers as SynWrite, CudaText itself has no method to actually create a lexer. What is necessary is to install SynWrite, which has a full lexer-creation tool, and create the required lexer in SynWrite, which can then be used by CudaText.
WRITING: While it is an excellent general-purpose text editor, there can be little doubt that CudaText is primarily a programmer's editor, developed by programmers for programmers. A cursory glance at its features will show just how well suited it is to that task. Yet the developers have recognized that fact, and are now making a conscious effort to extend its abilities to accommodate more creative writing tasks as well. This is a welcome trend, which I hope we will see continue.
Just recently, we have seen abilities added to navigate, format, and justify paragraphs. Paragraphs may now be formatted with first-line indent, first-line hanging, as block or as quoted-block, and may be justified left, right, center, or full. And paragraph-specific navigation is now available, with commands to jump to the beginning of, end of, and to previous and next paragraphs.
Currently these functions are implemented via a plugin, and are on-demand only, rather than 'live.' This means that each time a formatted paragraph is edited, it must be re-formatted by pressing a hotkey, rather than being automatically re-formatted as editing takes place.
CudaText supports the usual full-screen mode, which causes the program to cover the entire screen, hiding the title bar and the Windows task bar. But it also allows the user to configure which program elements should also be hidden (if they are turned on), including the sidebar, toolbar, tab bar, status bar, left-side panel, bottom panel, and the gutter with all of its elements. In addition, it also has a distraction-free mode, which automatically hides all of those, leaving only the menu bar, ruler (if turned on), minimap/micromap (if turned on), and client area covering the entire screen, allowing the writer to concentrate entirely upon his text.
SPELLING: Earlier versions of SynWrite had excellent built-in, live spell-checking, which I made great use of. In my opinion it was one of SynWrite's best features. Later versions have moved the spell-checker to a plugin, and live checking is no longer available, though on-demand checking is still fine.
Unfortunately, 64-bit versions of CudaText have no spell-checking at all. And even on the 32-bit versions, the plugin-implemented, on-demand only spell-checking only checks text within comments and strings. Now, comment and string spell-checking is exactly what a programmer needs (that includes 64-bit programmers, of course), but falls far short of the needs of writers, or of even a general-purpose text editor. This is a huge short-coming, and I sincerely hope that the developers will consider reinstating the excellent earlier SynWrite live spell-checking behaviour for CudaText.
PERFORMANCE: CudaText was very fast on every task I put to it; no delays were experienced at all. This comes as no surprise, given the up-to-date hardware it was run on.
CONCLUSION: As a general-purpose text editor, CudaText more than meets the mark, and as a programmer's editor it really shines. It is also on the way to becoming a very good writer's editor. All, of course, with the exception of the missing spell-checker, which is its only real weakness, and one which it is hoped will be speedily rectified.
Given its feature set, its incredible configuration ability, its cross-platform availability so that the user can use all of his customizations on multiple platforms, and its price (free), one would be hard-pressed to find a better solution. Highly recommended.