A professional-grade, self-hosted Git frontend built with Node.js. NodeGit provides a streamlined interface for managing repositories, pull requests, and releases, with a strong focus on security and developer experience.
- Git Hosting: Create and manage bare Git repositories on your own server.
- Organizations: Create organizations to group repositories under a shared namespace. Organization names are protected against user namespace collisions. Creation is CAPTCHA-protected to prevent bot abuse.
- Repository Transfer: Securely transfer repositories between your personal account and your organizations (or to other users) with CAPTCHA verification. Validates that destination accounts exist and prevents naming collisions.
- Forking: Fork any public repository into your own account with a single click, preserving all history and branches.
- Private Repositories: Mark repositories as private to restrict access. Private repos return 404 to unauthorized users to prevent enumeration. Git operations on private repos require Basic Authentication.
- Pull Requests: Full PR workflow including web-based diffing and merging.
- User Profiles & Search: View any user's or organization's public repositories. A global search bar filters repositories, users, and organizations by name.
- User Profile READMEs: Create a repository with the same name as your username (e.g.,
alice/alice) containing aREADME.mdto render a custom description card on your user profile page. - Repository Descriptions: Assign descriptions to repositories at creation or in settings, displayed across dashboards, profiles, organizations, and search results.
- Clean Explorer & Compact History:
- File explorer lists the first 6 files by default with a "Show more" button, while always prioritizing and displaying
READMEandLICENSEfiles. - Branch view displays a compact history showing only the last 4 commits.
- File explorer lists the first 6 files by default with a "Show more" button, while always prioritizing and displaying
- GitHub Import: Import repositories interactively from GitHub:
- Bulk Mirror Import: Mirror all repositories from a user or organization in one go.
- Selective Import: Interactively fetch GitHub repositories, choose between Standalone or Mirror import types, edit metadata, and import individual repos or run a batch-selection process with real-time logging.
- NodeGit Pages: Host static websites directly from your repositories.
- Resolves files automatically from publishing branches (checks
gh-pagesfirst, thenmain, thenmaster). - Path-based routing: Websites are served at
/pages/:owner/:repo/. - Custom Domains: Bring-Your-Own-CNAME support by adding a
CNAMEfile in the publishing branch and pointing the DNS CNAME record of your custom domain to NodeGit.
- Resolves files automatically from publishing branches (checks
- Security First:
- CAPTCHA: Built-in verification for registration, login, organization creation, and repository transfers.
- Encryption: Support for encryption-at-rest for database operations.
- HTTPS: Native support for secure transit.
- Basic Auth: Git-over-HTTP operations enforce authentication against user credentials for private repositories.
- Secret Scanning: Automatic scanning for sensitive data in your codebase, skipping binary files, and ignoring workflow template placeholders to prevent false positives.
- Dependency Scanning: Keep your project safe with automated dependency vulnerability checks.
- CI/CD: Integrated GitHub Actions–compatible runner for automated job execution (Docker-ready).
- Themeable UI: Beautiful, GitHub-esque light mode and a custom Lime-on-Black dark mode.
- Release Management: Create and view repository tags and releases.
- Backend: Node.js, Express
- Database: SQLite (via
better-sqlite3andquick.db) - Templating: EJS
- Styling: Vanilla CSS (Custom design system)
- Git: Native Git integration via
child_process
- Node.js (v18 or higher)
- Git installed on the server
-
Clone the repository:
git clone https://github.com/your-username/NodeGit.git cd NodeGit -
Install dependencies:
npm install
-
Configure environment:
cp .env.example .env # Edit .env with your specific configuration -
Start the server:
npm run dev
The application will be available at http://localhost:3000 (or the port specified in your .env).
The following environment variables can be configured in your .env file:
| Variable | Description | Default |
|---|---|---|
PORT |
Port the server listens on | 3000 |
SESSION_SECRET |
Secret key for session management | super-secret-git-frontend |
DB_ENCRYPTION_KEY |
32-character key for database encryption | None |
MAIN_DOMAIN |
The main application domain name | localhost |
PAGES_DOMAIN |
The Pages custom domain base CNAME domain | pages.nodegit.com |
- CAPTCHA: The registration and login forms are protected by a custom server-side SVG CAPTCHA to prevent automated sign-ups.
- HTTPS: To enable HTTPS, place
key.pemandcert.pemin the root directory. NodeGit will automatically detect them and switch to a secure server.
This project is licensed under the terms found in the LICENSE file.
Built with ❤️ by the NodeGit contributors.