The open-source property management platform for independent landlords.
Manage all your properties across multiple countries in one simple, secure place.
Rentra is an open-source, self-hostable property management solution designed for small landlords and individuals who own a few rental properties—whether in one city or across multiple countries.
Most property management software is either too basic or too complex. Rentra fills the gap by offering:
- 🌍 Multi-property, multi-currency support — Manage properties in different countries with their respective currencies
- 🔒 Privacy-first — Self-host your data, no vendor lock-in
- 📱 Cross-platform — Web-first with mobile support via CapacitorJS (iOS & Android)
- 🧩 Simple by design — No bloated features, just what you need
Why open source? Because your property data shouldn't be locked in someone else's SaaS. Fork it, customize it, run it on your own servers.
- ✅ Add and manage unlimited properties
- ✅ Track property details (bedrooms, bathrooms, size, furnishing, parking)
- ✅ Support for multiple property types (houses, apartments, villas, townhouses, duplexes, studios)
- ✅ Property photos and documentation
- ✅ Store tenant contact information
- ✅ Link tenants to properties
- ✅ Manage lease agreements (start/end dates, rent amounts, payment frequency)
- ✅ Record income and expenses per property
- ✅ Multi-currency support
- ✅ Transaction categorization
- ✅ Loan and mortgage tracking (lender, term, interest rate, monthly payments)
- ✅ Secure document uploads (contracts, receipts, legal documents)
- ✅ Documents linked to properties or tenants
- ✅ Private storage with signed URLs for secure access
- ✅ Email/password authentication
- ✅ OAuth providers (Google, GitHub, Discord)
- ✅ Two-factor authentication (2FA)
- ✅ Passkey support
- ✅ Email verification & password reset
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript, Vite, Tailwind CSS, shadcn/ui, TanStack Query |
| Global State Management | Zustand |
| Backend | Node.js, Express 5, TypeScript |
| Database | PostgreSQL (SupaBase) with Drizzle ORM |
| Authentication | BetterAuth (sessions, OAuth, 2FA, Passkeys) |
| Validation | Zod |
| File Storage | Supabase Storage (S3-compatible) |
| Containerization | Docker, Docker Compose |
- Docker & Docker Compose
- Doppler CLI (for secret management)
- Node.js 20+ & pnpm (optional, for local development)
-
Clone the repository
git clone https://github.com/Abdullah73k/Rentra.git cd Rentra -
Configure secrets
Rentra uses Doppler for secret management. Set up your project:
doppler setup
Required environment variables
# Authentication BETTER_AUTH_SECRET BETTER_AUTH_URL # Domains DEVELOPMENT_DOMAIN PRODUCTION_DOMAIN # OAuth Providers (optional) DISCORD_CLIENT_ID DISCORD_CLIENT_SECRET GITHUB_CLIENT_ID GITHUB_CLIENT_SECRET GOOGLE_CLIENT_ID GOOGLE_CLIENT_SECRET # Email GMAIL_APP_PASSWORD GMAIL_USER # Server PORT # Supabase SUPABASE_API_KEY SUPABASE_CONNECTION_STRING SUPABASE_POSTGRES_PASSWORD SUPABASE_PRIVATE_BUCKET_NAME SUPABASE_PUBLIC_BUCKET_NAME SUPABASE_SERVICE_ROLE_KEY SUPABASE_URL # Doppler (auto-injected) DOPPLER_CONFIG DOPPLER_ENVIRONMENT DOPPLER_PROJECT -
Start the application
pnpm run compose:up
-
Access the app
- 🌐 Frontend: http://localhost:5173
- 🔌 API: http://localhost:4000
-
Stop the application
pnpm run compose:down
Click to expand
-
Install dependencies
# Root pnpm install # Client cd client && pnpm install # Server cd ../server && pnpm install
-
Start the development servers
# Terminal 1 - Backend cd server pnpm run dev # Terminal 2 - Frontend cd client pnpm run dev
-
Database migrations
cd server pnpm run drizzle
Rentra/
├── client/ # React frontend (Vite)
│ ├── src/
│ │ ├── components/ # UI components (shadcn/ui based)
│ │ ├── pages/ # Route pages
│ │ ├── stores/ # Zustand stores
│ │ ├── lib/ # Utilities, types, schemas
│ │ └── utils/ # HTTP client, auth utilities
│ └── Dockerfile
│
├── server/ # Express backend
│ ├── src/
│ │ ├── controllers/ # Route handlers
│ │ ├── db/ # Database schemas & config
│ │ ├── middlewares/ # Auth, error handling, file upload
│ │ ├── repositories/ # Data access layer
│ │ ├── routes/ # API route definitions
│ │ ├── schemas/ # Zod validation schemas
│ │ └── services/ # Business logic
│ └── Dockerfile
│
├── docker-compose.yaml # Container orchestration
└── package.json # Root workspace config
- 📖 API Documentation (coming soon)
- 🏗️ Architecture Overview (coming soon)
- 🔐 Security & Authentication (coming soon)
- 📱 Mobile Setup (CapacitorJS) (coming soon)
We welcome contributions! Whether it's bug fixes, new features, or documentation improvements.
-
Fork the repository
-
Create a feature branch
git checkout -b PM-00-Epic-Name-task/short-summary
Branch format:
<JIRA-KEY>-<Epic-Name>-<task or bug>/<short-summary>For external contributors, always use
PM-00as the Jira key. -
Make your changes and commit using our commit format:
git commit -m "PM-00[Epic-Name][task]: add new property export feature"Commit format:
<Jira-Key>[Epic-Name][task or bug]: <Concise explanation of what you did> -
Push and open a Pull Request
- We use ESLint and Prettier for code formatting
- Commit messages are enforced via Commitlint and Husky
- All PRs should pass linting and type checks
🚧 Currently working on:
- Finishing iOS and Android mobile integration via CapacitorJS.
- Resolving existing bugs and working towards 100% functionality in production.
Rentra is open-source software licensed under the MIT License.
Built with amazing open-source tools: