{"id":34930418,"url":"https://github.com/ovidiuvio/relic","last_synced_at":"2026-03-18T00:11:42.204Z","repository":{"id":327987002,"uuid":"1102653021","full_name":"ovidiuvio/relic","owner":"ovidiuvio","description":"modern take on pastebin","archived":false,"fork":false,"pushed_at":"2026-01-22T09:50:31.000Z","size":2632,"stargazers_count":38,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-22T23:50:17.212Z","etag":null,"topics":["artifacts","dev-tools","devops","logging","paste","pastebin","relic","self-hosted","self-hosting"],"latest_commit_sha":null,"homepage":"","language":"Svelte","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ovidiuvio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-23T20:53:53.000Z","updated_at":"2026-01-21T15:00:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ovidiuvio/relic","commit_stats":null,"previous_names":["ovidiuvio/relic"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/ovidiuvio/relic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovidiuvio%2Frelic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovidiuvio%2Frelic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovidiuvio%2Frelic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovidiuvio%2Frelic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ovidiuvio","download_url":"https://codeload.github.com/ovidiuvio/relic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovidiuvio%2Frelic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28977317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T09:57:52.632Z","status":"ssl_error","status_checked_at":"2026-02-01T09:57:49.143Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artifacts","dev-tools","devops","logging","paste","pastebin","relic","self-hosted","self-hosting"],"created_at":"2025-12-26T15:34:53.201Z","updated_at":"2026-03-18T00:11:42.184Z","avatar_url":"https://github.com/ovidiuvio.png","language":"Svelte","readme":"# Relic - Artifact Storage Service\n\nA modern, feature-rich artifact service with immutable relics, complete version history, and smart content processing. Built with FastAPI (Python), Svelte, and Tailwind CSS.\n\n![Relic Overview](assets/newrelic.png)\n\n## Overview\n\nRelic is a self-hosted pastebin and artifact storage system designed for developers. It goes beyond simple text storage by supporting binary files, archives, images, and providing rich previews for various content types. With a focus on immutability and versioning, Relic ensures your shared snippets and files are safe, trackable, and easy to manage.\n\n## Key Features\n\n- **Immutable Artifacts**: Each relic is permanent. Edits create new versions via forking with complete history preserved.\n- **Version Comparison**: Visually analyze additions and deletions across text and code lineage through rich diffing.\n- **Universal Content Support**: \n  - **Code**: Integrated Monaco editor and syntax highlighting for 100+ languages.\n  - **Structured Data**: Visually navigate and explore JSON, YAML, TOML, and XML files with an interactive tree viewer.\n  - **Images**: Direct preview support.\n  - **Archives**: Browse ZIP/TAR contents directly in the browser, complete with structured data exploration for embedded files.\n  - **Documents**: PDF rendering, CSV/Excel tables, and Markdown rendering.\n  - **Diagrams**: Integrated Excalidraw support.\n- **Spaces**: Organize relics into curated dynamic collections with access controls and filtering.\n- **Tagging \u0026 Discovery**: Easily organize and search relics using tags.\n- **Bookmarks**: Save important relics using the bookmark functionality to easily find them later.\n- **Comments \u0026 Collaboration**: Discuss code snippets and collaborate directly on relics.\n- **CLI Tool**: Powerful command-line interface for quick uploads from terminal.\n- **Relic Indexes**: Create file-based curated collections of relics (`.rix` files).\n- **Access Control**: Public and private relics.\n- **Expiration**: Set relics to expire after 1h, 24h, 7d, 30d, or never.\n- **Admin Panel**: Manage users, view system stats, and moderate content.\n\n## Visual Tour\n\n### Rich Code Viewing\nSyntax highlighting with line numbers, copy-to-clipboard, and raw view options.\n![Source View](assets/source-view.png)\n\n### Image Previews\nDirect image rendering.\n![Image View](assets/relicimg.png)\n\n### Archive Explorer\nBrowse the contents of ZIP and TAR files without downloading them.\n![Archive View](assets/archive.png)\n\n### Structured Data Explorer\nVisually navigate and explore JSON, YAML, TOML, and XML structured data directly in the browser.\n![JSON Explorer](assets/json-explore.png)\n\n### Recent Relics \u0026 Management\nView recently created public relics or manage your own.\n![Recent Relics](assets/recent.png)\n\n### Spaces\nOrganize your relics into specialized spaces.\n![Spaces](assets/spaces.png)\n\n### Space Management\nView, search, and manage relics within your curated collections.\n![Space View](assets/space-view.png)\n\n### Diff viewer\nCompare and diff changes effortlessly across different text and code versions.\n![Diff View](assets/diff-view.png)\n\n### Comments \u0026 Collaboration\nDiscuss code snippets and artifacts directly on the relic page.\n![Comments](assets/comments.png)\n\n### Admin Dashboard\nMonitor system usage, storage, and manage relics.\n![Admin Panel](assets/admin.png)\n\n## CLI Tool\n\nRelic comes with a powerful CLI tool for terminal-based workflows.\n\n### Quick Install\n```bash\ncurl -sSL https://your-domain.com/install.sh | bash\n```\n\n### Usage\n```bash\n# Upload from stdin\necho \"Hello World\" | relic\n\n# Upload a file\nrelic myfile.txt\n\n# Upload with options\nrelic --name \"My Script\" --private --expires 24h script.py\n\n# Push a relic into a space\nrelic --space \u003cspace_id\u003e script.py\n\n# Manage spaces\nrelic spaces create \"My Cool Space\" --visibility public\n```\n\n## Quick Start\n\n### Prerequisites\n- Docker and Docker Compose\n- Make (optional, but recommended)\n\n### Production Deployment (Recommended)\n\nFor production/release deployments, use the default configuration:\n\n1. **Start production services**\n```bash\nmake up\n```\n\nOr without Make:\n```bash\ndocker compose -f docker-compose.prod.yml up -d --build\n```\n\n2. **Access the application**\n- Application: http://localhost\n- MinIO Console: http://localhost:9001 (minioadmin/minioadmin)\n\n3. **View logs**\n```bash\nmake logs\n```\n\n4. **Stop services**\n```bash\nmake down\n```\n\n### Development Setup\n\nFor local development with hot-reload:\n\n1. **Start development services**\n```bash\nmake dev-up\n```\n\nOr without Make:\n```bash\ndocker compose -f docker-compose.dev.yml up -d\n```\n\n2. **Access the application**\n- Frontend: http://localhost (with hot-reload)\n- Backend: http://localhost/api (with auto-reload)\n- API Docs: http://localhost/api/docs\n- MinIO Console: http://localhost:9001 (minioadmin/minioadmin)\n\n3. **View logs**\n```bash\nmake dev-logs\n```\n\n4. **Stop services**\n```bash\nmake dev-down\n```\n\n**Note:** Development mode mounts your local code directories as volumes, enabling hot-reload for both frontend and backend. Changes to code will be reflected immediately without rebuilding.\n\n## Admin Setup\n\nRelic supports admin users with elevated privileges (view all relics, delete any relic, manage clients, view statistics).\n\n### Setting Up an Admin User\n\n1. **Get your Client ID**\n\n   Open your browser's Developer Tools (F12) and run this in the Console:\n   ```javascript\n   localStorage.getItem('relic_client_key')\n   ```\n\n   This will output your client ID, which looks like: `5cdb7b79c38385db9f5b5f6ad884c8ef`\n\n2. **Configure Admin in Production**\n\n   Edit `docker-compose.prod.yml` and set the `ADMIN_CLIENT_IDS` environment variable:\n   ```yaml\n   backend:\n     environment:\n       ADMIN_CLIENT_IDS: \"5cdb7b79c38385db9f5b5f6ad884c8ef\"\n   ```\n\n   For multiple admins, use comma-separated values:\n   ```yaml\n   ADMIN_CLIENT_IDS: \"5cdb7b79c38385db9f5b5f6ad884c8ef,a1b2c3d4e5f6789012345678abcdef01\"\n   ```\n\n3. **Restart Services**\n   ```bash\n   make down\n   make up\n   ```\n\n4. **Access Admin Panel**\n\n   After restarting, the \"Admin\" tab will appear in the navigation. Admin privileges include:\n   - View all relics (including private ones)\n   - Delete any relic (not just your own)\n   - View all registered clients\n   - Delete clients and their relics\n   - View system statistics\n\n### Development Environment\n\nFor development mode, edit `docker-compose.dev.yml` instead and use:\n```bash\nmake dev-down\nmake dev-up\n```\n\n## Relic Indexes\n\nRelic indexes (`.rix` files) allow you to create curated collections of relics.\n\n```yaml\ntitle: My Project Documentation\ndescription: A collection of documentation files.\nrelics:\n  - id: f47ac10b58cc4372a5670e02b2c3d479\n    title: API Reference\n  - id: a1b2c3d4e5f678901234567890abcdef\n```\n\n## API Endpoints\n\nAll API endpoints are prefixed with `/api/v1`.\n\n**Create Relic**\n```bash\ncurl -X POST http://localhost/api/v1/relics \\\n  -F \"file=@myfile.txt\" \\\n  -F \"name=My File\"\n```\n\n**Get Relic**\n```bash\ncurl http://localhost/api/v1/relics/{id}\n```\n\n**Fork Relic**\n```bash\ncurl -X POST http://localhost/api/v1/relics/{id}/fork \\\n  -F \"file=@new.txt\"\n```\n\n## Architecture\n\n- **Frontend**: Svelte, Tailwind CSS, Vite\n- **Backend**: FastAPI, SQLAlchemy, Pygments\n- **Storage**: PostgreSQL (Metadata), MinIO (Content)\n- **Infrastructure**: Docker, Nginx\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovidiuvio%2Frelic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fovidiuvio%2Frelic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovidiuvio%2Frelic/lists"}