{"id":47817707,"url":"https://github.com/tiehfood/xpferd","last_synced_at":"2026-04-07T13:01:10.792Z","repository":{"id":345002355,"uuid":"1182715537","full_name":"tiehfood/xpferd","owner":"tiehfood","description":"Simple app to design single page invoices and export XRechnung and ZUGFeRD conform files","archived":false,"fork":false,"pushed_at":"2026-04-03T10:12:38.000Z","size":2852,"stargazers_count":60,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T19:55:57.104Z","etag":null,"topics":["germany","invocie","invoice-generator","svelte","wysiwyg","xrechnung","zugferd"],"latest_commit_sha":null,"homepage":"https://buymeacoffee.com/tiehfood","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tiehfood.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"buy_me_a_coffee":"tiehfood"}},"created_at":"2026-03-15T21:55:27.000Z","updated_at":"2026-04-03T18:59:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tiehfood/xpferd","commit_stats":null,"previous_names":["tiehfood/xpferd"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/tiehfood/xpferd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fxpferd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fxpferd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fxpferd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fxpferd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tiehfood","download_url":"https://codeload.github.com/tiehfood/xpferd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fxpferd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31513382,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["germany","invocie","invoice-generator","svelte","wysiwyg","xrechnung","zugferd"],"created_at":"2026-04-03T18:49:59.612Z","updated_at":"2026-04-07T13:01:10.782Z","avatar_url":"https://github.com/tiehfood.png","language":"TypeScript","funding_links":["https://buymeacoffee.com/tiehfood","https://www.buymeacoffee.com/tiehfood"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Icon\" src=\"docs/icons/icon2.svg\" width=\"33%\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/tiehfood/xpferd/releases/latest\"\u003e\n    \u003cimg alt=\"Release Version\" src=\"https://img.shields.io/github/release/tiehfood/xpferd.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/tiehfood/xpferd\"\u003e\n    \u003cimg alt=\"Docker Pulls\" src=\"https://img.shields.io/docker/pulls/tiehfood/xpferd\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/tiehfood/xpferd.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/tiehfood/xpferd\"\u003e\n    \u003cimg alt=\"Stars\" src=\"https://img.shields.io/github/stars/tiehfood/xpferd?style=flat\u0026label=github+stars\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.buymeacoffee.com/tiehfood\"\u003e\n    \u003cimg alt=\"ByMeACoffee\" src=\"https://raw.githubusercontent.com/pachadotdev/buymeacoffee-badges/main/bmc-orange.svg\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# X(P)FeRD\n\nI needed a simple application for creating, managing and exporting XRechnung XML and ZUGFeRD PDF invoices (German e-invoicing standard).\nEspecially a simple WYSIWYG PDF designer was something I was looking for but couldn't find an existing solution I liked.\nSo I build this little app.\nIt's probably not perfect as my testing data is limited but feel free to report any issues or submit PRs if you want to contribute.\n\nI will be honest about the usage of AI. It assisted me in this project, but it's still nothing, you create with just two or three promts. There went some serious thinking in it, particularly in the features.\n\nAbout the name: The \"X\" was taken from XRechnung obviously and part of ZUGFeRD is so closely to \"Pferd\" (Horse) in german, so I combined both and made an \"XPferd\" out of it.\n\n## Features\n\n- Create and edit invoices with all legally required fields for Germany\n- Export invoices as XRechnung 3.0 compliant XML\n- Design single page invoice PDF with WYSIWYG editor\n  - Support for SVG logos\n  - Use custom fonts (TTF/OFT)\n  - Custom and common help lines (including envelope window, folding marks and borders)\n- Export invoices as ZUGFeRD 2.1 compliant PDF (with embedded XML)\n- Duplicate invoices or create from templates\n- Swagger API documentation at `/api-docs`\n- Support for Germany and English language\n- Import existing XML invoices (XRechnung \u0026 UBL)\n- Create recurring invoices automatically with custom intervals\n- Send invoices via email (SMTP) with ZUGFeRD PDF / XRechnung XML attachments\n- Email templates with placeholder and HTML support\n- Encrypted SMTP password storage (AES-256-GCM)\n\n## Screenshots\n| ![Screenshot01](docs/screenshots/screen1.png) | ![Screenshot02](docs/screenshots/screen2.png) |\n|:---------------------------------------------:|:---------------------------------------------:|\n| ![Screenshot03](docs/screenshots/screen3.png) | ![Screenshot04](docs/screenshots/screen4.png) |\n| ![Screenshot05](docs/screenshots/screen5.png) | ![Screenshot06](docs/screenshots/screen6.png) |\n\n## Docker image\n**Latest:** [tiehfood/xpferd:latest](https://hub.docker.com/r/tiehfood/xpferd/tags?name=latest)  \n*(or specific tag from release page, just the number without the leading `v`)*\n\n## Quick Start\n\n```bash\n# Minimal\ndocker run -v xpferd:/app/data -p 3000:3000 tiehfood/xpferd:latest\n\n# Production\ndocker-compose up production\n\n# Development\ndocker-compose up dev\n```\n\nThe app is available at `http://localhost:3000` for production.\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ENCRYPTION_KEY` | No | 64-character hex string (32 bytes) used to encrypt SMTP passwords at rest (AES-256-GCM). If not set, a key is auto-generated and stored at `data/.encryption-key` inside the container. |\n\n\n```bash\n# Example: Generate encryption key\nopenssl rand -hex 32\n```\n\n## Manual Docker Setup\n\n```bash\n# Build the dev image\ndocker build -f Dockerfile.dev -t xrechnung-dev .\n\n# Start a persistent dev container\ndocker run -d --name xr-dev \\\n  -v \"$(pwd):/app\" \\\n  -p 3000:3000 \\\n  xrechnung-dev\n\n# Install dependencies\ndocker exec xr-dev pnpm install\n\n# Build the frontend\ndocker exec xr-dev node build-client.js\n\n# Start the server\ndocker exec xr-dev npx tsx src/server/index.ts\n```\n\n## Running Tests\n\n```bash\ndocker exec xr-dev npx vitest run\n```\n\nOr via Docker Compose:\n\n```bash\ndocker-compose run --rm test\n```\n\n## Frameworks \u0026 Libraries\n- **Application:** TypeScript, Svelte 5, Express\n- **Database:** SQLite\n- **PDF Generation:** @libpdf/core\n- **XML Generation:** xmlbuilder2 (UBL 2.1 / XRechnung 3.0)\n- **API Documentation:** Swagger-UI (`/api-docs`)\n\n## Credits\n - [XRechnung 3.0](https://xeinkauf.de/xrechnung/versionen-und-bundles/)\n - [ZUGFeRD 2.1](https://www.ferd-net.de/standards/zugferd/)\n\n___\n\n\u003cp align=\"center\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/image?repos=tiehfood/xpferd\u0026type=date\u0026theme=dark\u0026legend=bottom-right\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/image?repos=tiehfood/xpferd\u0026type=date\u0026legend=bottom-right\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/image?repos=tiehfood/xpferd\u0026type=date\u0026legend=bottom-right\" /\u003e\n \u003c/picture\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiehfood%2Fxpferd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftiehfood%2Fxpferd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiehfood%2Fxpferd/lists"}