- Real-time Communication: WebSocket-powered live discussions and notifications
- Gamification: Built-in ranking system and user progression
- Trust Network: Advanced user trust calculation for content moderation
- Modular Architecture: Clean separation of concerns with dependency injection
- Modern Frontend: React-based SPA with responsive design
- Rich Content: Support for media uploads, markdown, and emoji reactions
- OAuth Integration: Google and Facebook authentication
- Admin Tools: Comprehensive administrative interface and CLI tools
Anzu is a modern, open-source community platform designed to foster engaging online communities. Built with Go and React, it combines the performance of modern backend architecture with a sleek, reactive frontend experience.
Whether you're building a gaming community, developer forum, or general discussion platform, Anzu provides the tools you need with built-in gamification, real-time features, and advanced moderation capabilities.
β οΈ Early Development: Anzu is in active development. While functional, the API and features may change significantly.
- Backend: Go 1.23+ with dependency injection
- Frontend: React SPA with Webpack
- Database: MongoDB 8 for primary storage
- Cache: Redis for sessions and caching
- Storage: MinIO S3-compatible object storage
- Real-time: WebSocket via custom Glue implementation
The first step is to download Go, official binary distributions are available atΒ https://golang.org/dl/.
Now you need to download and configure MongoDB and Redis. Alternatively you can use remote servers.
Download the core in any path.
Initialize the repo submodule, so the frontend is in static/frontend
.
git submodule update --init --recursive
Copy the .env.example
file into .env
and edit it to meet your local environment configuration.
Start a local MongoDB 8 server with the help of docker and docker compose, ensure you have docker installed and then run:
docker compose up
Building the frontend before getting started is required, to do so, execute npm install && npm run build
inside static/frontend
submodule.
Once the frontend is built you can build the backend program with go build -o anzu
and then execute ./anzu api
to run anzu's http web server.
If you are running anzu for the first time you should be able to log-in with the credentials:
username: [email protected]
password: admin
# Backend Development
go build -o anzu # Build the backend
./anzu api # Start API server (port 3200)
./anzu shell # Interactive admin shell
./anzu sync-ranking # Sync gaming rankings
# Frontend Development
cd static/frontend
npm install # Install dependencies
npm start # Development build with watch
npm run build # Production build
npm run eslint # Lint JavaScript
# Code Quality
golangci-lint run # Lint Go code
golangci-lint run --fast # Quick lint checks
# Services
docker compose up # Start MongoDB, MinIO, mongo-express
anzu/
βββ board/ # Board domain logic
β βββ events/ # Event handlers
β βββ posts/ # Post management
β βββ comments/ # Comment system
β βββ votes/ # Voting system
βββ modules/ # Core modules
β βββ api/ # HTTP API endpoints
β βββ user/ # User management
β βββ gaming/ # Gamification
β βββ acl/ # Access control
βββ core/ # Core services
β βββ config/ # Configuration
β βββ events/ # Event system
β βββ content/ # Content processing
βββ static/frontend/ # React frontend
We follow the Conventional Commits specification, which help us with automatic semantic versioning and CHANGELOG generation.
Anzu follows a modular, event-driven architecture with clear separation of concerns:
- Dependency Injection: Uses Facebook's inject library for clean DI
- Event-Driven: Centralized event handling for cross-module communication
- Modular Design: Self-contained modules with clear interfaces
- Trust Network: User trust calculation system for content moderation
- Board Domain (
board/
): Posts, comments, votes, and content management - User Module (
modules/user/
): Authentication, profiles, OAuth integration - Gaming Module (
modules/gaming/
): Ranking system and gamification - ACL Module (
modules/acl/
): Role-based access control and permissions - API Module (
modules/api/
): HTTP endpoints and REST API using Gin
- WebSocket communication via custom Glue implementation
- Live notifications and real-time discussions
- Event-driven updates across the platform
We welcome contributions from the community! Whether it's reporting bugs, suggesting new features, or submitting code changes, your input is valuable.
- Fork the repository and create a new branch for your contribution
- Make your changes following our coding style and guidelines
- Write clear commit messages using Conventional Commits
- Test your changes thoroughly using the development commands above
- Submit a pull request with a detailed description
- Run
golangci-lint run
before submitting Go code - Run
npm run eslint
for frontend changes - Use
go build -o anzu && ./anzu api
for backend development - Test with the Docker Compose environment
We appreciate your help in making Anzu better! If you have questions, feel free to open an issue or reach out to the maintainers.
- API Server: Runs on
http://localhost:3200
by default - Admin Panel: Access via web interface with admin credentials
- MongoDB Admin: Mongo Express available at
http://localhost:8081
- MinIO Console: S3 storage admin at
http://localhost:9000
- Environment: Copy
.env.example
to.env
and customize - Database: MongoDB connection configured via
MONGO_URL
- Storage: S3-compatible storage via MinIO or AWS S3
- Authentication: JWT tokens with OAuth support (Google, Facebook)
- Issues: Report bugs and request features on GitHub
- Discussions: Join community discussions and get help
- Wiki: Additional documentation and guides (coming soon)
Built with β€οΈ by the Anzu community