What is Halo?
Halo is a content management system that combines a Spring Boot backend with a Vue.js frontend to provide a comprehensive solution for building websites and blogs. The project follows a modular architecture with support for plugins and themes.Architecture overview
Halo consists of several key components:- Backend: Built with Spring Boot and Java 21, providing RESTful APIs and plugin support
- Frontend: Vue 3-based console application for content management
- Plugin System: Extensible architecture allowing custom functionality
- Theme Engine: Customizable theming system for site presentation
Technology stack
Backend
- Java 21: Core programming language
- Spring Boot 3.x: Application framework
- Gradle 9.3: Build automation tool
- R2DBC: Reactive database connectivity
- Spring Security: Authentication and authorization
Frontend
- Vue 3: Progressive JavaScript framework
- Vite: Build tool and development server
- TypeScript: Type-safe JavaScript
- Pinia: State management
- FormKit: Form handling
- TailwindCSS: Utility-first CSS framework
Package management
- pnpm 10: Fast, disk space efficient package manager for frontend
- Gradle Wrapper: Ensures consistent Gradle version across environments
Project structure
The Halo monorepo is organized into several modules:Development workflow
When developing for Halo, you’ll typically:- Clone the repository with submodules
- Set up the backend with Java 21 and Gradle
- Set up the frontend with Node.js and pnpm
- Run both servers concurrently during development
- Make changes to backend or frontend code
- Test your changes with automated tests
- Submit pull requests following contribution guidelines
API documentation
Halo provides comprehensive OpenAPI documentation for its RESTful APIs:- Console API: Administrative operations
- Public API: Public-facing endpoints
- User Center API: User management endpoints
- Extension API: Plugin and extension APIs
Plugin development
Halo’s plugin system allows you to extend functionality without modifying core code. Plugins can:- Add new custom resources and APIs
- Extend the console UI with custom views
- Hook into lifecycle events
- Provide additional themes and templates
Contributing
We welcome contributions to Halo! Before starting development:- Check existing issues or create a new one to discuss your idea
- Fork the repository and create a feature branch
- Follow the code style guidelines
- Add tests for new functionality
- Submit a pull request for review
Next steps
Environment setup
Set up your local development environment
Extension system
Learn about Halo’s extension framework
Plugin development
Create your first Halo plugin
API reference
Explore the API documentation