NOTE: This tutorial explains how to setup weMessage's iMessage capabilities. If you do not have a Mac computer you will not be able to enable the iMessage functionality within this app. However, you will still be able to send SMS and MMS messages. The reasons for this are explained in this tutorial.

The weServer is the bridge between your Mac computer and your Android device. weServer is a messaging server that will relay iMessages to and from your Android device. In order to start sending and receiving iMessages, you will need to install the weServer on a computer running macOS, whether it is an iMac, Macbook, Mac Mini, or a Mac Pro. The reason you will need an Apple computer in order to use the weMessage ecosystem is because the iMessages need to be sent through an Apple device in order to be delivered. Otherwise, the iMessages are not authenticated through Apple’s servers and will often times not be sent. By running the weServer on a Mac, you have the assurance that your messages will reach the person you are texting.

In the device diagram above, the iMessage will be sent from the iPhone. Once it reaches the Mac, the weServer processes the message and delivers it to the Android device. A message that is sent from the Android phone will be delivered to the weServer, which will then send the message back to the iPhone.


The weServer is more than just a simple chat relay. It is comes with several convenient features designed to enhance your weMessage experience.

Multiple Devices

weServer supports multiple device connections. You can connect as many tablets and phones you want to your server and receive messages on all of your devices.

Message Queue

Every iMessage is delivered to your Android devices, even if they are not connected. When a device is offline, the iMessages received are stored in a queue, and are delivered when the device reconnects.


The weServer also functions as a notification service. When a message has been received, it sends a notification to your devices, whether they are online or offline. No external services required!


Your weServer records all console output to a log file, so you can keep track of what happened. Errors are also carefully reported to ensure that any bugs that arise are fixed!


Your weServer comes packaged with several useful commands, like sending messages through your console or resetting your login information.

Contact Sync

Your weServer is also able to sync the contacts on your Mac with weMessage, exporting them to the app on your Android device.


  • An iMessage Account
  • A MacOS Computer running Yosemite (10.10) or Higher
  • An Android Device Running Lollipop (5.0) or Higher
  • Java 7 or Higher


Installing Java

The weServer environment depends on a software called Java. Java is a program that allows other computer programs to run. In order for weServer to start, you have to download the Java Development Kit (JDK). You may already have it installed. To check, open a Terminal window and type in the command java. If you get an error message telling you to download the JDK, that means you will have to install it off of Java's website. If you don't, then that means you have Java installed and you can skip this step.

To download the JDK, click on this link. You will be taken to Java's website. Once you are there, click on the Download button under JDK. You will then be taken to a page that says something like "Java SE Development Kit Downloads". Click on the radio button that says "Accept License Agreement", and then click on the link next to the macOS version of Java.

It might take a while to download due to the size of the file. Once it is downloaded, run the installer. After the installation process is finished, you should have Java on your computer. To check, open Terminal again and run java. If you see a fairly long output, that means it has been installed.

Turning On Accessibility Features

After downloading Java, you will need to add the Terminal app to your Accessibility tab. weServer uses certain accessibility functions in order to make message sending possible, so those will need to be turned on before using your weServer (it is completely safe, weServer only uses functions that it needs).

To do this, open System Preferences, go to Security & Privacy, click the Privacy tab, and then click on Accessibility. Once you are there, click on the lock to make changes, and enter in your password if you have one. Then click on the + sign, find your Terminal app file, and click Open. It should be located under Applications > Utilities > Terminal. Once that is done, Terminal should be added to the Accessibility list.

Installing weServer

Download weServer Version 1.2.0 if you haven't done so already. Extract the archive and then click run.command. If a dialog box pops up about it being from an unidentified developer, or that it might be dangerous because it has been downloaded from the Internet, then you need to go into your System Preferences again, click Security & Privacy, and click General. In the "Allow apps downloaded from" section, there should be a line that says "run.command was blocked from opening". Hit the button that says Open Anyway and it should start. The warning dialog box will only show once, and if you did not get it in the first place then you can skip that step.

On first startup, you will be asked to enter your iMessage email and a password. Your email must match the one you are using iMessage with. However, your password can be anything. Once you enter both of those in, your weServer will start.

Once your weServer is running, go to the weMessage app on your Android device. You will need to enter an IP Address, Email, and Password, and a Failover IP Address (optional). The email and password need to match the values set on your weServer.

Getting Your IP Address

The IP Address points to where your weServer environment is running and it is needed in order to connect to your weServer. There are two types of IP addresses: a private IP address and a public IP address. A private IP address is the easiest to get, and it allows you to connect to your weServer inside your own Internet network. However, if you want to connect outside of your own Wi-Fi and access your weServer over a cellular connection or outside your home, you will need a Public IP Address. In order to use a Public IP Address with your weServer, you will need to go through a process called port forwarding. This can be a little tricky if this is your first time doing it, and every router has a different process. Port forwarding is explained in more detail in this section.

For starters, let's get our private IP address first. Go to System Preferences and then click Network. Then click Advanced... and then click the tab that says TCP/IP. Your private IP address will be next to IPv4 Address.

Enter your IP address into the corresponding field in the weMessage app. Press Sign In, and you should see a checkmark animation and then be taken to the main screen. Congratulations, you have successfully connected!

You can also enter in a Failover IP Address, which is the IP Address weMessage will fallback on if the first IP Address is unable to connect to your weServer. For example, if you have port forwarded your weServer and are using a Public IP Address, but when you are on your home network you need to use the Local Private IP Address, you can enter your Private IP as your Failover IP Address so that it will connect to your private IP on your home network if the public IP fails to connect.

Port Forwarding

Port Forwarding is the process of opening a certain part of your network to the outside world. By default, your modem or router has a firewall to protect your Internet network. When you port forward, you allow certain connections to go through your firewall. It is like having a fence, but installing a door to allow people to go through. Your internet is still protected, because only one application is allowed to run under a port. In this case, it is your weServer.

In order to access your weServer outside of your personal Wi-Fi network, you will need to port forward. It can be a little challenging if it's your first time, but there are countless guides and tutorials on the Internet that explain the process. Every router or modem brand has a different method for port forwarding. In other words, how you would port forward on an AT&T router will be different from how you would port forward on a Verizon router. Your best option is to go to YouTube or Google how to port forward for your modem. However, in our installation video tutorial, we explain how to port forward on an AT&T router.

The port you will need to open for your router needs to match the port your weServer will run on. If you have not changed the port in your config.json file, the port will be 22222. Otherwise, it will be whatever value you have in your config. Once you have port forwarded, you will need to get your public IP address. There are several websites that will tell you your IP address; one of them is explained in the video. Once you have port forwarded, you will be able to access your weServer anywhere in the world.


After you connect your Android device to your weServer, you will be able to send and receive messages. Multiple devices are able to connect to the same weServer (as long as they use the same login). In order to receive new messages, your weServer will have to be kept running. It is best to keep it open as long as possible: for best results 24/7. You should try to keep your Mac on as long as possible and not put it to sleep when you will be expecting messages.

Contact Sync

Contact Sync is a feature that allows weMessage to import your Contacts that are on your Mac computer to your Android device. It gets your contact pictures and names and sends them to the weMessage app, where they are then stored in your weMessage Contact List. This way, you will not have to enter in a person's name and picture one-by-one. In order to use this feature, you will need to grant Terminal access to your Contacts. To do this, open your weMessage app, go into Settings, and then tap the option that says Contact Sync. This will then have Terminal send a request to your computer asking for access to your Contacts. To grant access, open System Preferences, go to Security & Privacy, click the Privacy tab, and then click on Contacts. There, you should see the Terminal app in a list of applications that are asking for access to your Contacts. Click the checkmark next to Terminal in order to grant it access. After this, you will be able to perform Contact Syncs.

In addition to syncing contacts with your Mac, weMessage includes native support for importing the contacts that are directly on your Android phone.


There are more than a dozen commands that are bundled with your weServer in order to make certain tasks easier. You can reset your login information, view history about devices that have connected, and even send messages or create group chats from command line.

Note: For some of the commands, you will need to surround your arguments with quotation marks, in order to make sure everything is grouped under one value. For example, if the command requires a message, and your message is: I like pancakes, then surround it with quotes ("I like pancakes")

Command Name Description Aliases Example Usage
info Displays weServer version info version, ? info
help Lists available commands and their aliases commands, cmds help
aliases Returns the aliases of a given command commandnames, alternatename aliases resetlogininfo
clear Clears the terminal (console) window clearconsole, clearterminal clear
resetlogininfo Resets the login information needed for weMessage Clients to connect to the weServer newpassword, newlogin, resetpassword, resetlogin resetlogininfo - Follow steps
stop Stops the weServer shutdown, end stop
devices Lists all devices currently connected to the weServer connections devices
disconnect Disconnects a device from the weServer based on an IP Address killdevice disconnect
disconnectall Disconnects all devices from the weServer killall disconnectall
deletedevice Deletes device data from your local weServer's database, based on device name delete, cleardevice deletedevice "Google Pixel"
existingdevices Lists all devices that have ever connected to the weServer. alldevices, allconnections existingdevices
sendmessage Sends a direct message to a contact (make sure to surround arguments with quotation marks) sendmsg sendmessage "(123) 456-7890" "Hey what's up?"
sendgroupmessage Sends a message to a group chat (make sure to surround arguments with quotation marks) sendgroupmsg, groupmessage, groupmsg sendgroupmessage "OG Group" "Hello world!"
creategroup Creates a new group chat newgroup creategroup "New Group" "bob@gmail.com 8772419256 1234567890"
addparticipant Adds a person to a group chat addperson, groupadd addparticipant "Family" "cousin@yahoo.com"
removeparticipant Removes a person from a group chat removeperson, groupremove removeparticipant "Classmates" "111 222 3344"
renamegroup Changes the name of a group chat rename renamegroup "It's Fall" "It's Winter"
leavegroup Leaves a group chat leave leavegroup "So Long! Farewell"
chatinfo Gets information about a conversation getchat chatinfo "My Group"
lastmessage Gets information about the last message sent lastmsg, getlastmessage lastmessage


Your weServer also comes with several configuration options. The default configuration settings are recommended and should be left alone (all features are enabled by default). However, if you want to turn off some features, like disabling log files or opting out of crash reporting, you can do that by editing the config.json.

The config.json file stores all configuration options for your weServer. In your config file, you can set certain values as numbers, true or false statements, or words.

Config Option Description Value Type
configVersion This value should NEVER be changed. Your weServer uses it internally. If it is changed by hand, your config might be reset or your server could even crash. Number
port This is the port your weServer will run on. It is highly recommended you leave it as its default value, but if you need to change it you can. (You will have to specify your port number in the weMessage app. For example, if before the value in your IP address field was, and you changed your port to 99, the value in your IP address field will now be Number
createLogFiles This dictates whether or not a latest.log file should be created. The log file contains the latest output of your weServer session. True / False
checkForUpdates Whether or not the weServer should check for updates True / False
sendNotifications Whether or not the weServer should send notifications to existing devices. (Note: If you do not want your messages being sent to Google's notification servers, disable this.) True / False
syncContactPhotos Whether or not contact photos will be imported during a Contact Sync. If you have a lot of contacts, this process can be intensive on your computer, so if you have an older one you may want to disable this. True / False
transcodeVideos When you receive a video file through iMessage, it is by default stored in a QuickTime file. weServer will automatically convert it into a video file your Android device can play. This requires a lot of processing power, so if you have an older computer you might want to disable this. True / False
ffmpegLocation For the transcoding process, weServer uses FFmpeg. This points to where the FFmpeg binary is. This should NOT be changed unless you absolutely know what you are doing. If you want to change your FFmpeg binary (you probably will never need to), go into bin > ffmpeg > FFmpeg Compilation Guide.txt Words
accountInfo This stores your email and password for your weServer login. You should not change this manually unless you know what you're doing. If you need to change it, use the resetlogininfo command. Bundle of Data