Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


A lightweight framework to build chat applications, made in Swift

Subscribe to updates I use Chatto

Statistics on Chatto

Number of watchers on Github 3214
Number of open issues 84
Average time to close an issue 11 days
Main language Swift
Average time to merge a PR 1 day
Open pull requests 21+
Closed pull requests 28+
Last commit over 2 years ago
Repo Created over 4 years ago
Repo Last Updated over 2 years ago
Size 2.42 MB
Organization / Authorbadoo
Latest Release3.3.0
Page Updated
Do you use Chatto? Leave a review!
View open issues (84)
View Chatto activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating Chatto for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Chatto Build Status codecov.io CocoaPods Compatible Carthage compatible

Chatto is a Swift lightweight framework to build chat applications. It's been designed to be extensible and performant. Along with Chatto there is ChattoAdditions, a companion framework which includes cells for messages and an extensible input component. You can find more details about how it was implemented in our blog. See them in action!


  • Calculation of collection view changes and layout in background
  • Supports pagination in both directions and autoloading
  • Message count contention for fast pagination and rotation with thousands of messsages
  • Accessory view revealing by swiping from right
  • Interactive keyboard dismissal
  • Text bubbles
  • Photo bubbles
  • Extensible input bar

How to use

Check the wiki!

How to install


  1. Make sure use_frameworks! is added to your Podfile.

  2. Include the following in your Podfile:

    # Swift 4
    pod 'Chatto', '= 3.3.0'
    pod 'ChattoAdditions', '= 3.3.0' # if you want to use the cells or the input component
    # Swift 3
    pod 'Chatto', '= 3.2.0'
    pod 'ChattoAdditions', '= 3.2.0' # if you want to use the cells or the input component
    # Swift 2.x
    pod 'Chatto', '= 2.1.0'
    pod 'ChattoAdditions', '= 2.1.0' # if you want to use the cells or the input component

    If you like living on the bleeding edge, you can use the master branch with:

    pod 'Chatto', :git => 'https://github.com/badoo/Chatto', :branch => 'master'
    pod 'ChattoAdditions', :git => 'https://github.com/badoo/Chatto', :branch => 'master'
  3. Run pod install


If youre using Carthage, simply add Chatto to your Cartfile:

# Swift 4
github "badoo/Chatto"
# Swift 2.x
github "badoo/Chatto" "swift-2"


  1. Clone, add as a submodule or download.
  2. Drag and drop Chatto and/or ChattoAdditions project to your workspace
  3. Add Chatto and/or ChattoAdditions to Embedded binaries


Source code is distributed under MIT license.


Check our colleagues' project Chateau!


Read more on our tech blog or explore our other open source projects

Chatto open issues Ask a question     (View All Issues)
  • over 3 years How can I get the frame of the specific bubble?
  • over 3 years Release in CocoaPods does not compile in XCode 8.1 / Swift 3.0.1
  • over 3 years AccessoryViewRevealer should allow for right AND left pan/reveal
  • over 3 years Not possible to support custom UIMenuItem
  • over 3 years Reimplement textMessage info.
  • almost 4 years Custom Flow Layout
  • almost 4 years Xcode 8, Swift 3 - dramatic changes have broken the chat UI paradigm
  • almost 4 years New iOS10 UICollectionView capabilities for better performance
  • almost 4 years Need a way to customize each bubble based on message attributes
  • almost 4 years Can't gain access to the UITextView in the message bubble to handle delegate methods
  • almost 4 years Who is using Chatto?
  • almost 4 years Make all views opaque for better scrolling
  • almost 4 years Will there be support for audio message ?
  • about 4 years Text only input bar
  • about 4 years Custom long press pop menu
  • about 4 years Keyboard issues
  • about 4 years Make KeyboardTracker extendable
  • over 4 years Investigate better solutions for wrong inputView height on iOS 8
  • over 4 years getting "message" with certain uid
  • over 4 years Improve performance by removing Blended Layers
  • over 4 years Enable send Button in custom ChatInputItem
  • over 4 years Example code doesn't work
  • over 4 years Support for sections header/footer
Chatto open pull requests (View All Pulls)
  • Added support for embedding in UITabBarController
  • Input bar customization enhancements
  • Makes source code compatible with Swift 2.3
  • Add updating logic to text message
  • Fix a bug causing keyboard view offset to be incorrect
  • Forward UITextViewDelegate for cells to handle URLs taps and etc.
  • Pagination batchUpdates instead of reload
  • Adding button background colors, insets and corner radius to send button appearance and default values to style structs
  • adding a setup closure for avatar image view
  • feat: add enableReturnKeyToSend option
  • add enableReturnKeyToSend option
  • removal of the swift3.1 warning
  • Fix broken headings in Markdown files
  • Use optional in collectionView:shouldShowMenuForItemAtIndexPath:
  • improve: avoid ambiguous use of init()
  • ignore `bottomLayoutGuide` when `hidesBottomBarWhenPushed == true`
  • Relax let to var for text property in TextMessageModel
  • Fix some Xcode 9 warnings
  • Fixed some of Xcode 9 warnings
  • Fix iOS 11 text rendering issue
  • fixed https://github.com/badoo/Chatto/issues/451
Chatto list of languages used
Chatto latest release notes
3.3.0 Chatto 3.3.0


  • Added Swift 4 support #385 by @AntonPalich and #345 by @jpunz
  • Added messages selection #411 by @AntonPalich
  • Added accessibility identifier to selection indicator #428 by @AntonPalich
  • Added iCloud Library support to photos input #415 by @Wisors
  • Added camera position settings for live camera cell #393 by @Wisors
  • Allow client to set selected range of textView in ChatInputBar #402 by @phatmann
  • Allow override of text message text #403 by @phatmann
  • Added ability to change input bar placeholder #396 by @chupakabr
  • Allow to build TextMessagePresenter subclasses without exposing internal properties #421 by @AntonPalich
  • Made UIScrollView delegates open in BaseChatViewController #438 by @azimin
  • Exposed keyboard position handling #445 by @chupakabr
  • Added additional state for keyboard tracker and ability to modify content insets #454 by @azimin
  • Removed Xcode 9 warnings #439 by @irace


  • Fixed crashes that happened under some conditions in project with Swift 4 that used Chatto with Swift 3.2 #405, #414 by @AntonPalich
  • Fixed issue with live camera cell when it wasnt updated after updating its appearance #404 by @Wisors
  • Fixed issue with photo picker after migration to Swift 4 #437 by @AntonPalich
  • Fixed crash that happened on devices with unaccessible camera caused by forced unwrapped optional #424 by @Wisors
  • Removed gap under input bar on iPhone X #447 by @azimin
  • Fixed issue with wrong input bar position when hidesBottomBarWhenPushed is true on iPhone X #457 by @AntonPalich
3.2.0 Chatto 3.2.0


  • Added support for custom main view in BaseChatViewController #323 by @serge-star
  • Added ability to change input bar border color and width #339 by @NSEGeorge
  • Added ability to control visibility of failed icon #359 by @turbulem
  • Added Xcode 9 and iOS 11 support #352 by @AntonPalich
  • Added support for swiftlint 0.23 #371 by @AntonPalich ### Bugs:
  • Fixed crash caused by missing optionality identifier in UIKit #310 by @raisaanjani92
  • Fixed input container position when presenting chat as child controller #338 by @KaterinaPetrova
  • Fixed issue with gesture recognizers that wasn't disabled for text messages on iOS 11 #366 by @AntonPalich
3.1.0 Chatto 3.1.0
  • swiftlint 0.13 support & Xcode 8.2 compatibility #253 - @diegosanchezr
  • swiftlint 0.14 support & hashes improvements #271 - @diegosanchezr
  • Removed lazy keyword from accessoryTimestampView property in BaseMessageCollectionViewCell #286 - @geegaset
  • Fixed typo in a comment in BaseChatViewController+Changes.swift #296 - @NickAger
  • BasicChatInputBarPresenter.chatInputBar became public #297 - @NickAger
  • Added ability to specify tint color for text input #301 - @V0idPRO
  • Xcode 8.3 compatibility #300 - @geegaset
  • Empty layout model is returned if layout delegate is nil #304 - @chupakabr
Other projects in Swift