Zelta has now stopped all native servers. You can deploy your own servers using the codebase. Scroll down to the bottom for link to the repository.


Project Zelta

Zelta is an open source, secure, anonymous and feature rich messaging service for the terminal.

Security & Encryption (High Level Overview)


Node JS (v8 and above)


npm i -g zelta
yarn global add zelta


Display a list of all the available commands

$ zelta

Register a new username

$ zelta register

Login. Once you login, the access token is valid for 24 hrs. You should logout after each session on an untrusted device.

$ zelta login


Send a message

$ zelta send


Create a group. There are two types of groups in zelta : public and private. Anyone can join a public group using the passphrase but private groups require an invite to join. The invitation is sent by the admin, who is the creator of the group. Currently the group limit is 50 members.

$ zelta group

Join a public group using the passphrase. Group names are referred to using the @ symbol.

$ zelta join <group>

If you try joining a private group, zelta mentions that you need an invite.

Invite a user to your group (admin privilege). Use @ for mentioning group name.

$ zelta invite <user> <group>

Accept a group invite. You will receive the invite in your inbox.

$ zelta accept-invite <group>

To send messages to a group, just address the message to a group name using @. Needless to say, you need to be a member or admin of the group. Remember that @ tells zelta that you intend to send the message to a group. Without @ the message may be sent to a user with the same username as the group name.

You can always change the access level of your groups (admin privilege)

$ zelta set-public <group>
$ zelta set-private <group>

List all the members of a group. Needless to say, you need to be a member yourself.

$ zelta members <group>

Leave a group. If you are the admin, the oldest member of the group becomes the new admin.

$ zelta leave <group>

Kick a group member (admin privilege)

$ zelta kick <user> <group>


Check your messages using the inbox command. Group messages appear in a user@group format. The time shown is GMT unless you have configured your local timezone.

$ zelta inbox


Configure your local timezone using the timezone configuration wizard. For your security and anonymity, this info is not sent to the server. You will have to re-configure your timezone each time you are on a new device or each time you perform a fresh install. If you dont do this all incoming messages will show the GMT time.

$ zelta timezone


Create a chatroom

$ zelta chatroom

Zelta can support multiple chat servers in diffrent regions.

$ zelta region <region>

When you use the chatroom command, a chatroom is created on that server. The room name must be unique for the server. The creator of the room is the room owner and reserves the right to destroy the room. Until the room is destroyed, it will be live for any participant with the room name and passphrase.

You can enable typing-effect to have incoming chat messages typed on your screen (matrix style!). This may not work on every terminal and currently doesnt support emojis. It is not recommended to use it in busy rooms as the animation can create a backlog of messages.

$ zelta typing-effect <value>

Head over to a chatroom to see if it works

Customize the typing speed by setting the delay (in ms) between the printing of each character. Use the typing-delay command. Recommended value is between 100 - 130. Default is 115.

$ zelta typing-delay 120

Join a chatroom

$ zelta chat

You will need to be connected to the same chat server as the chatroom and you must know the room name and passphrase. Currently there is no invitation system implemented into chat. But you may manually invite the person through a personal message (Refer : zelta send)

Madbot is the chat moderator. It recognizes these commands:

If you have not used the timezone command to configure your local timezone, UTC/GMT time is shown by default.

For emojis you can use an OS provided emoji panel or use the following syntax - :emoji_name: Example - :smile: This will render as a smiley emoji for the receiver. Refer this list for emoji names : emoji-list


Logout. You should logout after each session on an untrusted device. If you dont logout, the access token expires in 24 hrs.

$ zelta logout


Linkedin | Github

Show me the code