A simple, extensible Slack client for Scala.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
project bumped dependency versions for scala 2.12 compat Oct 11, 2017
src Set channel topic Aug 4, 2015
.gitignore updated readme Nov 26, 2014
LICENSE initial commit Nov 26, 2014
README.md Update README.md Nov 30, 2017
build.sbt back to snapshot Oct 12, 2017



scala-slack is a simple, extensible client library for Scala that provides an interface to the Slack API.

Note: scala-slack is a partial implementation of the Slack API. The Slack API is under heavy development, and this library is subject to frequent change.

Supported Methods

  • api.test
  • auth.test
  • channels.history
  • channels.list
  • channels.setTopic
  • chat.delete
  • chat.postMessage
  • chat.update
  • im.close
  • im.history
  • im.list
  • im.mark
  • im.open


scala-slack is listed on Maven Central and can be included in your project by adding this line to your build.sbt:

libraryDependencies += "com.flyberrycapital" %% "scala-slack" % "0.3.1"

scala-slack supports Scala 2.10, 2.11, and 2.12.


First, instantiate a SlackClient object.

import com.flyberrycapital.slack.SlackClient

val s = new SlackClient(<YOUR_API_TOKEN>)

You can then use Slack API methods:

s.chat.postMessage("#yourchannel", "Hello World!")

You can also edit and delete messages easily by using the returned PostMessageResponse object:

val response = s.chat.postMessage("#yourchannel", "Hello World!")

s.chat.update(response, "This is my update.")

Message history can be retrieved with the channels.history and channels.historyStream methods:

val response = s.channels.list()
val channel = response.channels(0)

val history = s.channels.history(channel.id)

// get stream of messages in descending order
val historyStream = s.channels.historyStream(channel.id)

historyStream foreach println

All implemented API methods are documented in the code with Scaladoc.

Extending the library

scala-slack can easily be extended to accommodate new API methods and functionality.

For example, if Slack adds a chat.poke method, one could write a new version of the Chat class:

import com.flyberrycapital.slack.HttpClient
import com.flyberrycapital.slack.Methods.Chat

class PokeChat(httpClient: HttpClient, apiToken: String) extends Chat(httpClient, apiToken) {

   def poke(userID: String) = {
      val response = httpClient.post(
        Map("user_id" -> userID, "token" -> apiToken)

      // handle poke JSON response here...


and then you can incorporate this into a custom version of SlackClient:

import com.flyberrycapital.slack.SlackClient

class PokeSlackClient(apiToken: String) extends SlackClient(apiToken) {

   override val chat = new PokeChat(httpClient, apiToken)


That being said, we hope that if you implement additional API methods yourself, you'll consider adding them to this project :)


This project is licensed under the MIT license.