Geany
Geany is a free and open-source lightweight integrated development environment (IDE) for programmers, designed to be fast, resource-efficient, and independent of desktop environments like GNOME or KDE, requiring only the GTK3 runtime libraries.[1] It supports syntax highlighting, code folding, symbol name auto-completion, code snippets, auto-closing of XML/HTML tags, call tips, and a build system across numerous file types including C, Java, PHP, HTML, Python, Perl, and Pascal, among others.[1] Initially released on October 19, 2005, as version 0.1, Geany is written primarily in C and licensed under the GNU General Public License (GPL), enabling its distribution and modification by the community.[2][1] Developed by a team of contributors including maintainer Colomban Wendling and others such as Nick Treleaven, Matthew Brush, and Enrico Tröger, Geany emphasizes simplicity with features like tabbed editing, project management, and a plugin interface for extensibility, without emulating full IDEs like Emacs or Vim.[1] It runs on multiple platforms, including Linux, FreeBSD, NetBSD, OpenBSD, macOS, Windows, AIX, and Solaris, making it versatile for developers seeking a minimal yet functional tool.[1] The latest stable release, version 2.1.0, was issued on July 6, 2025, incorporating updates such as integrated themes from the Geany-Themes project and various bug fixes.[3] Community support occurs via mailing lists, Matrix channels, and GitHub for issue tracking and contributions.[1]Overview
Description
Geany is a free and open-source graphical user interface (GUI) text editor designed primarily for programmers, incorporating basic integrated development environment (IDE) features.[1] It utilizes the Scintilla widget library for its advanced text editing capabilities and the GTK toolkit for its user interface.[1] Geany is licensed under the GNU General Public License version 2 or later (GPL-2.0-or-later), ensuring it remains freely modifiable and distributable.[1] The software's design philosophy emphasizes efficiency and simplicity, aiming for short startup times, a minimal set of dependencies, and a small overall footprint to avoid overwhelming system resources.[1] This makes Geany particularly suitable for small to medium-sized programming projects, where lightweight editing and project management are prioritized over heavy resource demands.[1] The name Geany is pronounced like "genie" (/ʒeːniː/), as confirmed in its official documentation.[4] It supports cross-platform usage on various operating systems, including Linux, Windows, and macOS.[1]Supported Platforms
Geany is a cross-platform integrated development environment primarily designed to run on Unix-like operating systems and Windows. It is known to operate on Linux distributions, macOS, Windows, various BSD variants including FreeBSD, NetBSD, and OpenBSD, as well as Solaris.[1] More broadly, its lightweight architecture allows it to function on other platforms such as AIX, provided the necessary dependencies are met.[1] To build Geany from source, developers require the GTK toolkit (version 3.24 or later) and the GLib library (version 2.56 or later), along with a C compiler, Make tool, and a C++ compiler for integrating the Scintilla editing component library, which is bundled in the source distribution.[5][6] Earlier versions supported both GTK+ 2 and GTK 3; however, version 1.37.1 marked the final release compatible with GTK+ 2.24, after which support shifted exclusively to GTK 3 to align with modern development practices.[7] On Windows, Geany lacks a built-in terminal emulator widget equivalent to the VTE library used on Unix-like systems, as no suitable cross-platform alternative has been integrated, requiring users to rely on external terminals for command execution.[8] Certain platform-specific functions, such as file handling and system interactions, leverage the Win32 API through the Windows port of GTK.[9] Geany's portability is enhanced by support for cross-compilation, enabling builds for Windows from Linux environments using tools like MinGW, which facilitates development without native Windows setup.[10] For non-Linux systems, third-party packages are available through package managers such as Homebrew and MacPorts on macOS, the official installer on Windows, and ports collections on BSD variants, simplifying installation without manual compilation.[11]History and Development
Origins and Initial Release
Geany was originally developed by Enrico Tröger as a personal project aimed at creating a lightweight and fast integrated development environment (IDE) to serve as an alternative to heavier tools like Anjuta and KDevelop, with a focus on Unix-like systems and minimal dependencies beyond the GTK2 runtime libraries.[12] This motivation stemmed from Tröger's need for a simple, efficient editor for coding and text editing tasks, prioritizing speed and independence from specific desktop environments such as GNOME or KDE.[12] The project began with an emphasis on core functionality for C and C++ programming, leveraging the GTK+ toolkit for the user interface and the Scintilla component for advanced text editing capabilities, including syntax highlighting.[6] Initial development kept the scope narrow to ensure quick load times and low resource usage, avoiding unnecessary features that could bloat the application.[1] Geany's first public version, 0.1, was released on October 19, 2005, marking the achievement of Tröger's basic goals for a functional, lightweight editor. Subsequent alpha releases refined these foundations, leading to the first stable version, 0.10, on December 21, 2006, which introduced improved syntax highlighting for multiple languages and rudimentary project management tools.[13]Major Releases and Milestones
Geany's development has seen a steady evolution through major releases, with a notable shift in version numbering occurring in 2012. Following the release of version 0.21 in October 2011, the project jumped to version 1.22 on June 18, 2012, to better reflect the software's maturity as requested by users. In late 2011, project leadership transitioned from Enrico Tröger to Colomban Wendling.[14] This change introduced significant enhancements, including a rewrite of theming support for improved customization, an update to Scintilla 2.29 for better editing capabilities, and full PCRE regular expression support in search and replace functions.[15] Subsequent milestones marked further advancements in functionality and platform support. Around 2010, improvements to Windows portability were implemented, including build fixes for better compatibility with GLib 2.8 and enhanced program path detection using AC_PATH_PROG for cross-platform consistency.[16] In October 2023, coinciding with Geany's 18th anniversary since its initial release on October 19, 2005, version 2.0 was launched, requiring GTK 3.24 and introducing the Change History feature (disabled by default) for tracking document modifications.[17][18] This release also featured GTK3 enhancements like a new tree view sidebar by default, simplified project creation without mandatory naming, updates to Scintilla 5.3.7 and Lexilla 5.2.7, and improved Python filetype support. On Windows, it transitioned to GTK dialogs from native ones for uniformity.[19] The most recent stable release, version 2.1.0 on July 6, 2025, focused on refinements including an update to Scintilla 5.5.4 for enhanced editing performance, bug fixes addressing issues like NUL byte truncation in files and editor focus on Windows, and filetype improvements adding support for Dart, Dockerfile, LESS, and others.[3][20] Key additions encompassed support for opening external files and directories in the File Browser plugin using xdg-open for improved compatibility on Linux and BSD systems, a Plugin Extension API for deeper core integrations, and Windows-specific enhancements like themed title bars.[21] Geany maintains a release cadence of typically 1-2 major versions per year, emphasizing stability, cross-platform compatibility, and incremental feature additions as evidenced by the progression from version 1.38 in 2021 to 2.0 in 2023 and 2.1.0 in 2025.[22]Core Features
Text Editing Tools
Geany provides robust syntax highlighting for over 50 programming languages and markup formats, including C, C++, Python, HTML, Java, PHP, Perl, and many others such as Rust, Scala, and YAML.[23] This feature relies on Scintilla's lexers to recognize filetypes based on extensions and content, applying color-coded styles to keywords, strings, comments, and other elements for improved readability.[24] Users can customize highlighting through the Color Schemes dialog, which allows selection from predefined schemes or modification of styles via configuration files likefiletypes.common and individual filetypes.*.conf files, using RGB hex values or named styles in the [styling] section.[25][26]
Code folding in Geany enables hierarchical collapsing and expanding of code sections, marked by [+] and [-] symbols in a left margin, to focus on specific parts of the document while hiding nested structures like functions or blocks in supported languages.[27] This is configurable in the Editor preferences, where folding styles can be adjusted or disabled entirely, and operations like folding all or unfolding all are accessible via the Document menu or keybindings such as Ctrl+Shift+N.[27] Complementing this, auto-indentation applies smart rules based on the current language, with options including basic indentation, matching braces, or current characters, and specific support for XML/HTML tags; it can be set per document or filetype in the [indentation] section of configuration files, using spaces, tabs, or a mix.[28][29]
Search and replace functionalities include incremental search via the toolbar for real-time matching as text is entered, full find/replace with regular expression support for complex patterns, and multi-file search across projects using Grep integration.[30] These tools are invoked through the Search menu or shortcuts like Ctrl+F for find and Ctrl+H for replace, with options to match case, whole words, or use regex delimiters.[31]
Additional editing aids enhance usability, such as automatic bracket matching that highlights corresponding pairs (e.g., parentheses, braces) in languages like C and C++, with navigation via Ctrl+B and styling for matched (brace_good) or unmatched (brace_bad) pairs.[26] Zoom in/out adjusts text size via View menu options or Ctrl++ / Ctrl+-, while line wrapping toggles to reflow long lines without altering the document, configurable in Editor preferences.[32][33] Character encoding detection automatically identifies formats like UTF-8, including byte-order marks (BOM), upon opening files, with manual overrides available in the file dialog or via "Reload as" to ensure proper display of international text.[34]
Geany's text editing is powered by the Scintilla widget, which provides lexers for precise filetype recognition and supports margin markers for annotations like errors (in red) or bookmarks (green plus icons), toggleable via the Bookmarks menu or shortcuts.[35][36] These markers appear in the left margin, aiding quick navigation without affecting the core editing workflow.
Integrated Development Tools
Geany provides a suite of built-in tools that enhance coding workflows by integrating project organization, compilation, execution, and navigation features directly into the editor. These tools are designed to support multi-language development without requiring external IDEs, emphasizing configurability and lightweight performance.[6] Project management in Geany allows users to organize files and settings into reusable workspaces. Users can create a new project via the Project menu, specifying a base path and file patterns to include or exclude files, which stores session data such as open documents and build configurations. When opening a project, Geany restores the associated files and applies project-specific overrides to global preferences, facilitating efficient switching between development tasks. This feature supports symbol parsing across the project for improved navigation.[37][38] The build system enables configurable compilation and execution of code through the Build menu, with commands tailored per file type or project. For instance, default commands like "Compile" use tools such as gcc for C files, while users can customize them via the Set Build Commands dialog to specify compiler flags, linkers, or execution parameters. Geany captures command output in a dedicated message window, allowing review of results before terminal interaction. This system supports custom toolchains by defining environment variables and paths in configuration files.[39][40] Symbol and tag support aids code navigation and productivity through integration with tag files generated by tools like ctags. Geany parses symbols from open files and the workspace upon loading or saving, populating a sidebar list for quick jumping to functions, variables, or classes. Global tags files, distributed with Geany or user-generated, enable auto-completion and call tips for keywords across languages, configurable per file type in preferences. This feature complements syntax highlighting by providing context-aware suggestions during editing.[41][42] Terminal emulation is embedded via the VTE library on Linux and BSD systems, allowing direct execution of build commands within Geany's interface. Users can toggle the terminal widget in preferences and configure it to run commands like "Execute" from the Build menu, with output captured for parsing. On Windows, where VTE is unavailable natively, Geany falls back to external terminals such as cmd.exe, maintaining workflow continuity across platforms.[43] Additional IDE tools include file type-specific commands and error message parsing to streamline development. Context actions, defined in file type configurations, provide menu items like "Indent" or "Comment" tailored to languages such as Python or HTML. Error parsing uses regular expressions to detect compiler warnings and errors in build output, underlining issues in the editor with red squiggles and enabling clickable navigation to affected lines in the message window. These features collectively reduce context-switching, supporting repetitive tasks through built-in automation.[44][45]Extensibility
Plugin System
Geany's plugin system is built around a C-based application programming interface (API) that enables developers to extend the integrated development environment (IDE) by integrating with core components such as editor events, user interface menus, and dialog boxes.[46] The API provides structures likeGeanyPlugin for metadata and function pointers, along with hooks for initialization (geany_plugin_init) and cleanup (geany_plugin_cleanup), allowing plugins to register callbacks for events like document saving or menu activations.[47] This interface supports dynamic interaction with Geany's GTK-based framework, ensuring plugins can modify behavior without altering the core source code.[46]
Plugins are installed through distribution package managers, such as apt-get install geany-plugins on Debian-based systems or by compiling from source tarballs using autotools (./configure && make && make install), requiring dependencies like GTK development libraries.[48] Once installed, plugins load dynamically during Geany's startup process, scanning designated directories for shared object files (.so on Unix-like systems).[49] Management occurs via a graphical user interface (GUI) plugin manager accessible from the Edit menu, which lists available plugins and allows enabling, disabling, or configuring them without restarting the application.[49]
The Geany-Plugins project offers over 40 official plugins, each designed to enhance specific functionalities while maintaining compatibility with Geany releases.[49] Notable examples include:
- GeanyPy: A Python scripting plugin that exposes much of the C API to Python, enabling users to write scripts for custom automation and extensions (which is being updated to support a new proxy plugins mechanism for first-class Python plugins).[50]
- GeanyLaTeX: Provides LaTeX-specific tools, such as document wizards for quick setup, snippet insertion, and build integration to streamline typesetting workflows.[51]
- Shift: Facilitates column-based (rectangular) text selection and editing, useful for data manipulation in tabular code or configurations.[52]
- GeanyVC: Integrates version control systems like Git and SVN, offering menu-driven commands for commits, updates, and diffs directly within the IDE.[53]
- LSP: Integrates Language Server Protocol support for advanced language features like code diagnostics, completion, and refactoring (introduced in Geany-Plugins 2.1).[54]
<geanyplugin.h> and exporting a geany_load_module function to register the plugin with Geany.[47] Plugins are hosted and collaborated on via the Geany-Plugins GitHub repository, where contributors must adhere to API version checks (minimum 225) and use macros like GEANY_PLUGIN_REGISTER for initialization.[55] For instance, to add a menu item, developers create a GtkMenuItem in the init function, append it to Geany's tools menu using gtk_menu_shell_append, and connect a callback signal like g_signal_connect for handling activations, such as displaying dialogs or processing document events.[47] Document hooks can be implemented by subscribing to signals like "document-save" via the plugin's function table, enabling interventions like pre-save validations.[46]
Geany 2.0 introduced enhancements to the plugin API for improved GTK3 compatibility, mandating GTK 3.24 as a minimum and adjusting the application binary interface (ABI) to prevent crashes from version mismatches between Geany and plugins.[18] This update also laid groundwork for later extensions, such as the Plugin Extension API added in Geany 2.0, which allows plugins to override features like autocompletion for specific document types, though asynchronous operations remain handled through standard GTK signals without dedicated async APIs.[3]