@@ -13,7 +13,7 @@ Self-hosted • Secure • Mobile-First • No Database Required
1313[ ![ TypeScript] ( https://img.shields.io/badge/TypeScript-5-3178C6 )] ( https://www.typescriptlang.org/ )
1414[ ![ Tailwind CSS] ( https://img.shields.io/badge/Tailwind-3-38B2AC )] ( https://tailwindcss.com/ )
1515
16- [ Quick Start ] ( #quick-start ) • [ Features ] ( #features ) • [ Documentation ] ( #documentation ) • [ Contributing ] ( #contributing ) • [ Discussions] ( https://github.com/chichi13/registry-ui/discussions )
16+ [ Prerequisites ] ( #prerequisites ) • [ Installation Production ] ( #installation-en-production ) • [ Features ] ( #features ) • [ Development ] ( #development ) • [ Discussions] ( https://github.com/chichi13/registry-ui/discussions )
1717
1818</div >
1919
@@ -23,114 +23,71 @@ Self-hosted • Secure • Mobile-First • No Database Required
2323
2424Managing Docker images in a self-hosted registry shouldn't require complex tools or compromising on security. ** Docker Registry UI** provides a clean, modern interface that works seamlessly with your existing Docker Registry V2 API infrastructure.
2525
26- ** Perfect for:**
27-
28- - ** Teams** managing private Docker images
29- - ** Security-conscious** organizations requiring self-hosted solutions
30- - ** DevOps teams** needing a lightweight registry management tool
31- - ** Developers** who want a simple UI without vendor lock-in
32-
33- ** Key Advantages:**
34-
35- - ** 100% Open Source** - MIT licensed, fully transparent
36- - ** No Database** - Stateless architecture, all data from Registry API
37- - ** Bring Your Own Auth** - Integrates with your reverse proxy authentication
38- - ** Privacy First** - Self-hosted, your data stays on your infrastructure
39- - ** Mobile Ready** - Responsive design optimized for all devices
40-
4126---
4227
43- ## Features
44-
45- ### Security & Architecture
46-
47- - ** External Authentication** - Integrates with reverse proxy (Nginx, Caddy, Traefik) for Basic Auth/OAuth
48- - ** Security First** - Must run behind authenticated reverse proxy, never exposed directly
49- - ** Stateless Design** - No database required, all state managed through Registry API
50- - ** Type-Safe** - Full TypeScript coverage with strict mode and Zod validation
51-
52- ### User Experience
53-
54- - ** Mobile-First Design** - Responsive UI optimized for all devices (mobile to desktop)
55- - ** Dark Mode** - Automatic system preference detection with manual toggle
56- - ** Internationalization** - Multi-language support (English, French)
57- - ** Accessibility** - WCAG 2.1 AA compliant components with keyboard navigation
58- - ** Performance** - Server-side rendering, optimized bundle (<500KB initial)
28+ ## Screenshots
5929
60- ### Docker Registry Integration
30+ ### Homepage - Repository List
6131
62- - ** Full V2 API Support** - Complete compatibility with Docker Registry V2 API
63- - ** Smart Tag Deletion** - Intelligent three-tier deletion strategy (OCI API → Dummy Manifest → Digest fallback)
64- - ** Repository Management** - Browse, search, and manage repositories and tags
65- - ** Image Metadata** - View architecture, OS, size, and creation dates
32+ ![ Homepage] ( .github/homepage.png )
6633
67- ### Developer Experience
34+ ### Repository Details - Tags Management
6835
69- - ** Built with Nuxt 4** - Modern Vue 3 framework with Composition API
70- - ** Quality Assured** - ESLint, Prettier, Git hooks, and comprehensive validation
71- - ** Conventional Commits** - Standardized commit message format
72- - ** Documentation** - Comprehensive guides for deployment and development
36+ ![ Specific Repository] ( .github/specific-repository.png )
7337
7438---
7539
76- ## Quick Start
40+ ## Prerequisites
7741
78- Get up and running in minutes :
42+ You need a ** Docker Registry V2 API ** running. Here's how to start one locally for testing :
7943
8044``` bash
81- # Clone the repository
82- git clone https://github.com/chichi13/registry-ui.git
83- cd registry-ui
84-
85- # Install dependencies
86- bun install
87-
88- # Configure environment
89- cp .env.example .env
90- # Edit .env with your Docker Registry URL and credentials
91-
92- # Start development server
93- bun run dev
45+ # Generate htpasswd file (username: admin, password: admin)
46+ docker run --rm httpd:2.4-alpine htpasswd -nbB admin admin > registry.password
47+
48+ # Run Docker Registry 3 with authentication and delete enabled
49+ docker run -d -p 5000:5000 \
50+ -e REGISTRY_STORAGE_DELETE_ENABLED=true \
51+ -e REGISTRY_AUTH=htpasswd \
52+ -e REGISTRY_AUTH_HTPASSWD_REALM= " Registry Realm " \
53+ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password \
54+ -v $( pwd ) /registry.password:/auth/registry.password \
55+ -v registry-data:/var/lib/registry \
56+ --name registry \
57+ registry:3
9458```
9559
96- The application will be available at ` http://localhost:3000 ` .
97-
98- ** Production Deployment:** This application MUST be deployed behind a reverse proxy with authentication. See [ Deployment Guide] ( #deployment-with-reverse-proxy ) for details.
60+ Your registry will be available at ` http://localhost:5000 ` with credentials ` admin:admin ` .
9961
10062---
10163
102- ## Screenshots
64+ ## Installation en Production
10365
104- ### Homepage - Repository List
105-
106- ![ Homepage] ( .github/homepage.png )
107-
108- ### Repository Details - Tags Management
109-
110- ![ Specific Repository] ( .github/specific-repository.png )
66+ ** CRITICAL:** This application MUST be deployed behind a reverse proxy with authentication. Never expose it directly to the internet.
11167
112- ---
68+ ** Architecture: **
11369
114- ## Documentation
70+ ```
71+ Internet → Reverse Proxy (Auth) → Registry UI (localhost:3000) → Docker Registry
72+ ```
11573
11674### Configuration
11775
11876#### Environment Variables
11977
12078Create a ` .env ` file in the root directory:
12179
122- | Variable | Required | Default | Description |
123- | -------------------------- | -------- | ---------------- | ------------------------------------------------------ |
124- | ` NODE_ENV ` | Yes | ` development ` | Environment mode (` development ` or ` production ` ) |
125- | ` HOST ` | Yes | ` 127.0.0.1 ` | Host to bind |
126- | ` PORT ` | Yes | ` 3000 ` | Port for the application server |
127- | ` REGISTRY_URL ` | Yes | - | URL of your Docker Registry V2 API |
128- | ` REGISTRY_USERNAME ` | No | - | Username for registry authentication |
129- | ` REGISTRY_PASSWORD ` | No | - | Password for registry authentication |
130- | ` REGISTRY_VERIFY_SSL ` | Yes | ` true ` | Verify SSL certificates (MUST be ` true ` in production) |
131- | ` REGISTRY_TOKEN_CACHE_TTL ` | Yes | ` 300 ` | Token cache duration in seconds (60-3600) |
132- | ` ENABLE_USER_LOGGING ` | No | ` false ` | Enable user logging from ` X-Forwarded-User ` header |
133- | ` NUXT_PUBLIC_REGISTRY_URL ` | No | ` localhost:5000 ` | Public URL users should use in "docker pull" commands |
80+ | Variable | Required | Default | Description |
81+ | -------------------------- | -------- | ---------------- | ----------------------------------------------------- |
82+ | ` NODE_ENV ` | Yes | ` development ` | Environment mode (` development ` or ` production ` ) |
83+ | ` HOST ` | Yes | ` 127.0.0.1 ` | Host to bind |
84+ | ` PORT ` | Yes | ` 3000 ` | Port for the application server |
85+ | ` REGISTRY_URL ` | Yes | - | URL of your Docker Registry V2 API |
86+ | ` REGISTRY_USERNAME ` | No | - | Username for registry authentication |
87+ | ` REGISTRY_PASSWORD ` | No | - | Password for registry authentication |
88+ | ` REGISTRY_TOKEN_CACHE_TTL ` | Yes | ` 300 ` | Token cache duration in seconds (60-3600) |
89+ | ` ENABLE_USER_LOGGING ` | No | ` false ` | Enable user logging from ` X-Forwarded-User ` header |
90+ | ` NUXT_PUBLIC_REGISTRY_URL ` | No | ` localhost:5000 ` | Public URL users should use in "docker pull" commands |
13491
13592** Example Configuration:**
13693
@@ -143,22 +100,13 @@ REGISTRY_URL=https://registry.example.com
143100NUXT_PUBLIC_REGISTRY_URL=mypublicregistry.com
144101REGISTRY_USERNAME=admin
145102REGISTRY_PASSWORD=your-secure-password
146- REGISTRY_VERIFY_SSL=true
147103REGISTRY_TOKEN_CACHE_TTL=300
148104ENABLE_USER_LOGGING=true
149105```
150106
151107---
152108
153- ### Deployment with Reverse Proxy
154-
155- ** CRITICAL:** This application MUST be deployed behind a reverse proxy with authentication. Never expose it directly to the internet.
156-
157- ** Architecture:**
158-
159- ```
160- Internet → Reverse Proxy (Auth) → Registry UI (localhost:3000) → Docker Registry
161- ```
109+ ### Reverse Proxy Configuration
162110
163111<details >
164112<summary ><b >Nginx Configuration</b ></summary >
@@ -281,39 +229,33 @@ docker run -d \
281229
282230---
283231
284- ### Development
232+ ## Features
285233
286- ** Commands: **
234+ ### Security & Architecture
287235
288- ``` bash
289- # Development
290- bun run dev # Start development server
291- bun run dev-https # Start development server with HTTPS
236+ - ** External Authentication ** - Integrates with reverse proxy (Nginx, Caddy, Traefik) for Basic Auth/OAuth
237+ - ** Security First ** - Must run behind authenticated reverse proxy, never exposed directly
238+ - ** Stateless Design ** - No database required, all state managed through Registry API
239+ - ** Type-Safe ** - Full TypeScript coverage with strict mode and Zod validation
292240
293- # Production
294- bun run build # Build for production
295- bun run start # Start production server
296- bun run start:local # Start production server with local .env
297- bun run preview:static # Preview production build (static)
241+ ### User Experience
298242
299- # Code Quality
300- bun run lint # Lint code
301- bun run lint:fix # Lint fix
302- bun run prettier:check # Check code formatting
303- bun run prettier:fix # Fix code formatting
304- ```
243+ - ** Mobile-First Design** - Responsive UI optimized for all devices (mobile to desktop)
244+ - ** Dark Mode** - Automatic system preference detection with manual toggle
245+ - ** Internationalization** - Multi-language support (English, French)
246+ - ** Accessibility** - WCAG 2.1 AA compliant components with keyboard navigation
247+ - ** Performance** - Server-side rendering, optimized bundle (<500KB initial)
305248
306- ** Code Quality Standards: **
249+ ### Docker Registry Integration
307250
308- - ** ESLint** - Security rules, import order, TypeScript best practices
309- - ** Prettier** - Consistent code formatting (single quotes, no semicolons)
310- - ** TypeScript** - Strict mode with additional checks
311- - ** Git Hooks** - Pre-commit linting, formatting, and type-checking
312- - ** Conventional Commits** - Standardized commit message format
251+ - ** Full V2 API Support** - Complete compatibility with Docker Registry V2 API
252+ - ** Smart Tag Deletion** - Intelligent three-tier deletion strategy (OCI API → Dummy Manifest → Digest fallback)
253+ - ** Repository Management** - Browse, search, and manage repositories and tags
254+ - ** Image Metadata** - View architecture, OS, size, and creation dates
313255
314256---
315257
316- ### Troubleshooting
258+ ## Troubleshooting
317259
318260<details >
319261<summary ><b >Authentication failures</b ></summary >
@@ -343,50 +285,78 @@ This application uses an intelligent **three-tier approach** to delete Docker ta
343285
344286---
345287
346- ## Contributing
288+ ## Development
347289
348- We welcome contributions from the community! Whether it's bug reports, feature requests, documentation improvements, or code contributions, every contribution makes a difference.
290+ Get started with local development:
349291
350- ** Want to suggest a feature?** Join the discussion on [ GitHub Discussions] ( https://github.com/chichi13/registry-ui/discussions ) !
292+ ``` bash
293+ # Clone the repository
294+ git clone https://github.com/chichi13/registry-ui.git
295+ cd registry-ui
296+
297+ # Install dependencies
298+ bun install
351299
352- ### How to Contribute
300+ # Configure environment
301+ cp .env.example .env
302+ # Edit .env with your Docker Registry URL (http://localhost:5000 for local testing)
353303
354- 1 . ** Fork ** the repository
355- 2 . ** Create ** a feature branch ( ` git checkout -b feat/amazing-feature ` )
356- 3 . ** Commit ** your changes using [ Conventional Commits ] ( https://www.conventionalcommits.org/ )
304+ # Start development server
305+ bun run dev
306+ ```
357307
358- ```
359- feat(ui): add repository deletion confirmation dialog
308+ The application will be available at ` http://localhost:3000 ` .
360309
361- Implements a confirmation dialog using Reka UI AlertDialog
362- to prevent accidental repository deletions.
310+ ### Commands
363311
364- Closes #42
365- ```
312+ ``` bash
313+ # Development
314+ bun run dev # Start development server
366315
367- 4 . ** Push** to your branch (` git push origin feat/amazing-feature ` )
368- 5 . ** Open** a Pull Request
316+ # Build
317+ bun run build # Build for production
318+ bun run start # Start production server
369319
370- ### Development Guidelines
320+ # Code Quality
321+ bun run lint # Lint code
322+ bun run prettier:fix # Fix code formatting
323+ ```
371324
372- - Read our [ Contributing Guidelines] ( CONTRIBUTING.md )
373- - Check existing issues before opening new ones
374- - Write clear commit messages using Conventional Commits
375- - Add tests for new features when applicable
325+ ### Code Quality
376326
377- ---
327+ - ** ESLint** - Security rules, import order, TypeScript best practices
328+ - ** Prettier** - Consistent code formatting (single quotes, no semicolons)
329+ - ** TypeScript** - Strict mode with additional checks
330+ - ** Git Hooks** - Pre-commit linting, formatting, and type-checking
331+ - ** Conventional Commits** - Standardized commit message format
378332
379- ### Community
333+ ### Contributing
380334
381- - [ GitHub Discussions] ( https://github.com/chichi13/registry-ui/discussions ) - Ask questions, share ideas
382- - [ GitHub Issues] ( https://github.com/chichi13/registry-ui/issues ) - Report bugs and request features
335+ We welcome contributions! Whether it's bug reports, feature requests, or code contributions, every contribution makes a difference.
336+
337+ ** Want to suggest a feature?** Join the discussion on [ GitHub Discussions] ( https://github.com/chichi13/registry-ui/discussions ) !
338+
339+ ** How to Contribute:**
340+
341+ 1 . Fork the repository
342+ 2 . Create a feature branch (` git checkout -b feat/amazing-feature ` )
343+ 3 . Commit your changes using [ Conventional Commits] ( https://www.conventionalcommits.org/ )
344+ 4 . Push to your branch
345+ 5 . Open a Pull Request
346+
347+ Read our [ Contributing Guidelines] ( CONTRIBUTING.md ) for more details.
383348
384349### Tech Stack
385350
386- - Built with [ Nuxt 4] ( https://nuxt.com/ ) - The Intuitive Vue Framework
387- - UI components powered by [ Reka UI] ( https://reka-ui.com/ ) - Accessible, unstyled components
388- - Styled with [ Tailwind CSS] ( https://tailwindcss.com/ ) - Utility-first CSS framework
389- - Validation with [ Zod] ( https://zod.dev/ ) - TypeScript-first schema validation
351+ - [ Nuxt 4] ( https://nuxt.com/ ) - The Intuitive Vue Framework
352+ - [ Reka UI] ( https://reka-ui.com/ ) - Accessible, unstyled components
353+ - [ Tailwind CSS] ( https://tailwindcss.com/ ) - Utility-first CSS framework
354+ - [ Zod] ( https://zod.dev/ ) - TypeScript-first schema validation
355+
356+ ### Community
357+
358+ - [ GitHub Discussions] ( https://github.com/chichi13/registry-ui/discussions ) - Ask questions, share ideas
359+ - [ GitHub Issues] ( https://github.com/chichi13/registry-ui/issues ) - Report bugs and request features
390360
391361---
392362
0 commit comments