A Git-inspired Version Control System built from scratch using Java, Spring Boot, React, and custom data structures.
Mini VCS allows users to track files, create commits, manage branches, visualize repository history, and monitor repository status through an interactive web dashboard.
- Initialize repositories
- Track files and versions
- Monitor repository status
- Browse tracked files
- Create commits with messages
- Maintain commit history
- Track parent-child relationships
- View commit metadata
- Create branches
- Switch between branches
- Track branch heads
- Merge branch histories
- Live repository statistics
- Dynamic commit graph
- Repository status monitoring
- Recent activity feed
- SHA-1 based file tracking
- Version history management
- File metadata visualization
To better understand the internals of version control systems, several data structures were implemented from scratch and integrated into the project:
- Linked List
- Stack
- Queue
- Hash Table
- Binary Search Tree
These structures are used throughout the repository, commit, and version management modules.
The Version Control System was originally implemented as a Java application.
To make it interactive and easier to visualize, a Spring Boot API layer was built on top of the core VCS engine. The React frontend communicates with these APIs to display repository data in real time.
React Frontend
โ
โผ
Spring Boot REST API
โ
โผ
Mini VCS Engine
โ
โผ
Custom Data Structures
One of the core features of Mini VCS is the dynamic commit graph.
The graph is generated directly from repository commit history and visualized using React Flow.
Features include:
- Dynamic node generation
- Parent-child commit relationships
- HEAD commit highlighting
- Real-time updates from backend APIs
- Interactive repository history visualization
Example:
debug
โ
โผ
next
โ
โผ
hello (HEAD)
Unlike static diagrams, the graph is generated entirely from actual commit data.
The dashboard provides a real-time overview of repository activity.
- Total commits
- Active branches
- Tracked files
- Current HEAD commit
- Modified files
- Deleted files
- Untracked files
- Working tree health
- Latest commits
- Commit timestamps
- Repository updates
- React.js
- Tailwind CSS
- React Flow
- Axios
- Lucide React
- Java
- Spring Boot
- REST APIs
- Repository Management
- Commit Tracking
- Branch Management
- File Versioning
Mini-VCS
โ
โโโ mini-vcs-ui
โ โโโ components
โ โโโ pages
โ โโโ services
โ โโโ layout
โ
โโโ mini-vcs-api
โ โโโ controller
โ โโโ service
โ โโโ dto
โ โโโ vcs
โ
โโโ core-engine
โโโ Repository
โโโ Commit
โโโ CommitHistory
โโโ File
โโโ FileVersion
GET /api/dashboardReturns repository statistics including commit count, branch count, tracked files, and current HEAD.
GET /api/commitsReturns commit history and metadata.
GET /api/branchesReturns branch information and current branch details.
GET /api/filesReturns tracked files and metadata.
GET /api/statusReturns modified, deleted, and untracked files.
During development, several interesting problems were addressed:
- Designing commit-parent relationships
- Implementing branch tracking and checkout functionality
- Building file version management using SHA-1 hashes
- Exposing a Java-based VCS through REST APIs
- Synchronizing frontend visualizations with backend repository data
- Generating dynamic commit graphs from repository history
- Integrating custom data structures into a real-world application
cd mini-vcs-api
./mvnw spring-boot:runRuns on:
http://localhost:8080
cd mini-vcs-ui
npm install
npm run devRuns on:
http://localhost:5173
- Branch checkout from UI
- Branch creation and deletion
- Merge conflict visualization
- Commit search and filtering
- File diff viewer
- Multi-repository support
- Authentication and user profiles
- Dark mode
- GitHub integration
Tejinder Kaur Passionate about Software Engineering, Backend Development, Open Source, and Building Systems from Scratch.