A self-hosted personal microblog where your timeline can be shared, discussed, and fully owned.
Tools like Memos are great for capturing quick thoughts. Ech0 is built for what comes next: publishing those ideas to a personal timeline that others can follow and interact with. Run it on your own server, keep full control of your content, and keep a personal space that still feels connected through optional comments and sharing. It stays lightweight, easy to deploy, and fully open-source.
Great fit if you want to:
- run a personal public or semi-public timeline on your own domain
- publish short posts, links, and media from one clean interface
- keep data ownership while still getting RSS and optional comments
- keep a personal space that supports lightweight social interaction without becoming a full social network
Probably not for you if you need:
- a bi-directional knowledge base workflow (for example Obsidian-style PKM)
- a team-first collaborative docs workspace (for example Notion-style docs)
- a private-only memo app with no publishing or timeline focus
Table of Contents
docker run -d \
--name ech0 \
-p 6277:6277 \
-v /opt/ech0/data:/app/data \
-e JWT_SECRET="Hello Echos" \
sn0wl1n/ech0:latestThen open http://ip:6277:
- Register your first account.
- The first account becomes Owner (admin privileges).
- By default, publishing is restricted to privileged accounts.
See Quick Deployment for Docker Compose and Helm options.
- 📝 Built for personal publishing: Timeline-first microblog flow for thoughts, links, and short writing.
- 🤝 Lightweight social by design: Posts can be shared and discussed through optional comments and interactions.
- 🧘 Clean reading experience: Zen-like timeline browsing with minimal distraction.
- ⚡ Markdown and media in one place: Markdown editor, rich cards, and embedded video support.
- 🔒 Personal first with full ownership: Best as a personal instance with optional multi-user roles, while staying self-hosted, RSS-ready, and AGPL-3.0 open-source.
Expand full capabilities
- ☁️ Lightweight, Efficient Architecture: Low resource usage and compact images, suitable from personal servers to ARM devices.
- 🚀 Fast Deployment Experience: Out-of-the-box Docker deployment from install to first run with a single command.
- 📦 Self-Contained Distribution: Complete binaries and container images, with no extra runtime dependencies.
- 💻 Cross-Platform Support: Supports Linux, Windows, and ARM devices (for example, Raspberry Pi).
- 🗂️ VireFS Unified Storage Layer: Uses VireFS to unify mounting and management for local storage and S3-compatible object storage.
- ☁️ S3 Object Storage Support: Native support for S3-compatible object storage for cloud resource expansion.
- 📦 Data Sovereignty: Content and metadata remain user-owned and user-controlled, with RSS output support.
- 🔄 Data Migration Workflow: Supports migration import for historical data and snapshot export for migration and archiving.
- 🔐 Automated Backup System: Supports export/backup via Web, CLI, and TUI, plus background automatic backups.
- ✍️ Markdown Writing Experience: A markdown-it based editing/rendering engine with plugin extension and live preview.
- 🧘 Zen Mode Immersive Reading: A minimal-distraction Timeline browsing mode.
- 🏷️ Tag Management System: Supports tag organization, quick filtering, and precise retrieval.
- 🃏 Rich Media Cards: Supports card rendering for website links, GitHub projects, and more.
- 🎥 Video Content Parsing: Supports embedded parsing/display for Bilibili and YouTube videos.
- 📁 Visual File Manager: Built-in capabilities for file upload, browsing, and asset management.
- 💬 Built-in Comment System: Supports comments and moderation configuration.
- 🃏 Content Interaction: Supports social interactions such as likes and sharing.
- 🔑 OAuth2 / OIDC Authentication: Supports OAuth2 and OIDC for third-party login integration.
- 🙈 Passkey Passwordless Login: Supports biometric or hardware security key sign-in.
- 🔑 Access Token Management: Supports generating and revoking tokens for API calls and third-party integration.
- 👤 Multi-Account Permission Management: Supports multi-user collaboration and permission control.
- 🧱 Busen Data Bus Architecture: Uses in-house Busen to provide decoupled module communication and reliable message delivery.
- 📊 Structured Logging System: System logs are standardized in structured format for readability and analysis.
- 🖥️ Real-Time System Log Console: Built-in web console for live log streams, debugging, and troubleshooting.
- 📟 TUI Management Interface: Provides a terminal UI, ideal for server-side administration.
- 🧰 CLI Toolchain: CLI tools for automation and script integration.
- 🔗 Open API & Webhook: Full API and Webhook support for external integration and automation workflows.
- 🌍 Cross-Device Adaptation: Responsive design for desktop, tablet, and mobile browsers.
- 🌐 i18n Multi-Language Support: Multi-language UI switching for different usage scenarios.
- 👾 PWA Support: Installable as a web app for a more native-like experience.
- 🌗 Themes & Dark Mode: Supports dark mode and theme extension.
- 🎉 Fully Open Source: Released under AGPL-3.0, with no tracking, no subscription, and no SaaS dependency.
docker run -d \
--name ech0 \
-p 6277:6277 \
-v /opt/ech0/data:/app/data \
-e JWT_SECRET="Hello Echos" \
sn0wl1n/ech0:latest💡 After deployment, access
ip:6277
🚷 For better security, replaceHello Echosin-e JWT_SECRET="Hello Echos"with your own secret
📍 The first registered account becomes administrator (currently only admins can publish)
🎈 Data is stored under/opt/ech0/data
Create a new directory and place your docker-compose.yml file there.
Run the following command in that directory:
docker-compose up -dIf you want to deploy Ech0 in a Kubernetes cluster, you can use the Helm Chart provided by this project.
Since this project does not currently provide an online Helm repository, you need to clone the repository locally and install from the local directory.
-
Clone the repository:
git clone https://github.com/lin-snow/Ech0.git cd Ech0 -
Install with Helm:
# helm install <release-name> <chart-directory> helm install ech0 ./charts/ech0You can also customize the release name and namespace:
helm install my-ech0 ./charts/ech0 --namespace my-namespace --create-namespace
⚠️ Direct upgrade from v3 to v4 is not supported. Please export a snapshot in the v3 panel first, redeploy v4, then use "v3 Migration" in the v4 panel to import your existing data.
# Stop current container
docker stop ech0
# Remove container
docker rm ech0
# Pull latest image
docker pull sn0wl1n/ech0:latest
# Start new version
docker run -d \
--name ech0 \
-p 6277:6277 \
-v /opt/ech0/data:/app/data \
-e JWT_SECRET="Hello Echos" \
sn0wl1n/ech0:latest# Enter compose directory
cd /path/to/compose
# Pull latest image and recreate
docker-compose pull && \
docker-compose up -d --force-recreate
# Clean old images
docker image prune -f-
Update repository: Enter your local Ech0 repository and pull latest changes.
cd Ech0 git pull -
Upgrade Helm release: Use
helm upgradeto update your release.# helm upgrade <release-name> <chart-directory> helm upgrade ech0 ./charts/ech0If you used a custom release name and namespace, use matching values:
helm upgrade my-ech0 ./charts/ech0 --namespace my-namespace
-
What is Ech0?
Ech0 is a lightweight open-source self-hosted platform designed for quickly publishing and sharing personal thoughts, writing, and links. It provides a clean interface and distraction-free experience, with your data remaining under your control. -
What is Ech0 not?
Ech0 is not a traditional professional note-taking app (such as Obsidian or Notion). Its core usage is closer to a social feed / microblog stream. -
Is Ech0 free?
Yes. Ech0 is fully free and open source under AGPL-3.0, with no ads, tracking, subscriptions, or service lock-in. -
How do I back up and import data?
Ech0 supports data recovery/migration through "Snapshot Export" and "Migration Import". At deployment level, regularly back up your mapped data directory (for example/opt/ech0/data). By default, core data is stored in the local database; if object storage is enabled, media assets are written to the configured storage backend. -
Does Ech0 support RSS?
Yes. Ech0 supports RSS subscriptions so you can follow updates in RSS readers. -
Why does publishing fail with "contact administrator"?
Publishing is restricted to privileged accounts by default. During initialization, the first account becomes Owner (with management privileges). Regular users cannot publish until explicitly granted permission by a privileged account. If this is your first setup, review Try in 60 Seconds and confirm which account is Owner. -
Why is there no detailed permission matrix?
Ech0 currently uses a lightweight role model (Owner / Admin / regular user) to keep operation simple and predictable. The permission model will continue to evolve based on community feedback. -
Why can't others see their Connect avatar?
Set your current instance URL inSystem Settings - Service URL, for examplehttps://memo.vaaat.com(must includehttp://orhttps://). -
What is the MetingAPI option in settings?
It is the API endpoint used by music cards to resolve playable stream metadata. You can provide your own trusted endpoint; when left empty, Ech0 falls back to a default resolver endpoint. For production, a self-controlled endpoint is recommended. -
Why does a newly added Connect show only partial results?
The backend tries to fetch instance information for all Connect entries. If an instance is down or unreachable, it is discarded, and only valid/accessible Connect data is returned to the frontend. -
How do I enable comments?
Enable comments in the panel comment manager, then configure moderation and captcha toggles as needed. Ech0 now embedsgocapfor captcha verification, so no standalone captcha service deployment is required. -
How do I configure S3 storage?
Fill in provider, endpoint, bucket, access key, secret key, and related fields in storage settings. It is recommended to provide endpoint withouthttp://orhttps://. If media is accessed directly by browsers, ensure objects are readable through your chosen policy (for example public-read or equivalent CDN/gateway setup). -
How do I enable passkey login?
InSSO - Passkey, configureWebAuthn RP IDandWebAuthn Origins. After saving and seeing "Passkey ready", follow browser prompts to bind biometrics or a security key.
- If you encounter bugs, report them in Issues.
- For feature ideas or improvements, join discussions in Discussions.
- Official QQ Group:
1065435773
| Official QQ Community | Other Groups |
|---|---|
![]() |
N/A |
- The backend event bus has switched to Busen: it uses a typed-first in-process architecture, and improves stability through explicit backpressure, hooks, and drain shutdown.
📌 Go 1.26.0+
📌 C Compiler
When using CGO-dependent libraries such as go-sqlite3, install:
- Windows:
- MinGW-w64
- Add the
bindirectory toPATHafter extraction
- macOS:
brew install gcc - Linux:
sudo apt install build-essential
📌 Google Wire Install wire for dependency injection file generation:
go install github.com/google/wire/cmd/wire@latest
📌 Golangci-Lint Install Golangci-Lint for linting and formatting:
- Run
golangci-lint runin the project root for linting - Run
golangci-lint fmtin the project root for formatting
📌 Air (Optional, Backend Hot Reload)
- Recommended via Makefile:
make air-install - Or install manually:
go install github.com/air-verse/air@latest
📌 Swagger Install Swagger to generate/use OpenAPI docs:
- Run
swag init -g internal/server/server.go -o internal/swaggerin project root to generate or update Swagger docs - Visit
http://localhost:6277/swagger/index.htmlin your browser to view and use docs
📌 Event Runtime Parameters (Busen)
ECH0_EVENT_DEFAULT_BUFFER/ECH0_EVENT_DEFAULT_OVERFLOWECH0_EVENT_DEADLETTER_BUFFER/ECH0_EVENT_SYSTEM_BUFFERECH0_EVENT_AGENT_BUFFER/ECH0_EVENT_AGENT_PARALLELISMECH0_EVENT_INBOX_BUFFERECH0_EVENT_WEBHOOK_POOL_WORKERS/ECH0_EVENT_WEBHOOK_POOL_QUEUE
📌 NodeJS v25.5.0+, PNPM v10.30.0+
Note: if you need multiple Node.js versions, use fnm to manage them.
Step 1: Backend (in Ech0 root directory)
make run # normal backend start (equivalent to go run main.go serve)
make dev # backend hot reload with AirIf dependency injection relationships change, run
wirefirst inech0/internal/di/to regeneratewire_gen.go.
Step 2: Frontend (new terminal)
cd web # enter frontend directory
pnpm install # run if dependencies are not installed
pnpm dev # start frontend preview
# or run from project root: make web-devStep 3: After both are running
Frontend preview: http://localhost:5173 (actual port shown in terminal after start)
Backend preview: http://localhost:6277 (default backend port is 6277)
When importing packages in a layered architecture, use standardized alias names:
model layer:xxxModel
util layer:xxxUtil
handler layer:xxxHandler
service layer:xxxService
repository layer:xxxRepository
Thanks to everyone who has supported this project! Your support keeps Ech0 moving forward 💡✨
| ⚙️ User | 🔋 Date | 💬 Message |
|---|---|---|
| 🧑💻 Anonymous Friend | 2025-5-19 | Buy yourself a sweet drink |
| 🧑💻 @sseaan | 2025-7-27 | Ech0 is a great thing🥳 |
| 🧑💻 @QYG2297248353 | 2025-10-10 | None |
| 🧑💻 @continue33 | 2025-10-23 | Thanks for fixing R2 |
| 🧑💻 @hoochanlon | 2025-10-28 | None |
| 🧑💻 @Rvn0xsy | 2025-11-12 | Great project, I will keep following! |
| 🧑💻 王贼臣 | 2025-11-20 | Thanks www.cardopt.cn |
| 🧑💻 @ljxme | 2025-11-30 | Doing my humble part 😋 |
| 🧑💻 @he9ab2l | 2025-12-23 | None |
| 🧑💻 鸿运当头(windfore) | 2026-1-6 | Thank you for creating ech0 |
| 🧑💻 Anonymous User | 2026-01-23 | None |
- Thanks to all users for suggestions and feedback.
- Thanks to all contributors and supporters in the open-source community.
🌟 If you like Ech0, please give this project a Star! 🚀
Ech0 is fully open-source and free. Ongoing maintenance and improvements rely on community support. If this project helps you, sponsorship is always appreciated.
You can donate via the QR code and leave your GitHub name in the note; your contribution will be displayed publicly on the README.md homepage.
| Platform | QR Code |
|---|---|
| Afdian | ![]() |
███████╗ ██████╗ ██╗ ██╗ ██████╗
██╔════╝ ██╔════╝ ██║ ██║ ██╔═████╗
█████╗ ██║ ███████║ ██║██╔██║
██╔══╝ ██║ ██╔══██║ ████╔╝██║
███████╗ ╚██████╗ ██║ ██║ ╚██████╔╝
╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝


