A community fork of Textual, the macOS IRC client originally built by Codeux Software. The upstream project is archived. Textwerk modernizes the codebase and targets macOS 26+.
- Multi-server, multi-channel IRC client with a single sidebar for all your networks
- ZNC bouncer aware, with auto-join handling, message playback, and self-message support tuned for bouncer setups
- SASL authentication, including SCRAM-SHA-256
- Modern IRCv3 support: typing indicators, read-marker sync so unread badges stay consistent across other clients on the same account/bouncer, chat history backfill after reconnecting, and readable FAIL/WARN/NOTE messages from servers that support standard-replies
- Automatic upgrade to a secure connection on networks that advertise support for it
- Real-time member list with account-verification badges, populated via WHOX as soon as you join a channel rather than waiting on each user's first message
- Give/Take Op, Halfop, Voice, and Owner (+q) from the member list, when supported by the server
- Inline previews for links from YouTube, Vimeo, Dailymotion, Twitch, Twitter/X, GitHub, Reddit, Wikipedia, Giphy, SoundCloud, Spotify, CodePen, Bandcamp, xkcd, and hotlinked images/video — rendered as safe metadata cards instead of embedded players, with each service individually toggleable in Preferences
- DCC file transfers
- AppleScript-based plugin/scripting support
- Multiple bundled themes, switchable live with no fade delay, including a modern default theme with a choice of Slack-style grouped consecutive messages or a classic one-line-per-message display
- Native macOS notifications
- Server errors and warnings shown as readable messages instead of raw numeric codes
- Query windows show a "common channels" info bar when someone messages you first
- Unified title bar, with the secure-connection lock and channel title inline with the traffic-light buttons
- Renamed from Textual to Textwerk, since the original project is archived; this is a separate community fork
- Requires macOS 26 (Tahoe) or later
- Fixed blank/frozen channel views and connection crashes on macOS 26
- Fixed the scrollback history service crashing on every launch, and saved keychain passwords disappearing after the rename
- Fixed a crash when changing theme/style settings
- Real automatic updates: Sparkle now checks GitHub Releases directly instead of a broken placeholder
- Detects and offers to import your settings from an existing Textual install on first launch (see "Migrating from Textual" below)
- Added modern IRCv3 support that didn't exist in Textual: typing indicators, read markers, chat history gap-fill on reconnect, account tracking (account-notify/account-tag/extended-join/setname/invite-notify), message-tags, standard-replies (FAIL/WARN/NOTE), and strict-transport-security; added SASL SCRAM-SHA-256 and UTF8ONLY
- Member list now shows account-verification status in real time via WHOX, instead of only after the first message from each user; added Give/Take Owner (+q) mode support
- Reworked inline media entirely: dropped the old iframe embeds for YouTube, Vimeo, Dailymotion, Twitch, and Twitter/X, which no longer loaded at all under the app's sandboxed
file://origin, in favor of safe metadata-only preview cards that never inject HTML or execute remote scripts; added GitHub, Reddit, Wikipedia, Giphy, SoundCloud, Spotify, CodePen, and Bandcamp cards; removed Pornhub; link preview lookups are now cached, so re-scrolling or switching themes no longer re-fetches metadata from the network every time; replaced the old blanket "limit to basics"/NSFW/insecure-content toggles with a per-service list in Preferences - Unified title bar is now the default, no longer marked experimental
- Added a Textwerk theme with Slack-style grouped consecutive messages as the new default display, plus a Chat/Classic style picker for the old one-line-per-message look
- Added a "common channels" info bar to query windows opened by the other person
- Flatter, more modern look: reworked topic bar, no gradients or drop shadows, updated default font, taller sidebar rows, instant theme switching with no fade delay
- Network name stays bold in the server list while that server is active or selected
- Fixed numerous memory leaks, race conditions, and crashes across connection handling, message batching, and the main window, including a flood-control timer leak on failed connections, a URLSession leak in inline media processing, KVO observer crashes, a race in IRC batch message queuing, and duplicate midnight-rollover timers
- Removed dead code left over from pre-Tahoe macOS version checks, an orphaned Wiki Link Parser plugin, and other unused helpers
- Removed OTR and Blowfish message encryption support
- Removed dead Help menu items pointing to Codeux Software's now-defunct FAQ, support, and license pages
Grab the latest build from the Releases page and unzip it into your Applications folder.
Releases are unsigned. macOS will block the app on first launch. To open it anyway, right-click the app and choose Open, then confirm in the dialog. Alternatively, remove the quarantine attribute from the terminal:
xattr -d com.apple.quarantine /Applications/Textwerk.appYou need Xcode 16+ and a valid code signing identity (does not need to be issued by Apple).
Set your signing identity in Configurations/Build/Code Signing Identity.xcconfig before building. Do not change it through Xcode.
git clone https://github.com/bashgeek/Textwerk.git
cd Textwerk
./build.shThe built app lands in ./build/Textwerk.app.
Manual xcodebuild invocation
xcodebuild \
-project "Sources/App/Textwerk App.xcodeproj" \
-scheme "Textwerk (Standard Release)" \
-derivedDataPath ./build/DerivedData \
CONFIGURATION_BUILD_DIR=./build \
buildIf you're coming from the Mac App Store version or the standalone version from codeux.com, Textwerk will detect your existing settings on first launch and offer to import your servers, channels, and preferences.
You can also trigger this at any time from Help → Advanced → Import from Previous Textual…
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
Both licenses require preserving copyright notices in source and binary distributions. The name "Textual" and "Codeux Software, LLC" may not be used to promote products derived from this software without prior written permission.
Full license text for both is reproduced below.
LimeChat license
The New BSD License
Copyright (c) 2008 - 2010 Satoshi Nakagawa <psychs AT limechat DOT net>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Textual license
Copyright (c) 2010 - 2020 Codeux Software, LLC & respective contributors.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Textual, "Codeux Software, LLC", nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Textwerk bundles or links against the following third-party components:
| Component | License | Copyright |
|---|---|---|
| GRMustache | MIT | (c) 2014 Gwendal Roué |
| 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, used for a portion of SASL authentication handling in IRCClient.m |
| Sparkle | MIT (plus bundled bsdiff, sais-lite, ed25519, and SUSignatureVerifier components under their own permissive licenses) |
(c) 2006-2017 Andy Matuschak and contributors |
The "Cocoa Extensions" internal helper framework also carries a small number of third-party snippets (Dave Dribin's MIT-licensed code, an Apple sample-code snippet, and a Chromium-derived NSString helper); see Frameworks/Cocoa Extensions/ACKNOWLEDGEMENT.txt, which ships inside the app bundle alongside the framework.

