Ech0 - 开源、自托管、专注思想流动的轻量级发布平台
Open source, self-hosted, lightweight publishing platform focused on the flow of ideas
Ech0 is a lightweight, self-hosted platform designed for quick sharing of your ideas, texts, and links. With an intuitive interface, you can easily manage your content, ensuring complete data control and seamless connection with the world anytime, anywhere.
☁️ Atomic Lightweight: Uses less than 15MB RAM, image size under 35MB, stores data in a single SQLite file
🚀 Fast Deployment: No configuration needed, just one command from install to use
✍️ Distraction-Free Writing: Clean online Markdown editor, supports rich Markdown plugins and preview
📦 Data Sovereignty: All content stored locally in SQLite, supports RSS subscription
🎉 Free Forever: Open-sourced under the AGPL-3.0 license, no tracking / subscription / service dependency
🌍 Cross-Platform: Fully responsive across mobile, tablet, and desktop browsers
👾 PWA Support: Can be installed as a web app
📝 Built-in Todo Manager: Easily manage daily tasks and track progress efficiently
🔗 Ech0 Connect: Brand-new content aggregation and interconnection system; supports federation, content subscription and sync across multiple instances
🎵 Seamless Music Integration: Lightweight music player with local audio parsing, immersive background playback and focus mode
🎥 Instant Video Sharing: Native Bilibili/YouTube video parsing
🃏 Rich Shortcut Cards: One-click sharing of rich media like website links, GitHub repos, etc. for vivid display
⚙️ Advanced Customization: Power users can customize styles and scripts for expressive sharing
docker run -d \
--name ech0 \
-p 6277:6277 \
-v /opt/ech0/data:/app/data \
-e JWT_SECRET="Hello Echos!" \
sn0wl1n/ech0:latest
💡 After deployment, visit
ip:6277
to use
🚷 It is recommended to change"Hello Echos!"
inJWT_SECRET
for better security
📍 The first registered account becomes the administrator (currently only admins can publish content)
🎈 Data is stored under/opt/ech0/data
Create a new directory and put the docker-compose.yml
file inside it.
Then run the following command in that directory:
docker-compose up -d
# Stop the current container
docker stop ech0
# Remove the container
docker rm ech0
# Pull the latest image
docker pull sn0wl1n/ech0:latest
# Run the updated container
docker run -d \
--name ech0 \
-p 6277:6277 \
-v /opt/ech0/data:/app/data \
-v /opt/ech0/config/config.yaml:/app/data/config/config.yaml \
-e JWT_SECRET="Hello Echos!" \
sn0wl1n/ech0:latest
# Go to the compose file directory
cd /path/to/compose
# Pull latest image and restart
docker-compose pull && \
docker-compose up -d --force-recreate
# Clean old images
docker image prune -f
What is Ech0?
Ech0 is a lightweight open-source self-hosted platform designed for quick idea sharing. It provides a clean interface and distraction-free writing, with all data stored locally for full control.
What is Ech0 not?
Ech0 is not a traditional note-taking tool (like Obsidian or Notion). It functions more like a personal feed or “status update” platform.
Is Ech0 free?
Yes, Ech0 is completely free and open-source under the AGPL-3.0 License. No ads, no tracking, no subscriptions, and no service dependencies.
How to back up and restore data?
All content is stored in a local SQLite file. Simply back up the /opt/ech0/data
directory. To restore, just copy the backup files back.
Does Ech0 support RSS?
Yes, Ech0 supports RSS subscriptions for content updates.
Why do I get a “contact admin” error when publishing?
Only administrators can publish content. The first registered user becomes the admin. Assign admin rights to others via the settings.
Why isn’t there a full permission system?
Ech0 is designed to be simple and lightweight, avoiding complexity in permission management. Only admin vs non-admin roles exist for now. Simplicity over complexity.
Why can’t others see my Connect avatar?
Make sure you set the Instance URL
under System Settings
to your deployment domain, e.g., https://memo.vaaat.com
. It must include http
or https
.
What is the MetingAPI setting for?
This API is used to fetch streaming music links for the music card feature. If unset, the default hosted version will be used (deployed via Vercel).
Why do some Connect entries not show?
The backend fetches data from all connected instances. If one is down or unreachable, it will be excluded from results.
What content is not recommended for Ech0?
Ech0 published content consists of three parts: text, images, and extended content (such as music, video player cards). Ech0 does not recommend publishing dense content that simultaneously includes text + images + extended content
, as this violates some of Ech0’s design principles. Additionally, publishing extended content or lengthy articles is not recommended at any time.
If you encounter bugs, please report them via issues. For new feature suggestions or improvements, join the discussion in discussions.
by Excalidraw
📌 Go 1.24.3+
📌 C Compiler
Required for libraries like go-sqlite3
that use CGO:
Windows:
bin
folder to PATHmacOS: brew install gcc
Linux: sudo apt install build-essential
📌 Google Wire
Install wire for dependency injection code generation:
go install github.com/google/wire/cmd/wire@latest
📌 NodeJS v23.11.1+, PNPM v10
Tip: Use fnm for managing multiple Node versions.
Step 1: Backend (in Ech0 root directory):
go run cmd/ech0/main.go # Compile and start backend
If DI has changed, regenerate
wire_gen.go
inech0/internal/di/
usingwire
command.
Step 2: Frontend (new terminal):
cd web # Enter frontend folder
pnpm install # Run if dependencies are not installed
pnpm dev # Start frontend preview
Step 3: Access:
Frontend: http://localhost:5173
Backend: http://localhost:6277 (default)
🌟 If you like Ech0, feel free to star the project! 🚀
Ech0 is fully open-source and free. Maintaining and improving it requires community support. If this project helped you, consider donating to support its development. Every bit of encouragement fuels our progress!
Donate via the QR code and leave your GitHub name as a note—you’ll be acknowledged in the main README.md
.
Platform | QR Code |
---|---|
Afdian | ![]() |
███████╗ ██████╗ ██╗ ██╗ ██████╗
██╔════╝ ██╔════╝ ██║ ██║ ██╔═████╗
█████╗ ██║ ███████║ ██║██╔██║
██╔══╝ ██║ ██╔══██║ ████╔╝██║
███████╗ ╚██████╗ ██║ ██║ ╚██████╔╝
╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝