Warning
This branch is a work in progress toward Textual 8.
main is under heavy development and is being substantially refactored. Until Textual 8 is released, it may contain serious bugs, incomplete features, and breaking changes, and it may not build at all. Do not use builds from this branch with settings or logs you care about.
Looking for the current release? Get it from www.textualapp.com. The Textual 7 source lives on the v7 branch.
Important
Textual is under new maintainership. For most of its life, Textual had a single full-time maintainer, who has since moved on to other ventures. We've now taken over maintainership, and active development continues here.
Development picks up from Textwerk, a community fork of Textual that has now been retired. Many of the features and fixes made in Textwerk will carry over to Textual 8.
To everyone who has contributed to Textual in any form, whether a suggestion, bug report, pull request, financial support, or something else: thank you. Textual exists because of you, and we're glad to keep it going.
Textual is a highly customizable app for Internet Relay Chat (IRC) on macOS. It can be customized with styles written in CSS, HTML, and JavaScript, plugins written in Objective-C and Swift, and scripts written in AppleScript and many other languages.
- Website: www.textualapp.com
- Documentation: www.textualapp.com/docs
- Questions and ideas: GitHub Discussions
- Bug reports: GitHub Issues
- Security issues: see SECURITY.md
- Chat:
#textualonirc.libera.chat
Pull requests are welcome. Because main is being refactored heavily ahead of Textual 8, large changes are likely to conflict with work in progress, so please open a discussion first for anything beyond a small fix. Fixes for Textual 7 should target the v7 branch.
Please read CONTRIBUTING.md before opening a pull request. It explains the contributor license grant and the project conventions.
Textual is distributed under the BSD 3-Clause License. See LICENSE for the full text.
Textual began as a fork of LimeChat in 2010.
LimeChat (BSD 2-Clause) Copyright (c) 2008-2010 Satoshi Nakagawa
Textual (BSD 3-Clause) Copyright (c) 2010-2020 Codeux Software, LLC & respective contributors Copyright (c) 2026 Blendbyte GmbH & respective contributors
Both licenses require preserving copyright notices in source and binary distributions. The names of the copyright holders may not be used to promote products derived from this software without prior written permission. Additional attributions are listed in Acknowledgements.pdf.
Textual bundles or links against the following third-party components:
| Component | License | Copyright |
|---|---|---|
| GRMustache | MIT | (c) 2013 Gwendal Roué |
Google Toolbox for Mac (GTMNSString+HTML) |
Apache 2.0 | (c) 2006-2008 Google Inc. |
| Reachability | BSD | (c) 2011 Tony Million |
| AutoHyperlinks Framework | BSD 3-Clause | (c) 2005-2011 The Adium Team, (c) 2011 Codeux Software, LLC |
CocoaAsyncSocket (GCDAsyncSocket) |
Public Domain | Originally by Robbie Hanson; maintained by Deusty LLC |
| Colloquy (Chat Core) | BSD-style | (c) 2000-2012 the Colloquy IRC Client |
| LibreSSL | OpenSSL and SSLeay licenses | (c) 1998-2011 The OpenSSL Project, (c) 1995-1998 Eric Young |
| Sparkle | MIT | (c) 2006-2017 Andy Matuschak and contributors |
| libotr, libgcrypt, libgpg-error, OTRKit (via Encryption Kit) | LGPL 2.1 | Respective authors |
Blowfish Encryption extension (*Base* classes) |
GPLv2 | (c) 2005-2013 Mathias Karlsson |
The "Cocoa Extensions" internal framework also carries a small number of third-party snippets from Apple, Dave Dribin, Satoshi Nakagawa, and the Chromium developers; see the framework's ACKNOWLEDGEMENT.txt. Bundled styles include their own copyright and license files. The application icon was created by Brandon Rodriguez, and parts of the image assets are (c) 2015 Reda Lemeden.
Blendbyte builds cloud infrastructure, web apps, and developer tools.
We've been shipping software to production for 20+ years.
We took over Textual to keep a great IRC client alive on the Mac.
Issues and PRs get read. Good ones get merged.