This commit is contained in:
2026-04-25 16:36:34 +08:00
commit db90e7579b
1876 changed files with 189777 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
---
title: Tailchat is ready for global
authors: moonrailgun
image: /img/logo.svg
keywords:
- tailchat
tags: [blog]
---
After some days work, and efforts of the past two years. `Tailchat` is ready for face to global service.
In feature, we will face more and more challenge from global business. `Tailchat` is a open source project, and we think the future of `Tailchat` has more possibility.
I draw a draft for `Tailchat` future, some are ready and some are not ready. But I'm confident I can keep going.
![](/img/intro/connect-apps.excalidraw.svg)

View File

@@ -0,0 +1,31 @@
---
title: It's time to officially step into the era of noIM
authors: moonrailgun
image: /img/logo.svg
keywords:
- tailchat
- noIM
tags: [blog]
---
From far to now, there have been many rounds of changes in communication methods, from email to IRC, to today's communication tools such as Slack or Discord that include audio and video communication, and chats such as Telegram and Signal that focus on message privacy and security. Now, I think it's time to step into a new stage, the noIM (Not Only IM) stage.
As people's needs for information communication methods continue to evolve, we need to collaborate on more and more platforms. We can exchange information on Slack, communicate design drafts on Figma, exchange documents on Notion, conduct video conferences on Zoom, and so on. With the growing power of the Web, most of the online tools can be operated on the web.
This brings possibility to the concept of noIM.
noIM means that an instant messaging application is not only for sending and receiving messages of course, messaging tools will always be the core of instant messaging application iterations but also means that it should undertake a multi-person collaborative circulation tool and responsibility. Because IM is the natural way, it represents the most basic way of communication and collaboration on the Internet. We can seamlessly connect various tools based on IM. Imagine that, we can do things in the same tool that we needed to switch between multiple tools before, and these tools can interact to a certain extent through the central IM.
![](/img/intro/connect-apps.excalidraw.svg)
Excellent chat systems such as Slack and Discord also provide an open platform, allowing third-party applications to interact with chat applications, but I don't think that's enough. Current integration methods simply send links, in the new era, we need a more native integration method. Many things should be shared and connectedsuch as account system, permission system, group relationship, etc.
A basic noIM system should have an open design to allow it to be combined with other tools in a native way, or to implement all possible collaboration methods by itself - such as G Suite, in this way, the flow between applications can be very smooth, but I think a better way is to connect third-party application users to have the right to choose their favorite tools, so it is inevitable to design a sufficiently open design.
So I designed a product like Tailchat. In addition to having an open platform with existing popular projects, Tailchat also provides a set of plugin mechanisms to help achieve deeper integration. Through Tailchat's plugin mechanism, any product can directly obtain all existing contexts of Tailchat, such as user system, permission system, etc. More importantly, Tailchat is an open source and open platform, which means Tailchat has better privacy, can develop plugins very well, and it's easy to make tools unique to users. This is the same as the ecology that VSCode wants to create, but unlike VSCode, Tailchat, as an IM, can naturally bring more interactions, which is a natural advantage of chat software. This is also why I believe that noIM can shine in the future.
Github: [https://github.com/msgbyte/tailchat](https://github.com/msgbyte/tailchat)
Office Website: [https://tailchat.msgbyte.com/](https://tailchat.msgbyte.com/)
Try in online: [https://nightly.paw.msgbyte.com/](https://nightly.paw.msgbyte.com/)

View File

@@ -0,0 +1,14 @@
---
title: Release Note v1.6.7
authors: moonrailgun
image: /img/logo.svg
slug: release-1.6.7
keywords:
- tailchat
tags: [Release Note]
---
- Enhanced personal brand customization, allowing to customize the name and background image of the server login entry (pictures have no file upload limit)
- Optimized the memory usage of the background management platform, and the memory usage is only about 1/4 of the original
- The background management platform adds converseID filtering
- Fixed some bugs

View File

@@ -0,0 +1,12 @@
---
title: Tailchat Synology deployment record
authors: reacher
image: /img/logo.svg
keywords:
- tailchat
tags: [blog]
---
:::info
Its blog is a chinese only blog from users, please switch to chinese language to read it.
:::

View File

@@ -0,0 +1,14 @@
---
title: Release Note v1.6.8
authors: moonrailgun
image: /img/logo.svg
slug: release-1.6.8
keywords:
- tailchat
tags: [Release Note]
---
- Optimize the performance of the emoji panel and reconstruct the rendering method of a single emoticon.
- Modified the style of url in the message, adding a dotted underline for emphasis
- Added a send button, when there is content in the message input box, the + sign will be turned into a send button, optimizing the experience of sending messages on the mobile terminal
- Fix some copywriting errors, fix the avatar path parsing error, and fix the error of nesting page when entering a path without a protocol header on the web panel

View File

@@ -0,0 +1,18 @@
---
title: Release Note v1.7.0
authors: moonrailgun
image: /img/logo.svg
slug: release-1.7.0
keywords:
- tailchat
tags: [Release Note]
---
- Added wxpusher plugin for message notification
- Added more markdown syntax support (such as tables)
- Added markdown text editor
- Optimized the display of message notifications and removed the rich text tags
- Added support for http protocol addresses in the plugin documentation
- The plug-in center has added plug-in entrances for open platforms and third-party integration
- A push push has added a request id record for troubleshooting
- Optimize the switching display of the content panel in the mobile environment, use transform instead of width

View File

@@ -0,0 +1,147 @@
---
title: "Tailchat x Laf: Develop a chatbot in 10 minutes"
authors: moonrailgun
image: /img/logo.svg
slug: tailchat-laf-robot
keywords:
- tailchat
- laf
tags: [Guide]
---
## Introduction
[Tailchat](https://github.com/msgbyte/tailchat) is an open source **noIM(not only IM)** application, in addition to the general instant messaging function, it also includes a complete open platform and plugin ecosystem. This time we will use the open platform of `Tailchat`.
[Laf](https://github.com/labring/laf) is an open source **serverless** cloud development that provides out-of-the-box application resources such as cloud functions, cloud databases, and cloud storage. This time we will use the cloud function provided by him.
Because both platforms are so convenient, it only takes us 10 minutes to develop a complete conversational bot.
## TLDR
### Create an open platform application
No nonsense, let's get right to work.
First of all, we need to create an open platform application in `Tailchat`'s open platform.
Before creating, we need to install the relevant plugins, because the capabilities of Tailchat are encapsulated in different plugins, and some capabilities will not be visible if the plugins are not installed.
We need to install the open platform plugin (com.msgbyte.openapi) and third-party integration (com.msgbyte.integration) plugin
![](/img/blog/robot-with-laf/1.png)
Then we can see our open platform plugin on the settings page in the lower left corner
Quickly create an application:
![](/img/blog/robot-with-laf/2.png)
![](/img/blog/robot-with-laf/3.png)
After creating, click **Enter** to enter the application details page.
![](/img/blog/robot-with-laf/4.png)
At this point we can get two things, one is **appid** used to identify the unique id of the app, and the other is **appsecret** used to interact with services. It can be simply understood as the account name and password of the open platform application.
Click on the little eyes to display the complete secret key without desensitization. These two fields we will use next.
### Create laf cloud function
Next, let's create a cloud function for the background service of the robot.
First log in/register an account in [laf](https://laf.dev/) and create an application.
Each account provides a free experimental application for a quick trial in `laf`, we can create a free one directly
![](/img/blog/robot-with-laf/5.png)
After the application is started, we can directly write code on the web page.
Click the plus sign in the upper left corner to create a cloud function
![](/img/blog/robot-with-laf/6.png)
Install the `tailchat-client-sdk` package officially provided by **Tailchat** in the dependencies in the lower left corner for rapid development
![](/img/blog/robot-with-laf/7.png)
After clicking Save, the application will automatically restart, and your application is equivalent to installing this package. At this point, we can directly import it. If there is a typescript support in the package, the web editor will also have a type hint.
The click function quickly writes the following:
```ts
import { TailchatClient, stripMentionTag } from 'tailchat-client-sdk';
const host = '<your tailchat instance backend host>';
const appId = '<appId>';
const appSecret = '<appSecret>';
const client = new TailchatClient(host, appId, appSecret)
export async function main(ctx: FunctionContext) {
console.log('receive', ctx.body);
const type = ctx.body.type;
if (type === 'message') {
const payload = ctx.body.payload;
try {
const message = await client. replyMessage({
messageId: payload. messageId,
author: payload. messageAuthor,
content: payload. messageSnippet
}, {
groupId: payload.groupId,
converseId: payload.converseId,
content: `Your message: ${stripMentionTag(payload. messageSnippet)}`,
})
console.log('send message success:', message)
} catch (err) {
console.log('send message failed:', err)
}
}
return { data: 'hi, laf' }
}
```
Fill in the corresponding contents of `host` / `appId` / `appSecret` at the top of the code, where `host` is the address of the `Tailchat` backend you deployed yourself. If you are using the official `nightly` environment, you can directly fill in `https://tailchat-nightly.moonrailgun.com`
The logic of the code is very simple, it is to receive the message pushed from `Tailchat`, and reply the received content as it is.
After editing the code, click the publish button in the upper right corner to publish the code online, and you can also see that `laf` provides a url that can be accessed from the external network. This url needs to be recorded and we will use it later.
![](/img/blog/robot-with-laf/8.png)
At this point, our robot service is complete.
### Robot configuration
At this point we are back in `Tailchat`. We still have a few steps left.
Re-open the app details and switch to the Robots tab. Turn on the robot function and fill the `url` we got in `laf` into the callback address
![](/img/blog/robot-with-laf/9.png)
Then add our robot to the group, open the details in the upper left corner of the group
![](/img/blog/robot-with-laf/10.png)
Find the integration function on the left, enter the appid to find the application, and click the Add robot to the group button.
![](/img/blog/robot-with-laf/11.png)
At this time, after we @robot in the channel and input content, we can see that the robot has responded accordingly
![](/img/blog/robot-with-laf/12.png)
Since then, a simple conversational robot has been completed.
If you want other functions, you can directly modify the source code of the robot. Through bots we can connect Tailchat with various services.
## Related Links
- [Tailchat](https://tailchat.msgbyte.com/)
- [Laf](https://laf.dev/)

View File

@@ -0,0 +1,20 @@
---
title: Release Note v1.7.4
authors: moonrailgun
image: /img/logo.svg
slug: release-1.7.4
keywords:
- tailchat
tags: [Release Note]
---
- The new version of admin has been released, you can experience it first through [Deployment Documentation](/docs/deployment/admin)
- Add a group welcome plugin, which supports variables and rich text
- Chat box supports multi-line text
- wxpusher adds sender nickname prompt
- Add cache automatic update mechanism when user popover is opened
- cli adds smtp verification function to verify smtp uri
- Fix the bug that the group setting update operation does not take effect
- Fix the problem that inputting the Enter key to send a picture will add a newline character to the input box at the same time
- Fix the bug that modifying the configuration and modifying the title icon will not be refreshed
- Fix some known issues

View File

@@ -0,0 +1,15 @@
---
title: Release Note v1.7.5
authors: moonrailgun
image: /img/logo.svg
slug: release-1.7.5
keywords:
- tailchat
tags: [Release Note]
---
- Repair the permission logic detection, and fix the bug that the permission does not take effect after the identity group is set
- Admin platform adds avatar address preprocessing
- Admin platform adds reference types
- Admin platform adds custom header and footer
- Adjust the invitation strategy to lead to the login page instead of the registration page when not logged in

View File

@@ -0,0 +1,20 @@
---
title: Release Note v1.7.6
authors: moonrailgun
image: /img/logo.svg
slug: release-1.7.6
keywords:
- tailchat
tags: [Release Note]
---
- Added ban/unban user feature
- Added friend nickname feature
- The friend nickname will be applied in the `group member list`/`converse message`/`mention`/`converse title`, etc.
- Added the number of messages in the `admin-next`
- Added cache management in the `admin-next`, and now the cache can be cleared through the `admin-next`, which is very friendly to users who do not know redis
- Added display of `disableGuestLogin` and `disableUserRegister` in `admin-next` configuration
- Added statistics on the number of new users per day on the `admin-next` home page
- Mail model add creation time and update time
- and adjusted some fields
- Optimized the display of message content and id field in the `admin-next`

View File

@@ -0,0 +1,57 @@
---
title: The Tailchat benchmark report is freshly released, just takes 1.2 seconds to fully accept broadcast messages in 10k user
authors: moonrailgun
image: /img/logo.svg
slug: benchmark-report
keywords:
- tailchat
- benchmark
tags: [Report]
---
As an IM application, `Tailchat` naturally needs to be able to handle high concurrent multiplayer online capabilities.
In order to measure `Tailchat`'s ability to handle a large number of users and give our customers enough confidence, we decided to take the time to test the actual performance in the actual production environment.
Because in order to meet the scale requirements of users with different levels and needs, the underlying design of `Tailchat` is based on a distributed architecture, which means that we can carry business requirements of different scales through horizontal expansion.
However, the disadvantage of distributed is that more resources are spent on data communication and forwarding, and it is not as fast as the traditional centralized architecture in small-scale operations.
This seems to be a contradiction that can't have both fish and bear's paw, but in order to obtain the advantages of both, `Tailchat` has made some special optimizations on single-instance deployment, namely the shortest path principle. This means that if there is and only itself can consume in the mutual calls between microservices, the forwarding stage will be skipped and the request will be sent directly to itself.
This makes the capability of a single machine better than a cluster if the performance is sufficient. And when a single machine cannot support enough business needs, switch to cluster deployment and use multiple instances together to carry high-demand business scale.
![](/img/architecture/transport.excalidraw.png)
## Benchmark test method
In order to measure the performance of Tailchat in multiplayer online situations, we chose the ability to send and receive messages as the measurement standard.
That is: **When several people in a group are online at the same time, the time it takes for a complete link from the start of sending a message to the forwarding of all online users to receive the message**
> Because for the IM project, the traditional 90th/99th percentile data is meaningless, and the most basic ability performance is that all users can receive broadcast messages without loss. Therefore, the requirement for Tailchat is to only look at the 100th percentile data of the time-consuming message dissemination
At the same time, test the **growth performance** of **resident** cpu and memory when multiple people are online
> This test is supported by the cluster service provided by [sealos](https://sealos.io/). sealos is really convenient!
The pressure measurement method is mainly divided into three steps:
1. Register users in batches, and record the token (Token) returned by the system after registration to a local file
1. Load the token stored in the previous step, log in according to the token and establish a persistent connection. After all users have logged in, record the growth of resident resources.
1. After all users have logged in, select a user to connect and send a message to the designated channel of the designated group, and record the start time at the same time. When all connections have received this message, record the end time. At this time, record the end time and calculate the intermediate time consumption. This method counts several sets of data to eliminate errors.
## Benchmark test overview
This pressure test tested the performance of 100 users, 500 users, 1000 users, 2000 users, 5000 users, and 10000 users who are online at the same time and in the same group.
In order to squeeze the performance of `Tailchat` as much as possible, I chose to use the minimum configuration cap to test as many services as possible. In the case of 3 instances, the maximum support reached 800 users, and there was a problem. After expanding to 5 instances, it successfully supported 1,000 users, but when the number of simultaneous online users rose to about 1,300, a bottleneck appeared again. At this time, I guess that it may be caused by the ulimit that comes with the linux system. After all, no relevant directional optimization has been done before this. At this point, I think the cluster test may come to an end temporarily, and I transferred to the window platform.
Sure enough, it lived up to my expectations. There are no relevant restrictions on the windows platform, and the number of online users of `Tailchat` has successfully broken through the limit of 2k, 5k, or even 10k. At this point, I think our stress testing work has met our initial expectations. After all, the same industry has reached the upper limit of the same industry. Of course, I think its upper limit is far more than this, because there is still a lot of room for optimization.
In the highest 10,000-user use case, we tested the elapsed time from message sending to all users receiving the message 5 times. In the end we found that the answer given by `Tailchat` is 1.2 seconds, that is, a message will be sent to all users within 1.2 seconds. I think this data is quite ideal. After all, groups with 10,000 people online at the same time often have more than 100,000 people. Of course, in the follow-up, the situation of a large number of users will be further optimized, and this data will only be a starting point rather than an end point.
## Full Report
The specific benchmark test report can be found in: [Benchmark report](/docs/benchmark/report)

View File

@@ -0,0 +1,23 @@
---
title: Release Note v1.8.0
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.0
keywords:
- tailchat
tags: [Release Note]
---
- The new version of admin has been officially launched to replace the old version of the admin system
- If you still want to use the old version of the admin system, you can use `admin-old.yml`, and the image will not continue to build the old version of the admin in subsequent versions. If you need the old version of the admin but the new version of the admin does not support it, please as soon as possible Open an issue to let us know
- Optimized the font of the chat page and beautified the font performance on the windows platform
- Fixed a bug that the user name of the @ function could not be displayed normally when the user name contained spaces
- Fixed a bug where casual users could verify email
- Added preprocessing of admin file path
- Added a group independent page, now you can extract the group page separately
- Admin added batch delete
- Admin adds user field display logic
- Cli has added the `smtp test` command, you can now quickly send a test email through the cli tool to verify the entire link
- Cli adds various stress testing commands to test the number of users online
- The health interface adds more context, including instance id, process information
- Released the stress test report, you can see the content of the stress test report here: [The Tailchat benchmark report is freshly released, just takes 1.2 seconds to fully accept broadcast messages in 10k user](./2023-06-19-benchmark-report.md)

View File

@@ -0,0 +1,21 @@
---
title: Release Note v1.8.1
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.1
keywords:
- tailchat
tags: [Release Note]
---
- Add a third-party login plugin (com.msgbyte.iam), currently supports `github` login, deployment document see [iam - Third party login](https://tailchat.msgbyte.com/docs/advanced-usage/plugins/com.msgbyte.iam)
- The inbox supports content in markdown format
- Added the ability to send system messages. Currently, it supports single person sending and everyone sending markdown format notifications. You can see the feature entry in the admin system.
- Everyone is sent according to the number of registered users on the server. If there are too many users, it is not guaranteed to be received in real time.
- Added the ability to modify the nickname when registering to strengthen the user's awareness of modifying the nickname
- Added the `com.msgbyte.env.electron` plugin to prepare for the desktop
- Beautify the dashboard chart color
- Beautify the github star prompt and add emoji
- Fix some known issues
In addition, the desktop version will release the first beta version in the nearly future

View File

@@ -0,0 +1,119 @@
---
title: Share how I have operated open source projects and reached 1k star in the past few years
authors: moonrailgun
image: /img/logo.svg
slug: share-1kstar
keywords:
- tailchat
tags: [Share]
---
I developed an IM project [Tailchat](https://tailchat.msgbyte.com/), and finally reached the 1k star milestone in the early morning of June 28, 2023. I am very excited. Of course, for many well-known open source projects, this only need takes a few days, but it is still very important for me. Therefore, I really want to share how I operate an open source project as an open source enthusiast.
![](/img/blog/1kstar/1.png)
![](/img/blog/1kstar/2.png)
First of all, I must admit that I am a very typical and pure programmer. I have no background, no resources, and I am not good at communication. It can be said that I am a relatively socially phobic person. For people like me, the difficulty is not how to develop an app, but how to promote my app after the development is completed or reaches a certain stage, so that everyone can understand my philosophy.
Once, I naively thought that open source was just sharing the source code so that everyone could see my code. However, I gradually realized that open source is more like a business. It not only needs to develop its own products, but also needs to find ways to sell the products.
## A good official website is very important
The official website is the facade of an application, and for many libraries, the README is their official website. However, for relatively large and complex projects, a simple README may not provide enough information, and an independent official website page becomes very important.
An excellent official website can increase users' trust in the project. Usually, my basic trust in open source projects comes from the following aspects: whether there is a README or official website, whether there are enough stars, and how much usage/download.
For example, Tailchat's official website https://tailchat.msgbyte.com/ has become quite good after a few iterations. The first screen occupies almost the entire page, and shows previews of desktop and mobile, which means that my project supports both desktop and mobile. Then succinctly list the characteristics that I think are important, and these are also the key points that I want my product to distinguish from other similar projects.
The official website is the embodiment of product thinking. Convey your ideas to users through the official website, so that users can understand your design philosophy and why you want to make such a product.
On the other hand, the official website also provides guidance for users during use. Unless your product does not require users to do anything, just open it and use it (such as various small games), a complete document will help users far beyond your imagination.
Don't think that you can stop doing these things just because the source code is open source. The code itself is the document. Recalling our own development experience, when using a library, we would not choose to view the source code unless we had to. This is true for libraries, let alone a complete project?
For open source projects, a complete and multi-platform compatible deployment method is the most basic bottom line.
## Focus on differentiation
For open source projects, the easiest way to introduce your products to others is the open source alternative of xxxx, where xxxx is generally a commercial application that you are familiar with. This can give users a very basic idea of your product very quickly. You can also quickly establish a basic concept through everyone's consensus.
For example, if you want to build an online shopping mall, then you can say that you have created a substitute for Amazon. For example, if you want to make a forum, you can say that you want to make a substitute for discuz.
However, while saying that your project is a substitute for xxxx, you need to always be clear about the differences between yourself and the other party, instead of constantly copying the functions of other projects. For example, when I introduce and promote my project with others, I will say that I am an IM, an open source alternative to discord/slack. But at the same time I will also emphasize that it is not just an IM. I will talk with the other party about why we need a plug-in system and what the plug-in system can bring us, why I spend 2 years on the underlying architecture and polishing the system to complete this architecture, and why I think my product is excellent. for other projects.
This is a very difficult thing to do. Because most users don't care about your differences. For most users, only the most basic functions are used, and users are more concerned about whether they can meet their needs. A very sad thing is that no matter what you do, you will have many peers competing with you. The reason why users decide whether to use your product is not because of how powerful your functions are, but whether your functions can meet the needs—— Of course, if you have enough functions, so many that all imaginable needs can be met. But that is what companies do. If you are an individual open source developer, you must learn to focus and focus on differentiation.
## Emphasis on the international market
Multilingualism is a very necessary thing. Share your own product in locate is good but not enough. Especially in the open source field, you as a developer don't have to care about language boundaries. Because you are not in control of the differences in laws and regulations and privacy policies in various places. As a developer, you only need to make your product well.
Therefore, it is very important to support multiple languages. Supporting at least English can greatly expand your audience. If you are not confident about your English level, please make good use of translation software.
In addition, you can go to overseas platforms to promote your application, not just limited to domestic platforms. Such as Reddit, Hackernews, medium, etc. Don't limit yourself to your own country
## Give users a sense of trust through perfect documentation and automated testing
Although a thick instruction manual will not bring any real value to the product itself, it will at least make users who pay attention to this product feel at ease.
Security is a very metaphysical thing. As a developer, you can say that your project is very easy to use and does not require any documentation at all. But even if you don't read these documents, the existence of these documents will give users a kind of trust, at least it can show that you have paid enough attention to your project.
There are similar automated test scripts, the former is for ordinary users, and the latter is for developers.
As developers, we all know the importance of CICD. CICD is an important way to ensure the code quality of a project, and it also means the bottom line of a project. If one doesn't have any CICD workflows or are all failed workflows. Then I would be very, very distrustful of it.
Open source projects naturally lack trust compared to commercial projects, because the latter are used for profit and can be used to support the operation of enterprises, which means that at least there will be no problems. And open source projects often originate from interests, which naturally give people a feeling of unreliability. Especially when the number of stars in the early stage is relatively low.
How to break this sense of distrust is also an important factor for open source maintainers to make their projects work.
## String your content together to reduce exploration costs
A very bad example is to put relevant content everywhere, making it very difficult for users to see all the content.
It is very important to have important content indexed in one place. Such as your social media, your documentation, your function manual, your demo environment, your various technical blogs....
Reduce the user's exploration cost, because if the cost is too high, the user is likely to choose to give up. That's why most sites have keywords in the footer
If you only have a README file, add all the links to the documentation so the user can clear what's there and what it's for.
Also, not just your various content, but your project itself should keep this in mind. For example, it is easy to dissuade people from registering with a mobile phone number, and a proper public content experience can better allow users to experience the charm of the product and retain it for a long time. This is what I do in Tailchat. Users can log in with a temporary account, and only need to fill in a nickname to experience the full functionality. When the user decides to keep your account for a long time, you can go through the registration process to claim the temporary account. If you want to let users join your community, you can even directly replace the entry with an invitation link.
Similarly, if your project contains multiple sub-projects. Monorepo will be a better choice than multiple warehouses. I once wrote a blog about this from a technical point of view, [talking about the benefits of merging multiple projects into one project](http://moonrailgun.com/posts/2674f04a/).
From the perspective of open source operations, multiple project repositories not only make it more difficult for users to see the whole picture, but also undermine the confidence of open source contributors, because everyone expects contributors to large projects to have their own profile pictures, even if they just change the document typo.
## Pay attention to the operation of the community and the ecology
The operation of the community is a very important part of an open source project. Only continuous feedback from the community can pull up a positive cycle of open source projects. The simplest community is to set up a reddit channel or discord group. When I was operating in the early days, I thought that since I am doing IM, why should I go to other IM platforms to operate my community? However, this is wrong, because as a developer, you should accommodate users instead of letting users accommodate you. If users prefer to use reddit, then you should choose to use reddit. If users use discord more, then you should build your own community on discord. Keeping the community active is the first element.
I really like Notion's ambassador culture and community culture. Establishing a good community-driven ecology is an essential quality for a successful open source project. Although my project is far from reaching this stage, I have studied many successful open source projects without exception. Simply put, open source is a carnival for idealists, and a good open source project is a carnival for a group of idealists. It is a very difficult thing to let users recognize your project and promote it spontaneously, but it is necessary to do it. It is much easier for a group of people to advance than one person.
On the other hand, we need to pay attention to the value of developers. What is developer value? It is what your project can bring to developers. When promoting Tailchat, I often make an analogy with vscode. vscode is a plug-in text editor. Its ontology is an expansion center + monaco editor, and its value lies in a good developer ecology. Allow different developers to realize their own ideas through vscode's plug-in system and integrate different language support. I dont know if anyone still remembers that github had its own editor atom before github was acquired by Microsoft. I also like to use it very much, atom has been deprecated since Microsoft acquired github. I believe that Microsoft also sees the great potential of the plug-in system. And Tailchat also uses the plug-in system as the underlying capability at the beginning of the design. One of my favorite sayings is: "A Product That Gets Developer Love Gets Everything". This is also the power of ecology. When the ecology is up, it will be difficult for your product to be replaced by other similar applications.
## Revisit your early adopters at the right time
It is very important to maintain seed users in the early stage. Revisit your early users in a timely manner to make your users feel that they are valued and motivated by this product. This will greatly increase the possibility of your users turning into community contributors.
Many technical people think that only code contribution is contribution. In fact, there are only a small number of people who understand the code, not to mention that there are even fewer people who need to match the technology stack of your project. If many people can make suggestions, I think it is very good for an open source project to do an international translation. up. The most important thing is that these things will be what you move forward. People want to keep moving forward either by money or interest, and the community is a gas station that continuously recharges your interest.
The early entrepreneurs I came into contact with would like to make appointments with their users to chat about the development of their projects and users' opinions. If you don't feel like you can do that, it's okay to greet with a text. Believe me, the rewards will be greater than imagined.
## Actively blog and write technical articles
I am very disgusted to promote my project by constantly and repeatedly sending the introduction of my project in various technical communities like an advertising robot. Although it seems to be a bit of a scholar's aloofness, I still feel that this kind of behavior greatly affects the experience of other people. Some people may say that it is better to be disgust than no one knows, but this is a selfish act of sacrificing other people's experience to achieve one's own.
My choice as a technical person is to write more blogs and technical documents. Promote your own projects in technical articles. I hope this should be a win-win behavior: as a reader, you gain knowledge, and as a writer, I gain exposure.
At the same time, writing articles is also a sorting out of your own ideas, which is similar to writing technical documents. I used to be very disgusted with writing technical documents, because things that can be written directly by writing code still need to write technical documents to restrain myself. Generally speaking, the time for writing technical documents is about the same as the time for writing codes, because to write a correct technical document, it is often necessary to determine the possibility of the solution. Basically, to determine the feasibility of the solution, most of the code is almost written. But now I understand the necessity of writing technical documents, more to organize my thoughts. Writing code is easy, writing code that people can understand is difficult, and writing code that people can understand and maintain later is the most difficult. I used to rely on my own experience to achieve easy maintenance in the later stage, and the technical documentation is to add a layer of CICD to constrain behavior on the basis of my reliance on experience. The same is true for writing technical articles. While writing code, you must organize things to form a methodology. This is also a kind of improvement of one's own ability.
## Summarize
Open source is bumpy in the end, and there is a high probability that there will be no actual benefits in the end. That's why I say open source is a carnival for idealists.
Open source projects often do not pursue profit and pay a lot. In addition to writing code, they also need to devote energy to publicity and operation. It is a thankless task for most people.
Of course, what I'm talking about here are real open source projects that require long-term efforts. If it is only for high star, there are actually many ways to use it for job hunting or other purposes. Many projects have only a few lines of code, but there are still many hot projects such as tens of thousands of stars on github.
On the contrary, my topic is undoubtedly the Red Sea in the Red Sea. On the C side, there were giants that occupied the market early more than ten years ago, and there are also many powerful competitors competing on the B side. Also in open source, there are countless similar products competing with each other. The reason why I still choose IM as my open source project direction, and I have worked hard for several years so far. I also believe that my design concept will stand out among a bunch of similar competitors with serious homogeneity. Of course, it is undeniable that there will be a possibility of failure. Maybe this is an idealist, and I am willing to devote my heart and soul to my ideal.
I believe that the world is often changed by idealists. Given the choice, I prefer to work with a group of idealists. I believe that you who see the end must also be a person who loves open source, encourage each other, and go on together.

View File

@@ -0,0 +1,19 @@
---
title: Release Note v1.8.2
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.2
keywords:
- tailchat
tags: [Release Note]
---
:::info
The desktop version v0.0.1 has been released, currently only supports windows
You can get the content on the [download page](https://tailchat.msgbyte.com/downloads)
:::
- Fixed a serious bug that caused the failure of fetch data due to the admin authentication problem
- Fixed admin chart color matching problem
- Fixed the error that the content could not be obtained correctly when the mobile terminal obtained the custom name of the server

View File

@@ -0,0 +1,24 @@
---
title: Release Note v1.8.3
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.3
keywords:
- tailchat
tags: [Release Note]
---
- Added the offline icon plugin as the default builtin plugin, now tailchat can be used normally in the whole intranet environment
- Added a discovery plugin (com.msgbyte.discover), users can join groups through the discovery page
- The group card of the exploration plugin currently only allows manual addition of records in the Admin platform
- ![](/img/blog/release-note/v1.8.3/1.png)
- Added the group description function, which can only be displayed in the group card on the exploration page at present
- The number of group members is displayed in the group summary
- ![](/img/blog/release-note/v1.8.3/2.png)
- Admin home page statistics time range changed from 7 days to 14 days
- Added `com.msgbyte.linkmeta` plugin as official builtin plugin
- ![](/img/blog/release-note/v1.8.3/3.png)
- Fixed the problem that the logo position would shift when the sidebar scroll bar appeared
- Fixed the problem that the result returned by the AI assistant plugin was too long and could not see all the content
- ![](/img/blog/release-note/v1.8.3/4.png)
- Optimized cache management for some requests

View File

@@ -0,0 +1,54 @@
---
title: Release Note v1.8.4
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.4
keywords:
- tailchat
tags: [Release Note]
---
### Feature update
#### Added group invitation code usage statistics and usage limit control
You can make secondary edits when creating, or manage invitation codes in the group panel for editing
![](/img/blog/release-note/v1.8.4/1.png)
![](/img/blog/release-note/v1.8.4/2.png)
![](/img/blog/release-note/v1.8.4/3.png)
For non-founder roles to edit, you need to give editing permissions to edit
![](/img/blog/release-note/v1.8.4/5.png)
In addition, you can now see the usage of the invitation code in the group invitation code settings (the previous usage will not be counted)
![](/img/blog/release-note/v1.8.4/4.png)
#### Added group background picture function
Now you can add a background image to the group as a dimension, you can see this setting item in the `group details -> configuration`
![](/img/blog/release-note/v1.8.4/6.png)
Currently visible on the invite to join page
![](/img/blog/release-note/v1.8.4/7.png)
### Other Updates
- Added environment variable `DISABLE_PLUGIN_STORE` to disable user's plugin center page
- Added the environment variable `DISABLE_ADD_FRIEND` to disable the user's add friend page
- Fix the bug that the github login cannot be registered normally if there is no email address
- Add invitation code generation verification to prevent two bugs with the same invitation code in a very small probability, and add a unique index at the database level
- Fix the color adaptation of server card light color theme
- Fix the bug that the input box will also be cleaned up when the sending problem occurs due to network exceptions and other situations that cannot be sent
- Optimize the user experience of the `com.msgbyte.discover` plugin, for the group that has already joined, it will jump directly instead of popping up the prompt of failure to join the group
- **Desktop version** adds reload and other menus
- **Desktop version** optimizes the file download operation, and the folder will be opened automatically after the file is downloaded
- Optimized the message of github subscription and added a hyperlink to the project
- Removed the builtin `com.msgbyte.linkmeta` plugin on the official website based on performance considerations

View File

@@ -0,0 +1,46 @@
---
title: Release Note v1.8.5
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.5
keywords:
- tailchat
tags: [Release Note]
---
### Feature update
#### Global Announcements
Global announcements can now be enabled in the `System` -> `Announcement` tab in the admin management platform
![](/img/blog/release-note/v1.8.5/1.png)
After clicking submit, all users will immediately display a global announcement on the page, as follows:
![](/img/blog/release-note/v1.8.5/2.png)
Users can click the close button on the far right to close this notification.
In addition, if the content of the announcement is more complicated, you can also choose to add an announcement link. When the link is not empty, a **Learn More** button will be displayed on the announcement.
![](/img/blog/release-note/v1.8.5/3.png)
#### Admin cache management optimization
Subdivided Admin's cache management because we realized that it would be very brute force for administrator to update the client's configuration only by modifying environment variables, but only by clearing all caches.
Therefore, we subdivided the cache management and extracted the function of cleaning the client cache separately
![](/img/blog/release-note/v1.8.5/4.png)
### Other Updates
- Add call `config.setClientConfig` to send notifications to all users
- Fixed a security issue that may cause xss attacks when using html panels
- Optimized the storage method of the html panel to reduce the data packet pressure generated by the first loading
- Fixed the situation where the user may not be able to obtain the nickname when the iam plugin uses github to log in because there is no name field
- Fixed the problem that the list of plugins may be displayed repeatedly due to certain circumstances
- Fixed the problem that the uploaded gif image may not be played due to the compression algorithm
- Optimized the rendering performance of the member list in the case of large data

View File

@@ -0,0 +1,23 @@
---
title: Release Note v1.8.6
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.6
keywords:
- tailchat
tags: [Release Note]
---
- Added a flashing prompt on the desktop after receiving a message
- Added a new version update prompt function on the desktop
- Desktop version reduced icon size from 1600x1600 to 512x512
- Fixed an issue with internationalization translations in the panel
- `tailchat-client-sdk` adds `TailchatWsClient` for robot interaction in long connection scenarios, which is more flexible than `TailchatHTTPClient`
- The original `TailchatClient` was renamed to `TailchatHTTPClient`
- Added `tushan` icon in about panel
- Added some missing offline icons
- Optimized page load time and allowed to manually click the button to refresh resources
- Optimized the character text position and style of `com.msgbyte.genshin` to fit the icon more closely
- Optimized the memory usage of the default configuration and reduced the number of instances. For users who have deployed before, it is recommended to use the `docker-compose down` command to clean up the previous container before using `docker-compose up -d` to start
- Removed the old version of the admin system to reduce the image size
- Removed w2a source code

View File

@@ -0,0 +1,58 @@
---
title: Release Note v1.8.7
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.7
keywords:
- tailchat
tags: [Release Note]
---
### Feature Update
#### Self-hostable real-time audio and video solutions
The second real-time audio and video solution officially provided by `Tailchat`, give users the choice of service! Created for users with self-host needs, the operation logic has been optimized to make it easier to use.
For normal users, you need to install the `com.msgbyte.livekit` plugin
![](/img/blog/release-note/v1.8.7/1.png)
Refresh the page and reload the plug-in, you can see the voice channel function when creating the group panel
![](/img/blog/release-note/v1.8.7/2.png)
You can do some preparatory work before joining the group, such as turning on the camera to adjust the position, adjusting the media source of the camera microphone, etc.
![](/img/blog/release-note/v1.8.7/3.png)
Join when you're ready Join channel meetings to chat with others online.
![](/img/blog/release-note/v1.8.7/4.png)
During the meeting, you can share images, switch your media devices, and chat with other participants in real time.
> Note that the chat feature in the meeting will not be save persistently, but for the flexible Tailchat, there is a trick to pin a regular chat channel and chat in that channel, so that no matter the participant It is still possible to expect the content to be persistently save
> ![](/img/blog/release-note/v1.8.7/5.png)
Group members outside the room can see who's in the meeting, so if someone's chatting, join them right away!
![](/img/blog/release-note/v1.8.7/6.png)
![](/img/blog/release-note/v1.8.7/7.png)
In addition, please feel free to switch to other panels during the meeting, and the connection will not be interrupted. You can quickly return to the current session at any time through the button in the lower left corner.
![](/img/blog/release-note/v1.8.7/8.png)
> Take a look in [Livekit Plugin Deployment Guide](/docs/meeting/livekit) for media server deployment solutions
### Other Updates
- Increase the compatibility of aliyunoss with other third-party object storage services compatible with the aws s3 protocol
- Add `type` and `emailVerified` fields to admin user list
- admin fixed the problem of wrong statistics of group members and panels
- Fix type error caused by `tailchat-client-sdk` dependency issue
- The plugin development function `regCustomPanel` adds a `useIsShow` field for showing or hiding icons.

View File

@@ -0,0 +1,42 @@
---
title: Release Note v1.8.8
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.8
keywords:
- tailchat
tags: [Release Note]
---
### Feature Update
#### Add analysis feature
The analysis feature can help you quickly understand the usage of your server and see the active status at a glance
![](/img/blog/release-note/v1.8.8/1.png)
#### Add local messages to avoid network errors that send the same message repeatedly
![](/img/blog/release-note/v1.8.8/2.gif)
In a low-speed network, when the message is sent, it will be displayed on the screen immediately to the message list, which is displayed semi-transparently. When the sending is successful, it will be corrected to the normal display according to the returned content.
#### Optimize the prompt for unprocessed friend requests
When there is an unprocessed friend request, it will be prompted in the sidebar and navigation bar at this time to ensure that users will not miss information
![](/img/blog/release-note/v1.8.8/3.png)
### Other Updates
- Added plugin to allow automatic joining of groups after registration
- You only need to configure the corresponding environment variables to take effect, see the document for details: [com.msgbyte.autojoinGroup](/docs/advanced-usage/plugins/com.msgbyte.autojoinGroup)
- Added the function of grouping group members by status
- admin adds the function of creating groups
- admin adds the function of adding group members
- admin supports searching groups and users by ID
- Add i18n support for antd and WebFastifyForm
- Fixed an issue where the AI assistant would bypass the recall prompt when summarizing messages
- Fix the bug that the badge will pop up when hovering in the sidebar
- Fix the bug that local messages can be manipulated when sending messages

View File

@@ -0,0 +1,42 @@
---
title: Release Note v1.8.9
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.9
keywords:
- tailchat
tags: [Release Note]
---
### Feature update
#### Add group drag sorting
[#120](https://github.com/msgbyte/tailchat/issues/120) Users will be able to flexibly organize the order of groups according to their preferences and priorities, optimizing the actual use experience
![](/img/blog/release-note/v1.8.9/1.gif)
#### Add the operation of directly creating a multi-person session in the sidebar
![](/img/blog/release-note/v1.8.9/2.png)
![](/img/blog/release-note/v1.8.9/3.png)
### Other Updates
- Add iam proxy support for github
- Now you can modify the remote request address through environment variables `IAM_GITHUB_URI_AUTHORIZE` `IAM_GITHUB_URI_ACCESS_TOKEN` `IAM_GITHUB_URI_USERINFO`
- Adjust the multiplayer session strategy, the two-player session will reuse the previous logic, and the multiplayer session will be created repeatedly instead of reusing the previous session
- This is prepared to adapt to the discussion of different topics that may appear in the same group of people
- Fix the bug that an error will occur when adding multiple users to a group role
- Fix the bug that errors may occur when rendering a two-player session
- Fixed the problem that dragging the user's avatar in the chat list would cause abnormal interaction [#135](https://github.com/msgbyte/tailchat/issues/135)
- Fix the problem that the operation is repeatedly pushed and the duplicate user will be displayed
- Fix the bug that the badge component will change the height of the container
- Fix message confirmation does not trigger update issue
- Fixed the problem that the plug-in root routing path was incorrect
- Fix the bug that the boot code will break when the environment variable DISABLE_CREATE_GROUP is turned on
- Fixed the bug of abnormal size when multiple avatars were rendered at the same time
- Increase the optimization of offline icon sorting to reduce meaningless updates
- Optimize the experience of sending messages under low-speed network
- Optimize DM message support sorting by recent message

View File

@@ -0,0 +1,38 @@
---
title: Release Note v1.8.10
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.10
keywords:
- tailchat
tags: [Release Note]
---
### Feature update
#### Added the ability to create converse from groups
![](/img/blog/release-note/v1.8.10/1.png)
In the user avatar pop-up layer in the group conversation, a button to quickly start the conversation is added, which can conveniently send private messages to the users in the group.
If the group manager does not want group members to initiate private messages, they can actively close it in the group settings.
![](/img/blog/release-note/v1.8.10/2.png)
### Other Updates
- Add refresh operation to admin message list
- Fix the risk of unauthorized message sending [#143](https://github.com/msgbyte/tailchat/issues/143)
- Added all session permissions for plugin bots (not open platform bots)
- Fixed the problem that the receiving message taskbar could not flash on the desktop
- Fixed an issue where the logo flickered when hovering over the group list with a scroll bar
- Fix the problem that the danger button color is wrong in light mode
- Fix the problem that the cache key of userSetting is incorrect
- Fixed the problem that you can still use the input box on the right in the chat box after being banned
- For some high-frequency requests (parts with front-end cache before), a persistent cache is added to reduce the impact of front-end cache invalidation caused by frequent page refreshes on back-end services
- Optimize the display strategy of user avatars in the admin background, and remove problems caused by null/undefined
- Optimize the size of the feature bar icon on the homepage of the official website, the current volume is about 1/3 of the original
- Increase the database index and optimize the request time consumption of the `fetchConverseMessage` operation in the case of a large amount of data
- Optimize the update group configuration interaction under low-speed network
- Optimize the entry file size of the `sentry` plugin to reduce the time spent on first loading

View File

@@ -0,0 +1,31 @@
---
title: Release Note v1.8.11
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.11
keywords:
- tailchat
tags: [Release Note]
---
### Feature update
#### Open platform application management enhancement
- Added the viewing and modification of application name, description and avatar
- Added the feature of returning to the application list
- Added delete app feature
![](/img/blog/release-note/v1.8.11/1.png)
### Other Updates
- `admin` add file delete action, also delete `minio` files and allow fuzzy matching by `objectName`
- `OAuth` adds display support for custom open platform avatars
- The optimization algorithm complements the missing offline icons in the static analysis
- Fixed the bug that the add friend button was still displayed when the `DISABLE_ADD_FRIEND` function was turned on
- Fixed the problem that the button to jump to the tab without adding friends is incorrect
- Fixed the problem that the icon flickered after modifying the user settings
- Fix the bug that in some cases the user settings cache is lost, resulting in the loss of the past configuration of the user's modified data
- The open platform fixes the error caused by the avatar parsing problem
- Optimized group drag and drop sorting logic, added Y-axis lock

View File

@@ -0,0 +1,33 @@
---
title: Release Note v1.8.12
authors: moonrailgun
image: /img/logo.svg
slug: release-1.8.12
keywords:
- tailchat
tags: [Release Note]
---
### Feature update
#### Markdown editor adds the function of uploading images
![](/img/blog/release-note/v1.8.12/1.gif)
You can now paste images via the clipboard or upload image files by clicking the image icon on the toolbar.
#### Add online status in user popup window
![](/img/blog/release-note/v1.8.12/2.png)
Now, you can check the user's online status in the pop-up box
### Other updates
- MarkdownRender supports native html syntax
- admin: user search supports nickname fuzzy search
- Add private message list to allow deletion of conversations
- Fixed the issue where uploaded svg cannot be rendered directly in preview due to lack of type header
- Fixed the issue of losing extension after compressing images
- Optimize small size image display
- Markdown editor adds dark mode adaptation

View File

@@ -0,0 +1,39 @@
---
title: Release Note v1.9.0
authors: moonrailgun
image: /img/logo.svg
slug: release-1.9.0
keywords:
- tailchat
tags: [Release Note]
---
### Feature updates
#### Add panel-level permission control management
![](/img/blog/release-note/v1.9.0/1.png)
A panel field has been added to the permission registration. When this field is set and matched to a certain panel type, the permission will be displayed in the advanced permission control.
Permission design is based on whitelist form. This means that he will inherit the group's permissions.
Example one:
- This role in the group **has** the [Send Message] permission
- This role **does not** have the [Send Message] permission in the panel
- Finally, this character has the [Send Message] permission in all text panels
Example two:
- This role in the group **does not** have the [Send Message] permission
- This role **has** the [Send Message] permission in the panel
- In the end, this role only has the [Send Message] permission in the panels with permissions set above, and does not have the permission to send messages in other panels.
> Q: Why does tailchat use the union of panel permissions and group permissions instead of permission override?
>
> A: Because compared to many fixed-design applications, Tailchat needs to consider the design of the plug-in. The plug-in can register customized permissions, and these permissions are uncontrolled. Only by allowing users to develop the habit of whitelisting permission management during their operations and actual use will the permissions not be out of control when new plug-ins are added. In addition, the behavior of overwriting is more unpredictable because it will overwrite each other.
>
> An example is, if we want users to have no permissions in a certain panel, but have permissions in other panels, then the most convenient way is to set the group scope to have permissions, but the panels have no permissions. The lack of permissions on the panel will override the permission design of the group. But there is a difference here. We dont know whether the user expects to have permissions by default or not by default. But currently he has permissions except for a certain panel. The difference between the two is that when a new panel is added, whether he expects to have permissions or not. permission denied. Tailchat wants to eliminate the mental coverage and understanding costs that the difference between the two situations brings to users, so it chose the most conservative way to design the permission system.
### Other updates
- Fixed a possible xss attack because we allowed iframes to pass in srcdom, which could inject inline style code.

View File

@@ -0,0 +1,29 @@
---
title: Group view panel permission problem
authors: moonrailgun
image: /img/logo.svg
slug: view-panel-permission
keywords:
- tailchat
tags: []
---
Because of new version of group permission, all group user which create group before cannot view panel because of lost view panel permission.
To batch update all group permission, you may need this script below.
Go into mongodb bash, you can use script in bash like its operation: `docker exec -it <your-mongodb-container-name> mongo`
### switch to tailchat db
```
use tailchat
```
### update all group and append `core.viewPanel` permission to all group
```
db.groups.updateMany({}, { $addToSet: { fallbackPermissions: "core.viewPanel" } })
```

View File

@@ -0,0 +1,34 @@
---
title: Release Note v1.9.1
authors: moonrailgun
image: /img/logo.svg
slug: release-1.9.1
keywords:
- tailchat
tags: [Release Note]
---
### Feature updates
#### Add panel view permissions
In order to better control the poanel display, panel view permissions have been added in this update. You can control the user display method in the group level or panel level permission control.
![](/img/blog/release-note/v1.9.1/1.png)
You can control the display and hiding properties of the panel through a combination of permissions.
It should be noted that the group-level permissions and panel-level permissions are merged rather than overwritten. This means that if the group permissions are turned on, the user will have relevant permissions regardless of whether the panel permissions are turned on or not.
:::info
After this update, the default group permissions will be lost. This is because new permissions have been added and the previous groups were not granted this permission. For specific repair methods, you can read this blog to learn more: [Group view panel permission problem](/blog/view-panel-permission)
:::
### Other updates
- Added clipboard processing tools
- Added url processing tool by default
- admin: Added all file size statistics
- Fixed linkmeta plugin support for bilibili video links
- Fixed the problem that the linkmeta plugin does not match the bbcode address

View File

@@ -0,0 +1,45 @@
---
title: Release Note v1.9.2
authors: moonrailgun
image: /img/logo.svg
slug: release-1.9.2
keywords:
- tailchat
tags: [Release Note]
---
### Feature updates
#### Added support for sharing screen on desktop version
![](/img/blog/release-note/v1.9.2/1.png)
Now, you can click on screen sharing on the electron and select the window you want to share.
#### Add desktop version and native browser rendering
Supports opening web pages that cannot be opened due to restrictions in the web version
For example, the following is a web page that cannot be nested due to website policies and will not be embedded due to web security restrictions.
![](/img/blog/release-note/v1.9.2/2.png)
But you can turn on native rendering of web pages and use built-in native browser rendering instead of embedding web pages.
![](/img/blog/release-note/v1.9.2/3.png)
In this way, you can break through the security restrictions of the other party's website and embed it into any page freely, just like using a browser
![](/img/blog/release-note/v1.9.2/4.png)
> If the switch does not take effect immediately, you can press the shortcut key `cmd + r` to reload `tailchat`
### Other updates
- Increase file access count record
- Add message search interface
- **admin**: Support deleting private messages
- fix problem which ai assistant will be transparent in popover in light mode
- fixed the bug where # would appear when typing without rich text plugin being loaded
- Fixed a bug that would cause the database to record files repeatedly when uploading the same file

View File

@@ -0,0 +1,28 @@
---
title: Release Note v1.9.4
authors: moonrailgun
image: /img/logo.svg
slug: release-1.9.4
keywords:
- tailchat
tags: [Release Note]
---
### Feature updates
#### Add message search function
![](/img/blog/release-note/v1.9.4/1.png)
![](/img/blog/release-note/v1.9.4/2.png)
Searching for chat information in a session is now supported. Because of the search is directly request to database, there will be a timeout for performance reasons. That is, if the database does not return search results within 5 seconds, it will be considered a timeout.
### Other updates
- HTTP requests add static caching to object storage and public files
- Add the environment variable `REQUEST_TIMEOUT` to customize the rpc request timeout, the default is **10 * 1000**, in milliseconds
- AI assistant adds more tips
- Add telemetry information collection (can be turned off through environment variables)
- Fix issue with iam plugin not fitting light theme in login view
- Add defer tag to tianji script

View File

@@ -0,0 +1,52 @@
---
title: Release Note v1.9.5
authors: moonrailgun
image: /img/logo.svg
slug: release-1.9.5
keywords:
- tailchat
tags: [Release Note]
---
### Feature updates
#### livekit plugin adds member panel
![](/img/blog/release-note/v1.9.5/1.png)
You can view the list of all participants and microphone status in the member panel
#### The livekit plugin adds the function of initiating audio and video sessions in multi-person sessions.
![](/img/blog/release-note/v1.9.5/2.png)
Now you can make audio and video calls directly from a private message conversation
#### The livekit plugin adds automatic invitation function for multi-person sessions
When the other party sends a message from the private message session, the invitation function will be automatically initiated. If the recipient is online, a prompt pop-up window and ring tone will pop up to invite the user to join the conversation (provided that the recipient has installed the livekit plugin)
![](/img/blog/release-note/v1.9.5/3.png)
#### The group member list allows right-click to quickly modify the identity group
![](/img/blog/release-note/v1.9.5/4.png)
Now allows quick assignment of membership groups through the right-click menu in the group member list, which is very useful for scenarios that require frequent assignment of identities.
#### Add friend list search function
![](/img/blog/release-note/v1.9.5/5.png)
In order to further optimize the management of multiple friends, a friend list search box has been added to quickly filter friends based on their nicknames and help users find friends.
### Other updates
- Add notification pop-up window night mode support
- Add environment variable MINIO_SSL for manual control of minio ssl, suitable for using external s3 storage
- Added a reload button to the settings page to facilitate reloading tailchat in non-webpage mode
- Added a background color option to the web page panel to deal with style issues caused by transparent backgrounds on some web pages
- Fixed the bug of transparent background color of message input box
- Fixed the issue of token expiration not taking effect due to the timing issue of clearing cache when banning a user.
- Fixed issue with incorrect inbox groupId when replying in a private conversation
- (desktop): v0.1.0 improves server list management

View File

@@ -0,0 +1,27 @@
---
title: Release Note v1.10.0
authors: moonrailgun
image: /img/logo.svg
slug: release-1.10.0
keywords:
- tailchat
tags: [Release Note]
---
### Feature updates
#### webrtc meeting optimization
- Added access to app camera and microphone permissions, now the mobile can use audio and video services normally
- Added builtin conversation view to optimize the experience of making calls on mobile phones
### Other updates
- Added basic information editing permissions and fix the bug of incorrect group field display
- Added secondary confirm for topic deletion operation
- Fixed a bug where the topic read may not work properly
- Fixed a bug where the group drop-down menu may expand upwards
- Fixed a bug where disabling plugins would not disable routing
- cli smtp test command adds shutdown logic and adds time in test email
- Hide member list function in livekit plugin
- Add virtual users to avoid unused user information requests

View File

@@ -0,0 +1,17 @@
---
title: Release Note v1.10.1
authors: moonrailgun
image: /img/logo.svg
slug: release-1.10.1
keywords:
- tailchat
tags: [Release Note]
---
- add bot tag in group/dm user popover
- add robot rule to disable invite page fetch by search engine
- allow @ mention in DM conversation
- fix mention list will not hide member discriminator problem
- fix bbcode auto transform logic
- fix drag drop feature display area
- add friendly tip for add non-message feature bot

View File

@@ -0,0 +1,15 @@
---
title: Release Note v1.11.0
authors: moonrailgun
image: /img/logo.svg
slug: release-1.11.0
keywords:
- tailchat
tags: [Release Note]
---
- Added a quick jump command panel that can be opened anywhere with `ctrl+k`
- Or opened via the search button in the navigation bar
- Fixed an issue where sending an invalid userId in certain cases would cause the entire user information query request to fail
- Fixed inappropriate error messages when adding oneself as a friend
- Optimized mention functionality to address performance issues caused by excessively long lists in groups with a large number of members

View File

@@ -0,0 +1,14 @@
---
title: Release Note v1.11.1
authors: moonrailgun
image: /img/logo.svg
slug: release-1.11.1
keywords:
- tailchat
tags: [Release Note]
---
- Add right-click menu to messages item.
- Add a setting to disable the right-click menu.
- Optimized the logic for copying selected text from the right-click menu on messages item.
- Fixed the issue where the command panel items could not be clicked with the mouse.

11
website/blog/authors.yml Normal file
View File

@@ -0,0 +1,11 @@
moonrailgun:
name: moonrailgun
title: Founder of Tailchat
url: https://github.com/moonrailgun
image_url: https://avatars.githubusercontent.com/u/6964737?v=4
email: moonrailgun@gmail.com
reacher:
name: Reacher
title: Tailchat Normal User
image_url: /img/avatar/reacher.png