Oxen
oxen.ioOxen (previously Loki) is an open source set of tools that allow users to transact and communicate anonymously and privately, through a decentralised, encrypted, onion-based network. Session is a desktop and mobile app that uses these private routing protocols to secure messages, media and metadata.
- Homepage: oxen.io
- GitHub: github.com/oxen-io/lokinet
- Privacy: tosdr.org/en/service/6622
- Web info: web-check.xyz/results/oxen.io
Oxen Source Code
Author
Description
Lokinet is an anonymous, decentralized and IP based overlay network for the internet.
Homepage
https://lokinet.org/License
GPL-3.0
Created
18 Jun 18
Last Updated
23 Feb 26
Latest version
Primary Language
C++
Size
33,925 KB
Stars
2,022
Forks
248
Watchers
2,022
Language Usage
Star History
Top Contributors
-
@majestrate (4886)
-
@jagerman (1081)
-
@neuroscr (633)
-
@despair86 (501)
-
@michael-loki (400)
-
@notlesh (365)
-
@dr7ana (304)
-
@tewinget (257)
-
@cathugger (34)
-
@sachaaaaa (12)
-
@thorpe-dev (7)
-
@rjmalagon (7)
-
@KeeJef (6)
-
@liilac (4)
-
@Bilb (4)
-
@l-n-s (2)
-
@darcys22 (2)
-
@ewhal (2)
-
@komachi (1)
-
@zoobab (1)
-
@deadblackclover (1)
-
@da4089 (1)
-
@rex4539 (1)
-
@longyap (1)
-
@XutaxKamay (1)
-
@mpretty-cyro (1)
-
@fyrak1s (1)
-
@Cipherwraith (1)
-
@spacecatpixel (1)
-
@phr0stb1t3 (1)
Recent Commits
-
Jason Rhinelander (16 Oct 25)
Bump oxenmq, libquic to stable release tags
-
Jason Rhinelander (16 Oct 25)
formatting
-
Jason Rhinelander (16 Oct 25)
Merge pull request #2278 from jagerman/fix-persist-keygen Fix [network]:keyfile issues
-
Jason Rhinelander (16 Oct 25)
Merge pull request #2276 from jagerman/randomize-path-expiry Randomize path expiry, allow experimental extended inbound path counts
-
Jason Rhinelander (16 Oct 25)
Merge pull request #2277 from tewinget/path-switch-or-reset bundle session init with path switch so restarted clients/relays can "path switch"
-
Jason Rhinelander (15 Oct 25)
Optionally allow inbound pivot reuse Currently we have a hard cap of inbound paths at the number of known RCs; even with the "extra" option to go beyond 10, once you have a path to every pivot, no more inbound paths can be built. This adds an inbound path option allowing you to reuse pivots up to N times (where N=1 remains the default), so that in special cases you can maintain more than one path to a pivot. This also switches pivot selection to use a multi-pass pivot selection to make that work, particularly on testnet where the target number of paths can easily exceed the number of RCs: get_n_random_rcs() can only return at most N (= number of known RCs), but if we have pivot reuse we might actually want more than that. This puts pivot selection into a loop so that if we don't get enough pivots to reach our target, we try again until either we get enough or we get none (in which case we can warn about it).
-
Jason Rhinelander (15 Oct 25)
Use same fuzz for same slot Experimenting with large number of path builds showed a problem with the previous random approach: path expiries were distributed all over the place, which meant excessive CC republishes (e.g. with 100 paths all expiring at slightly different times there would be around 100 republishes per 20 minutes). This tweaks the randomness so that we always use the exact same random fuzz for any paths built in a particular slot so that even if you have an extreme number of paths, you still only publish every 5 minutes (on average).
-
Jason Rhinelander (15 Oct 25)
Fix the slot0 fixed fix again Something was still wrong with the slot0 fix in that slot0 was referencing the wrong slot (i.e. was a slot start point 0-5min ago), and as a result we ended up with paths in the 15-20m slot being considered too large relative to slot0 and producing warnings. The problem was that slot0 was wrong, and was actually referencing slot-minus-1, and our first slot for consideration (i.e. slot 0) needs the +1 to get us to the first non-negative slot position so that slots 0 through 3 map to times in the [0-5], [5-10], [10-15], [15-20] minute ranges. Also rewrites the comment to better explain the +1 because the original explanation I wrote confused us to the point of a first fix (and update to that fix) that broke things.
-
Jason Rhinelander (14 Oct 25)
Allow maintenance of more inbound paths
-
Jason Rhinelander (15 Oct 25)
add extra comment about lifetime fuzz
-
Jason Rhinelander (14 Oct 25)
Randomize inbound path expiry time This randomizes inbound path expiry from 0-3min (with more weight closer to 0), so that inbound path builds are less correlatable. Before this inbound/utility paths would always expire at the same second (within each 5min span), and so inbound paths were somewhat fingerprintable. This also extends relays to accept paths up to 23m to allow the longer builds at the top end. Also adds some trace logging with CC details when publishing.
-
Thomas Winget (16 Oct 25)
fetching getting old cc is fine, actually it felt like a good idea to re-fetch cc immediately if we are in a bad state, but perhaps that is not the best idea. This could be revisited later, but for now a successful fetch is a successful fetch, and we don't re-fetch again for a while.
-
Thomas Winget (16 Oct 25)
change outbound client session dead-ish parameters
-
Thomas Winget (16 Oct 25)
contactdb for clients makes no sense also it should actually purge expired client contacts on relays
-
Thomas Winget (15 Oct 25)
fix path switch/reinit encoding, accept new session tag
-
Thomas Winget (14 Oct 25)
outbound sessions attempt to re-establish when other side closes in future this will be an option (not sure on default), but for now an outbound session will treat a session close as an affirmative message that the other side has gone away (likely due to a restart) and will attempt to re-init rather than closing itself as well.
-
Thomas Winget (11 Oct 25)
outbound client session intro refresh fixes outbound client sessions should attempt an intro refresh if they have not received a new client contact in a while, or have not heard from the other end of the session for many seconds on refresh, current paths should check against relay RouterID *and* pivot hop id to decide if they're still valid. Updating the hop id instead of dropping the path could be a better solution...
-
Thomas Winget (10 Oct 25)
change session accept log to reflect new behavior
-
Thomas Winget (10 Oct 25)
correctly mutate nonce on path switch message receive
-
Thomas Winget (08 Oct 25)
path switch backup session init In the event that the remote end of an outbound session restarts, it would be good to be able to "resume" that session quickly and transparently. As such, path switch messages will now also include a session init message so that if the remote does not have a session for the path switch, it will make a new session and the initiator can carry on as normal. TODO: The outbound session does not currently do anything special/different with the "session accept" message it will receive in response to this session init.
-
Jason Rhinelander (16 Oct 25)
Merge pull request #2275 from tewinget/datagram-congestion Datagram congestion
-
Thomas Winget (30 Sept 25)
fix potential circular shared_ptr leak
-
Thomas Winget (26 Sept 25)
add datagram queue limit Makes quic connections use libquic's datagram queue tail-drop. Testing with many values on connections varying from ~200ms to ~500ms latency, 2MB seems to make Goldilocks pretty happy.
-
Jason Rhinelander (16 Oct 25)
Merge pull request #2274 from tewinget/session-and-ip-expiration Session and ip expiration
-
Jason Rhinelander (16 Oct 25)
Add backwards compatibility for lokinet 0.9 private keyfiles
-
Jason Rhinelander (16 Oct 25)
Fix `[network]:keyfile` creation, and make it accept hex When a keyfile was given in the config but the file doesn't exist, it was erroring out instead of generating one. The generated file is also raw bytes, which is slightly harder to transfer; this changes it to allow hex and now generates files in hex as well.
-
Thomas Winget (07 Oct 25)
make DNS lookup create outbound session (as it used to do) Also standardize getting current time, though hopefully that changes soon anyway.
-
Thomas Winget (03 Oct 25)
add last activity time and timeout close to sessions
-
Thomas Winget (11 Oct 25)
libquic stream changes, tcp tunnel still broken so ignore for now
-
Thomas Winget (10 Oct 25)
bump libquic
Oxen Website
Website
Oxen | Privacy made simple.
Oxen is built by the OPTF, a passionate team of advocates, creatives, and engineers building a world where the internet is open, software is free and accessible, and your privacy is protected. The OPTF also builds other platforms using Oxen technology, and supports other developers in building on Oxen.
Redirects
Does not redirect
Security Checks
All 66 security checks passed
Server Details
- IP Address 104.21.47.101
- Location San Francisco, California, United States of America, NA
- ISP CloudFlare Inc.
- ASN AS13335
Associated Countries
-
US
Safety Score
Website marked as safe
100%
Blacklist Check
oxen.io was found on 0 blacklists
- ThreatLog
- OpenPhish
- PhishTank
- Phishing.Database
- PhishStats
- URLhaus
- RPiList Not Serious
- AntiSocial Blacklist
- PhishFeed
- NABP Not Recommended Sites
- Spam404
- CRDF
- Artists Against 419
- CERT Polska
- PetScams
- Suspicious Hosting IP
- Phishunt
- CoinBlockerLists
- MetaMask EthPhishing
- EtherScamDB
- EtherAddressLookup
- ViriBack C2 Tracker
- Bambenek Consulting
- Badbitcoin
- SecureReload Phishing List
- Fake Website Buster
- TweetFeed
- CryptoScamDB
- StopGunScams
- ThreatFox
- PhishFort
Website Preview
Oxen Reviews
More P2P Messaging
-
Tor-based Android app for P2P encrypted messaging and forums. Where content is stored securely on your device (not in the cloud). It also allows you to connect directly with nearby contacts, without internet access (using Bluetooth or WiFi).
-
Desktop instant messenger, that uses the Tor network to rendezvous with your contacts without revealing your identity, location/ IP or meta data. There are no servers to monitor, censor, or hack so Ricochet is secure, automatic and easy to use.
-
P2P encrypted chat network with cross-platform GNU client apps. Jami supports audio and video calls, screen sharing, conference hosting and instant messaging.
-
Open source, encrypted, distributed chat network, with clients for desktop and mobile - see supported clients. Clearly documented code and multiple language bindings make it easy for developers to integrate with Tox.
About the Data: Oxen
API
You can access Oxen's data programmatically via our API.
Simply make a GET request to:
https://api.awesome-privacy.xyz/communication/p2p-messaging/oxen The REST API is free, no-auth and CORS-enabled. To learn more, view the Swagger Docs or read the API Usage Guide.
About the Data
Beyond the user-submitted YAML you see above, we also augment each listing with additional data dynamically fetched from several sources. To learn more about where the rest of data included in this page comes from, and how it is computed, see the About the Data section of our About page.
Share Oxen
Help your friends compare P2P Messaging, and pick privacy-respecting software and services.
Share Oxen and Awesome Privacy with your network!