SimpleX-Chat/blog/20210914-simplex-chat-v0.4-released/index.html

282 lines
12 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>SimpleX announces SimpleX Chat v0.4</title>
<link rel="icon" type="image/png" sizes="96x96" href="/img/favicon.ico" />
<link href="/css/tailwind.css" rel="stylesheet" />
<link rel="stylesheet" href="/css/blogs.css" />
<link rel="stylesheet" href="/css/blog.css" />
<script async defer src="https://buttons.github.io/buttons.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
const h1 = document.querySelectorAll("h1");
const h2 = document.querySelectorAll("h2");
const h3 = document.querySelectorAll("h3");
const h = [...h1, ...h2, ...h3];
h.forEach((h) => {
h.setAttribute("id", `${h.innerText.split(" ").join("-").toLowerCase()}`);
});
document.querySelectorAll("[id]").forEach((element) => {
let str = element.getAttribute("id");
str = str.split(":").join("");
str = str.split("?").join("");
str = str.split("/").join("");
str = str.split("!").join("");
str = str.split("'").join("");
element.setAttribute("id", str);
});
const url = window.location.href;
const hash = url.split("#")[1];
if (hash) {
console.log("entered")
const element = document.getElementById(hash);
const yOffset = 0; // Offset for fixed header
const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset;
window.scrollTo({
top: y,
behavior: 'smooth'
});
}
});
</script>
</head>
<body class="sm:bg-gray-100">
<header>
<nav class="container">
<div class="flex items-center gap-[16px] h-full">
<a href="/">
<img alt="simplex logo" class="logo" src="/img/simplex.svg" />
</a>
<div class="hidden lg:flex gap-[16px]">
<a class="tracking-[1px] rounded text-[1.4rem] font-medium white-paper-nav-btn"
href="https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md">Whitepaper</a>
<a class="tracking-[1px] rounded text-[1.4rem] font-medium comparison-nav-btn"
href="/#comparison">Comparison</a>
<a class="tracking-[1px] rounded text-[1.4rem] font-medium blog-nav-btn" href="/blog">Blog</a>
</div>
</div>
<div class="flex gap-4">
<div class="nav__buttons">
<div class="github">
<a class="github-button" href="https://github.com/simplex-chat/simplex-chat" data-size="large"
data-show-count="true" aria-label="Star simplex-chat on GitHub">Star</a>
</div>
<div class="donate d-none-576">
<a href="https://opencollective.com/simplex-chat" target="_blank">
<span class="button">Donate</span></a>
</div>
</div>
<div class="toggle self-stretch">
<label class="toggle-btn"><span></span></i></label>
</div>
</div>
</nav>
<div class="w-full fixed top-[60px] z-[99] bg-[#fbd561] mobile-nav">
<a class="flex-1 flex justify-center text-[1.2rem] tracking-[1px] font-medium text-base px-3 py-4 border-x-0 border-y-0 border-t-[1px] border-solid border-yellow-200 white-paper-nav-btn"
href="https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md">Whitepaper</a>
<a class="flex-1 flex justify-center text-[1.2rem] tracking-[1px] font-medium text-base px-3 py-4 border-x-0 border-y-0 border-t-[1px] border-solid border-yellow-200 comparison-nav-btn"
href="/#comparison">Comparison</a>
<a class="flex-1 flex justify-center text-[1.2rem] tracking-[1px] font-medium text-base px-3 py-4 border-x-0 border-y-0 border-t-[1px] border-solid border-yellow-200 blog-nav-btn"
href="/blog">Blog</a>
</div>
</header>
<script>
const toggleBtn = document.querySelector(".toggle-btn")
toggleBtn.addEventListener("click", () => {
if (toggleBtn.classList.contains("active-toggle-btn")) {
console.log("unchecked")
document.querySelector(".mobile-nav").classList.remove("mobile-nav-active")
toggleBtn.classList.remove("active-toggle-btn")
} else {
console.log("checked")
document.querySelector(".mobile-nav").classList.add("mobile-nav-active")
toggleBtn.classList.add("active-toggle-btn")
}
})
</script>
<style>
header {
overflow: hidden;
}
/* ====== NAV TOGGLE BUTTON ====== */
.toggle {
display: none;
}
.toggle-btn {
height: 100%;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.toggle-btn span {
width: 20px;
height: 2px;
background-color: #062d56;
position: relative;
}
.toggle-btn span::after,
.toggle-btn span::before {
content: "";
width: 100%;
height: 100%;
background-color: #062d56;
position: absolute;
left: 0;
}
span::before {
top: -8px;
}
span::after {
top: 8px;
}
/* ====== Styles Applied AFTER the CLICK of TOGGLE BUTTON ====== */
.active-toggle-btn span {
background-color: transparent;
}
.active-toggle-btn span::before {
top: 0;
transform: rotate(45deg);
background-color: #062d56;
}
.active-toggle-btn span::after {
top: 0;
transform: rotate(-45deg);
background-color: #062d56;
}
.mobile-nav {
display: block;
transform: translateX(-100%);
transition: transform 0.5s ease-out;
}
.mobile-nav-active {
display: block;
transform: translateX(0%);
transition: transform 0.5s cubic-bezier(0.02, 0.48, 0.59, 1.48);
}
@media (max-width: 1024px) {
.toggle {
display: inline-block;
}
}
</style>
<section class="container">
<div class="bg-white py-6 sm:py-12 sm:px-8 md:px-16 lg:px-20"><h1>SimpleX announces SimpleX Chat v0.4</h1>
<p><strong>Published:</strong> Sep 14, 2021</p>
<h2>Open-source decentralized chat that uses privacy-preserving message routing protocol</h2>
<p>We are building a new platform for distributed Internet applications where privacy of the messages <em>and</em> the network matter. <a href="https://github.com/simplex-chat/simplex-chat">SimpleX Chat</a> is our first application, a chat application built on the SimpleX platform that serves as an example of the power of the platform and as a reference application.</p>
<h2>What is SimpleX?</h2>
<p>We recognised that there is currently no messaging application which respects user privacy and guarantees metadata privacy -- in other words, messages could be private, but a third party can always see who is communicating with whom by examining a central service and the connection graph. SimpleX, at it's core, is designed to be truly distributed with no central server. This allows for enormous scalability at low cost, and also makes it virtually impossible to snoop on the network graph.</p>
<p>The first application built on the platform is Simplex Chat, which for now is terminal (command line) based with mobile apps in the pipeline. The platform can easily support a private social network feed and a multitude of other services, which can be developed by the Simplex team or third party developers.</p>
<h2>What's new in v0.5?</h2>
<p>We're exicted to announce that SimpleX Chat now supports group chat and file transfer!</p>
<h3>Chat groups</h3>
<p>To create a group use the <code>/g &lt;group&gt;</code> command. You can then invite contacts to the group by entering the <code>/a &lt;group&gt; &lt;name&gt;</code> command. Your contact(s) will need to use the <code>/j accept</code> command to accept the invitation to the group. To send messages to the group, simply enter <code>#&lt;group&gt; &lt;message&gt;</code>.</p>
<p><strong>Please note:</strong> Groups are not stored on any server; they are maintained as a list of members in the app database. Sending a message to the group sends a message to each member of the group.</p>
<p><img src="/img/images/groups.gif" alt="simplex-chat"></p>
<h3>File transfer</h3>
<p>Sharing files is simple! To send a file to a contact, use the <code>/f @&lt;contact&gt; &lt;file_path&gt;</code> command. The recipient will have to accept before the file is sent.</p>
<p><img src="/img/images/files.gif" alt="simplex-chat"></p>
<h2>We're always looking for help!</h2>
<p>We'd really appreciate your comments, criticism and support - a star on the GitHub repo, downloading and testing the chat or any contribution to the project will help a lot thank you for all your support!</p>
<p><strong>Please note:</strong> SimpleX Chat is in early stage development: we are still iterating protocols, improving privacy and security, so if you have communication scenarios requiring high security, you should consider some other options for now.</p>
<p>Our goal is to create a new kind of chat platform that lets you control your chat!</p>
<p>Originally published at <a href="https://www.reddit.com/r/selfhosted/comments/poal79/simplex_chat_an_opensource_decentralized_chat/">https://www.reddit.com/r/selfhosted/comments/poal79/simplex_chat_an_opensource_decentralized_chat/</a></p>
</div>
</section>
<footer>
<div class="container">
<img alt="simplex logo" class="logo d-none-992" src="/img/simplex.svg" />
<p class="copyright">
&#169; 2020-22 SimpleX | Open-Source Project <span class="d-none-576">|</span>
<a class="d-none-576" href="https://github.com/simplex-chat" target="_blank"><img
src="/img/icons/github.svg" /></a>
<a class="d-none-576" href="https://www.reddit.com/r/SimpleXChat/" target="_blank"><img
src="/img/icons/reddit.svg" /></a>
<a class="d-none-576" href="https://twitter.com/simplexchat" target="_blank"><img
src="/img/icons/twitter.svg" /></a>
<a class="d-none-576" href="https://www.linkedin.com/company/simplex-chat/" target="_blank"><img
src="/img/icons/linkedin.svg" /></a>
<a class="d-none-576" href="mailto:chat@simplex.chat" target="_blank"><img src="/img/icons/email.svg" /></a>
</p>
<div class="github d-none-992">
<a class="github-button" href="https://github.com/simplex-chat/protocol" data-size="large"
data-show-count="true" aria-label="Star simplex-chat on GitHub">Star</a>
</div>
</div>
</footer>
<script>
window.addEventListener("click", (e) => {
if (e.target.tagName === "A") {
e.preventDefault();
if (e.target.getAttribute("href").split("#")[0] == "") {
const id = e.target.getAttribute("href").split("#")[1];
const element = document.getElementById(id);
const yOffset = 0; // Offset for fixed header
const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset;
window.scrollTo({
top: y,
behavior: 'smooth'
});
} else {
window.open(e.target.href, "_self");
}
}
});
// convert relative blog links to absolute links
document.querySelectorAll("a").forEach((a) => {
const dotSepList = a.getAttribute("href").split(".");
if (dotSepList[0] == "") {
const hashSepList = dotSepList[dotSepList.length - 1].split("#")
if (hashSepList[0] == "md") {
let str = `/blog${dotSepList[1]}`;
for (let i = 2; i < dotSepList.length; i++) {
if (dotSepList[i].substring(0, 2) != "md") {
str += "." + dotSepList[i];
} else break;
}
if (hashSepList[1]) {
str += "#" + hashSepList[1];
}
a.setAttribute("href", str);
}
}
});
</script>
</body>
</html>