Fact-checked by Grok 2 weeks ago

SciTE (SCIntilla based Text Editor)

SciTE is a , open-source based on the Scintilla editing component, originally developed by Hodgson as a demonstration tool for Scintilla's features. It serves as a lightweight suitable for programmers, with built-in support for across multiple programming languages and tools for compiling and executing code directly from the interface. First released in the late alongside Scintilla, SciTE has undergone continuous development, reaching version 5.5.8 as of November 2025, and is distributed under a permissive similar to that of , imposing very few restrictions on use and modification. Its design emphasizes simplicity and efficiency, making it ideal for tasks requiring straightforward configurations rather than complex , though it can be extended with additional property files for enhanced language support and integrations. SciTE is cross-platform, with native support for and later (including 64-bit executables), Linux distributions using 2.24 or newer (such as 24.04 and 43), and source code builds for other environments; a commercial version is available for macOS via the . Key functionalities include automatic syntax styling, multi-document , and integration with build systems, positioning it as a reliable alternative for developers seeking a minimal yet capable environment without the overhead of heavier integrated development environments ().

Introduction

Overview

SciTE is a cross-platform, designed primarily for programmers, with a strong emphasis on editing. It serves as both a practical tool for editing and a demonstration platform for the underlying Scintilla editing component, offering facilities to build and run programs directly from the interface. The editor supports and later versions, as well as systems using 2.24 or newer on 64-bit Intel-compatible processors. A commercial version is available for macOS through the . As of November 2025, the current release is version 5.5.8, available for download from the official Scintilla website, with the Windows package (scite558.zip) approximately 5.6 MB and the package (gscite558.tgz) around 3.9 MB. SciTE is distributed under the Historical Permission Notice and Disclaimer (HPND) license, which permits free use, copying, modification, and distribution for any purpose, provided the and permission text are retained in all copies.

Development and Licensing

SciTE was developed by Neil Hodgson as a demonstration tool for the Scintilla editing component library, which he also created. Originally intended to showcase Scintilla's capabilities, SciTE has since evolved into a standalone while remaining closely tied to the library's development. The editor is implemented in C++ and relies on Scintilla for its core text editing functionality and Lexilla for and , both libraries authored by Hodgson. This technical foundation ensures efficient, customizable editing features, with SciTE serving as the primary to illustrate Scintilla's potential in real-world applications. SciTE is distributed under the Historical Permission Notice and Disclaimer (HPND) license, which grants permission to use, copy, modify, and distribute the software and its documentation for any purpose without fee, provided that the copyright notice appears in all copies and supporting documentation. The license disclaims all warranties, including merchantability and fitness for a particular purpose, and limits liability for any damages arising from its use. Development is primarily maintained by Neil Hodgson, with community contributions accepted through patches discussed on the scite-interest , which sees low but steady activity of fewer than five messages per week. The project is hosted on scintilla.org, where is freely available, and new releases are announced via the mailing list and .

History

Origins and Early Development

SciTE was developed by Neil Hodgson between 1998 and 1999 as a application for the newly created Scintilla editing library, with initial focus on the Windows platform. The project emerged from Hodgson's work to address limitations in existing editors for dynamic languages like , particularly in tools such as PythonWin, by providing a lightweight demonstration of Scintilla's capabilities. The core motivation behind SciTE's creation was the need for a straightforward that could fully exercise Scintilla's advanced features, including lexer integration for and styling, while avoiding the overhead of a complex . This approach allowed Hodgson to showcase and refine Scintilla's functionality in a practical, self-contained environment without dependencies on larger frameworks. Version 1.0 of SciTE was released in 1999, emphasizing basic text editing and syntax styling to highlight Scintilla's potential as an embeddable component for editing. Early builds were bundled with Scintilla releases, serving primarily as an exemplar rather than a full-featured tool at that stage. While initially Windows-centric, SciTE saw early ports to via the toolkit in 1999, enabling cross-platform testing and use on systems. These adaptations facilitated broader experimentation with Scintilla's portability across frameworks. Early community engagement began with contributions from developers, including those at ActiveState, who provided bug fixes and patches to stabilize the initial Windows and emerging versions. This involvement helped refine SciTE's foundational stability during its formative years.

Evolution and Major Versions

SciTE's evolution from the mid-2000s onward reflects a focus on enhancing , , and cross-platform , driven primarily by lead developer Neil Hodgson. In 2006, version 1.71 introduced multi-language support, allowing better handling of diverse character encodings and facilitating efforts. By 2009, marked a significant with the addition of tabbed interfaces for managing multiple documents and improved integration with environments through refined dependencies. The 2010s saw further refinements in core functionalities. Version 3.0, released in 2012, bolstered capabilities, enabling more sophisticated search and replace operations for complex patterns in code and text files. Advancing to 2017, version 3.7.5 served as the final release in the 3.x series, discontinuing compatibility with older compilers while incorporating features to modernize the codebase and improve build efficiency. During this period, full support for on was solidified by around 2010, ensuring robust performance on systems without reliance on outdated libraries. Entering the , SciTE emphasized scalability and niche enhancements. Version 4.0 in 2018 optimized handling of large files, reducing overhead and enabling efficient of substantial documents without performance degradation; version 4.1.0 introduced experimental right-to-left () text support to accommodate languages like and Hebrew, broadening for non-Latin scripts. Version 5.0, launched in 2021, included further enhancements. The latest iteration, version 5.5.8 released in 2025, addressed refinements such as fixing redraw issues after operations and improving selection for better across sessions. Community-driven builds for macOS have appeared sporadically, often adapting the core to Cocoa frameworks for occasional native support. Notably, prior encyclopedic coverage, such as Wikipedia's entry, remains incomplete, halting at foundational developments around 1999 and omitting these post-2017 advancements along with key contributor influences.

Core Features

Text Editing Capabilities

SciTE provides robust basic editing features built on the Scintilla editing component. It supports multi-level and redo operations, allowing users to reverse or reapply a sequence of changes without a fixed limit, constrained only by available . Brace matching is enabled by default through the braces.check=1 property, which highlights matching braces in a specific style (style 34) and indicates mismatches (style 35) to aid in code structure verification. Auto-indentation is configurable via indent.automatic=1, using the indent.size (default 4 spaces) and use.tabs properties to automatically align new lines based on the previous line's indentation, enhancing productivity for entry. File handling in SciTE accommodates diverse formats and sizes efficiently. It supports and encoding with the code.page=65001 setting, automatically detecting UTF-8 and UTF-16 files via byte order marks or coding cookies, enabling seamless editing of multilingual content. Line ending conversions are managed through eol.mode (supporting LF, , or CRLF) or auto-detection with eol.auto, ensuring compatibility across Windows, Unix, and legacy systems. Since version 4.0.5, SciTE's 64-bit builds handle large files exceeding 2 GB using 64-bit positions, with the file.size.large property (default 100 MB) optimizing loading for substantial documents without performance degradation in basic operations. Navigation tools in SciTE facilitate quick movement within documents. Bookmarks are implemented using markers, configurable with colors via bookmark.fore and bookmark.back , allowing users to mark and toggle lines for easy reference. The go-to line feature, accessible via Ctrl+G or the -goto:line command-line argument, enables direct jumping to specific lines by number. Virtual space support, controlled by virtual.space (options 1-4), permits cursor movement beyond line ends for rectangular selections or precise positioning, improving for columnar editing tasks. The user interface includes elements designed for efficient multi-document and dual-pane workflows. Split panes separate the editing area from an output pane, togglable via the Options > Vertical Split menu or split.vertical property (0 for horizontal, 1 for vertical layout), allowing simultaneous viewing of source and results. A tabbed interface for multiple files is enabled by setting buffers to a value between 1 and 100 (default 1 disables tabs), with tabbar.visible controlling the tab bar's display, supporting up to 100 open buffers for organized file management. Performance optimizations ensure SciTE remains and responsive. Efficient rendering of long lines is achieved through threads.layout for multi-threaded calculations and cache.layout (levels 0-3) for caching line measurements, reducing redraw times in documents with extended lines. Minimal resource usage is maintained by limiting background operations, such as with background.open.size and background.save.size (default -1 for unrestricted), and disabling features (accessibility=0) to lower , making it suitable for resource-constrained environments.

Syntax Highlighting and Folding

SciTE employs syntax highlighting through Lexilla, a dedicated library of language lexers integrated with the Scintilla editing component, enabling automatic styling based on file extensions or user-specified language modes. This process tokenizes into lexical elements such as keywords, strings, comments, and operators, applying distinct visual styles to enhance readability. Lexilla provides support for over 90 programming, markup, and data languages, including C++, , , , and , among others like Ada, , CSS, and SQL. Built-in lexers handle common scenarios, while extensibility allows integration of custom or external lexers for additional languages. The highlighting mechanism relies on static rather than full , which ensures efficient performance but may limit accuracy for highly dynamic languages with runtime-dependent syntax. Users can customize styles for each lexer element—such as foreground and colors, font faces, sizes, , and italics—via files, allowing to personal preferences or themes. For instance, keywords in might be rendered in bold blue, while comments appear in italic gray, improving code navigation and comprehension without altering the underlying text. Code folding in SciTE complements highlighting by outlining document structure, collapsing expandable regions like functions, classes, conditional blocks, and multi-line comments into compact summaries. This feature supports hierarchical folding across multiple levels, determined by language-specific markers: indentation for , braces for C++ and , or explicit annotations like //{ and //} for certain configurations in languages without natural delimiters. Approximately 34 languages, including C++, , , , and , natively support folding, with fold points visualized in a dedicated margin using configurable symbols such as signs, arrows, or box trees, often accompanied by color-coded lines to indicate folded regions. Folding operations are user-initiated via clicks on margin markers, keyboard shortcuts (e.g., Ctrl+Shift+N for toggling), or automatic expansion on file open, configurable through like fold.on.open. This enables efficient handling of large files by hiding irrelevant sections while preserving the ability to expand them on demand. Like highlighting, folding depends on static detection of structure, potentially requiring manual markers in less structured code, and does not perform updates for changes in dynamic contexts.

Advanced Functionality

Build Integration and Output

SciTE features a configurable build system that enables users to compile and execute source code directly within the editor, streamlining the development workflow. Commands for building and running are defined in properties files using patterns like command.compile.*.c=gcc -Wall $(FileNameExt) for C files or command.go.*.py=python -u $(FileNameExt) for Python scripts, allowing per-language customization. These commands can be invoked through the Tools menu, keyboard shortcuts (e.g., F7 for compile, F5 for go), or programmatically, supporting both direct executables and makefile-based builds via properties such as command.build.*.c=make. The output pane serves as a dedicated for displaying results from build and execution commands, capturing warnings, messages, and stdout/stderr in . Positioned either below or to the right of the editing pane (configurable via split.vertical=1), the pane can be resized with properties like output.vertical.size=1 and automatically cleared before each run if clear.before.execute=1 is set. This setup facilitates quick iteration, as users can monitor processes without switching applications. Error integration is handled through built-in parsing of output from tools like and interpreters, enabling the "Next Message" (F4) and "Previous Message" (Shift+F4) functions to jump directly to the line causing an error in the source file. Multi-file error navigation is supported when filenames are recognized in the output, enhancing efficiency without manual line searching. For more sophisticated integration, SciTE's interface allows external applications—such as project managers—to send commands to control builds, monitor file states, and handle outputs via messages like output:<text> or open:<path>, on Windows through WM_COPYDATA and on /GTK through input fifos. This enables automated workflows, such as tracking compilation progress or integrating with [version control](/page/version control) systems.

Search and Replace Tools

SciTE provides robust search and replace functionality tailored for efficient text navigation and editing in source code files. The basic search mechanism includes an incremental find feature, where typing in the find dialog highlights matches in real-time as the user enters the search term, allowing for quick location without committing to a full search. Users can initiate searches via the Find dialog (accessible through Ctrl+F), which supports options such as case-sensitive matching, searching in reverse direction, and wrapping around the document ends to continue from the beginning if necessary. Find next and previous operations are available via and Shift+F3 keys, respectively, enabling rapid iteration through matches, while the replace dialog (Ctrl+H) facilitates straightforward substitutions with prompts for each occurrence. For more complex pattern matching, SciTE supports regular expressions in searches and replacements, using a basic regex engine that includes features like character classes (\d for digits, \s for whitespace, \w for alphanumeric), quantifiers (* for zero or more, + for one or more), anchors (^ for line start, for line end), and capturing groups for tagged subexpressions (either or ( ) depending on [configuration](/page/Configuration)). This allows users to define patterns such as \([a-z.]+) to references like $(name.subname), with replacements supporting backreferences like \1 or \2 to reorder or transform matched text. The regex mode is toggled via the find.replace.regexp property (default off) and does not across line boundaries, ensuring predictable behavior in multi-line . C-style escapes (\n for , \t for ) are interpreted in search strings for handling control characters. Replace operations extend beyond single instances to global changes, permitting substitutions across the entire document, a selected range, or only within highlighted matches, with the option for user confirmation on each replacement to avoid unintended modifications. In regex-enabled replaces, C-style escapes can be applied via the find.replace.escapes property, enhancing for repetitive edits such as reformatting numbers from ( [0-9]+ ),( [0-9]+ ) to \2,\1. can be limited to the current selection for precision in large documents. Multi-file search capabilities are handled through the "Find in Files" command (Ctrl+Shift+F), which integrates external tools like by executing a configurable command specified in the find.command property, targeting files or directories defined in find.files (e.g., ".cpp;.h" for C++ projects). Results are displayed in the output pane, where matches can be navigated using (next) and Shift+F4 (previous), facilitating review across sessions or project structures without opening each file individually. This approach ensures efficient handling of large codebases by leveraging system utilities for scalability. SciTE's search and replace tools are designed for in large files, with incremental highlighting and regex optimized by the underlying Scintilla component to minimize during operations, though multi-file searches defer heavy computation to external programs for better responsiveness.

Configuration

Properties Files

SciTE's configuration is primarily managed through properties files, which allow users to customize editor behavior, appearance, and functionality without a graphical . These files follow a simple key-value format where each line defines a property as property.name=value, with comments prefixed by # and support for encoding to handle international characters. The file structure includes several levels for organization and specificity. The global configuration is defined in SciTEGlobal.properties, a default file provided with the that sets baseline options applicable to all files; it is not intended for direct modification and is overwritten during updates. User-specific settings are stored in user.properties, typically located in the 's or profile folder, enabling personalized overrides without affecting the global file. Language-specific configurations, such as python.properties or cpp.properties, apply targeted settings like rules to files of particular types, loaded based on the file's extension or lexer. Additionally, directory-based files like SciTE.properties can be placed in project folders to apply settings scoped to specific workspaces. Key properties cover a range of editor and elements. For editor settings, users can adjust font and size with properties like font.base=[Arial](/page/Arial) and font.size=10, control margins via margin.width.n=0 for line numbers or folding, and configure behavior using caret.fore=#000000 for color or caret.width=2 for thickness. customizations are handled through properties such as menu.language=Options|IDM_OPEN|Open...~ to add or reorder items in context menus. These properties influence runtime aspects like indentation and wrapping but are distinct from dynamic scripting. The configuration hierarchy ensures flexibility and precedence. Settings load in the order of , , (if enabled), and local files, with later files overriding earlier ones; for instance, a in user.properties supersedes the equivalent, while a directory-specific file takes precedence over settings. Directory overrides are activated by setting properties.directory.enable=1 in a higher-level file, allowing project-specific tweaks like initial working directories via variables such as $(FileDir). This layered approach supports both broad and granular control. Examples illustrate practical usage. To define a style for keywords in C++, one might set style.cpp.1=fore:#0000FF in cpp.properties, which colors them blue and ties into broader mechanisms. Hotkeys can be assigned with user.shortcuts=Ctrl+Shift+F|IDM_REPLACE, binding the key combination to the Find and Replace command. For , open.filter=$(FileDir)*.* in a directory properties file restricts file opening to the current . Such configurations are applied upon SciTE startup or when switching buffers. Management of properties files requires manual text editing using any editor, as SciTE provides no built-in for this purpose. Changes take effect after saving the file and restarting SciTE or reloading via the Options menu's "Reload " command, ensuring immediate application without complex procedures. Users are encouraged to back up custom files before modifications to preserve settings across installations.

Lua Scripting

SciTE integrates an embedded interpreter, enabling users to extend and automate editor functionality through scripting. This feature, introduced in version 1.63, allows scripts to respond to editor events, manipulate text, and customize the . The interpreter uses 5.3, including all standard libraries, providing a lightweight yet powerful environment for runtime modifications. The Lua API in SciTE exposes several predefined objects for direct interaction with the editor's components. The editor object grants access to Scintilla functions, such as editor:GetText() for retrieving content or editor:SetText(text) for inserting text. Similarly, props:Get("key") retrieves properties, while scite.SendMessage() enables low-level over the editor . Additional objects like output for the output pane, buffer for file-specific data, and scite for application-level operations further enhance scripting capabilities. Scintilla constants and functions are available as Lua globals, facilitating precise without external dependencies. Common use cases for Lua scripting include creating custom macros to automate repetitive tasks, such as formatting code snippets or generating boilerplate. Event handlers, defined by naming functions after events like OnSave or OnChar, allow scripts to execute automatically during operations like saving a file or typing a character. UI extensions are possible through the scite.StripShow function, which creates dialog strips with buttons, text fields, and labels for user input, enabling features like custom tools. Scripts are loaded via properties files, with the ext.lua.startup.script setting specifying the primary startup file, often named SciTEStartup.[lua](/page/Lua). Additional s can be associated with file patterns using *.lua extensions, loaded on demand for language-specific enhancements like auto-completion. Global functions in these scripts can be invoked as menu commands under the Tools menu or bound to keys via the subsystem 3 configuration. Community-contributed examples, such as those for syntax-aware indentation or error highlighting, are shared on dedicated forums. External libraries cannot be loaded dynamically without custom builds or additional setup, as the interpreter is embedded and just-in-time initialized. While 14 core events are supported, some strip interactions, like changes, may not reliably trigger handlers due to implementation constraints. The feature can be disabled at using the NO_LUA build variable.

References

  1. [1]
    Scintilla and SciTE
    SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building ...
  2. [2]
    SciTE - Download
    Apr 3, 2025 · As a code editor based on the C++ programming language, SciTE is a great alternative for Notepad++ or XML Notepad. It's for regular programmers ...
  3. [3]
    Download - Scintilla and SciTE
    Download. The license for using Scintilla or SciTE is similar to that of Python containing very few restrictions. Release 5.5.8. Source Code.
  4. [4]
  5. [5]
    SciTE for OS X - Scintilla.org
    SciTE is customised through editing text files containing a list of properties in order to allow control with flexibility. Available for 12 years on Windows ...Missing: history | Show results with:history
  6. [6]
    SciTE: The Notepad++ for Linux - It's FOSS
    SciTE is a powerful open source text editor which has the ability to fill the void of Notepad++ in Linux.
  7. [7]
    Scintilla and SciTE
    ### Summary of SciTE from https://www.scintilla.org/SciTE.html
  8. [8]
  9. [9]
    License - Scintilla.org
    License for Lexilla, Scintilla, and SciTE Copyright 1998-2021 by Neil Hodgson <neilh@scintilla.org> All Rights Reserved Permission to use, copy, modify, and ...Missing: text | Show results with:text<|control11|><|separator|>
  10. [10]
    Scintilla download | SourceForge.net
    Rating 5.0 (90) · Free · DeveloperScintilla is a free source code editing component which includes useful features such as syntax styling, error indicators, folding, code completion and call ...
  11. [11]
    Project of the Month, July 2010 - SourceForge Community Blog
    Jul 1, 2010 · Download a current version of SciTE and replace its copy of Scintilla ... Neil Hodgson. Occupation:Software Developer Location: Sydney ...
  12. [12]
    SciTE
    ### Early Development History of SciTE (1998–2000)
  13. [13]
  14. [14]
    History of SciTE, Scintilla, and Lexilla
    First version that separates Lexilla from Scintilla. Each of the 3 projects ... Released on 29 April 1999, containing working GTK+/Linux version. The ...Missing: Hodgson | Show results with:Hodgson
  15. [15]
    SciTE - Wikipedia
    SciTE or SCIntilla based Text Editor is a cross-platform text editor written by Neil Hodgson using the Scintilla editing component.
  16. [16]
    SciTE
    Summary of each segment:
  17. [17]
  18. [18]
    Large files on Windows? - Google Groups
    Nov 17, 2023 · The 64-bit version of SciTE has used 64-bit positions for over 3 years now and can load 2.5 GB files - I just loaded a 4GB file and it worked correctly.
  19. [19]
  20. [20]
    SciTE - Scintilla
    Text editing in SciTE works similarly to most Macintosh or Windows editors with the added feature of automatic syntax styling.
  21. [21]
  22. [22]
    SciTE Director Interface
    ### Summary of SciTE Director Interface
  23. [23]
    SciTE Regular Expressions
    ### Summary of Regular Expression Support in SciTE
  24. [24]
    File "printhi.py", line 2, in <module> - Scintilla and SciTE
    Text editing in SciTE works similarly to most Macintosh or Windows editors with the added feature of automatic syntax styling.
  25. [25]
    SciTE Lua Scripting Extension - Scintilla.org
    The SciTE Lua Scripting Extension uses a copy of Lua 5.3 as its scripting engine. Currently, all of the standard libraries are included.Missing: history | Show results with:history<|control11|><|separator|>
  26. [26]
    lua-users wiki: Scite Scripts
    Feb 11, 2021 · This is a place for sharing your small Lua scripts for the [SciTE] text editor. New pages should generally start with "Scite" so we don't clutter the whole ...