Jami is a voice-over-IP software phone. Features include:
- user-friendly (fast, sleek, easy-to-learn interface)
- professional grade (file/call transfers, hold/resume, optimal audio quality, individual/group calls)
- compatible with Asterisk (using SIP account)
- peer-to-peer distributed calls (P2P-DHT)
- customizable
The SIP/audio daemon and the user interface are separate processes. Different user interfaces and scripts can easily be used to control the daemon. Jami comes with various graphical user interfaces and scripts to control the daemon from the shell.
Jami is currently used by the support team of Savoir-faire Linux Inc.
More information is available on the project homepage:
This source tree contains only the daemon, which handles the business logic of Jami. User interfaces are located in different repositories. See the Contributing section for more information.
When both peers support it, an established Jami call can reconnect after its SIP channel closes or its default IP network changes. The daemon opens a new authenticated channel and restarts ICE while retaining the call. Recovery has a 20-second limit; audio or video may pause during that time. Calls with older clients and regular SIP accounts retain their previous behavior.
Handover support is advertised with X-Jami-Call-Handover: 1. The original caller
selects the recovery channel and issues a monotonically increasing generation
in X-Jami-Handover-Generation. The callee requests recovery with a numbered
OPTIONS probe, but does not independently select a competing channel.
Numbered recovery probes require exactly one valid generation header;
missing, malformed, or duplicate generation headers receive 400.
Re-INVITEs carrying a previous generation are rejected with 491 before dialog
or SDP processing. Other in-dialog requests are accepted on any channel of the
call and ordered by their CSeq, so a delayed request is refused by the dialog
and does not move the call. A channel is retired only once the dialog adopts a
newer one: the caller when it accepts a probe, the callee when it accepts the
caller's recovery offer. A rejected offer leaves the call on its current
channel. Retirement is per call and does not
close a channel used by another call. Stale SDP and ICE results cannot commit
media state for a newer generation.
Queued re-INVITE handling checks that its CSeq still identifies an unanswered incoming transaction before adopting a channel or rejecting the offer. Offers with no usable media receive 488 without changing the active SDP or negotiation generation. Queued SDP completion also checks its originating generation when it runs.
Another network change replaces the connection attempt without extending the original 20-second recovery deadline. A peer returning after that deadline does not resurrect the ended call.
Clients should call libjami::connectivityChanged() to refresh account
connectivity and libjami::networkInterfaceChanged() only when the default
network or its local IP addresses actually change.
src/is the core of libjami.bin/contains application and binding main code.bin/dbuscontains the D-Bus XML interfaces, and C++ bindings
Savoir-faire Linux Inc. is a consulting company based in Montreal, Quebec. For more information, please visit the following website:
For build instructions, required dependencies, and platform-specific notes, see BUILD.md.
Of course we love patches. And contributions. And spring rolls.
Development website and issue tracker:
Repositories are hosted on Gerrit, which are used for code review. It also contains the client subprojects:
Join us and post comments, suggestions, questions, and general feedback on the Jami mailing list:
Copyright (C) 2004-2026 Savoir-faire Linux Inc.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.