An open-source alternative to Motion, designed for intelligent task scheduling and calendar management. FluidCalendar helps you stay on top of your tasks with smart scheduling capabilities, calendar integration, and customizable workflows.
⚠️ WARNING: ACTIVE DEVELOPMENT VERY BUGGY - REPORT BUGS AND BE PATIENT ✌️ ⚠️
This project is in active development and currently contains many bugs and incomplete features. It is not yet recommended for production use. If you encounter issues:
Your bug reports help make FluidCalendar better! We appreciate your patience and contributions as we work to stabilize the platform.
FluidCalendar is built for people who want full control over their scheduling workflow. It combines the power of automatic task scheduling with the flexibility of open-source software. Read more about the journey and motivation in Part 1 of my blog series.
If you find FluidCalendar useful, please consider supporting its development. Your sponsorship helps ensure continued maintenance and new features.
By becoming a sponsor, you:
Don't want to self-host? We're currently beta testing our hosted version at FluidCalendar.com. Sign up for the waitlist to be among the first to experience the future of intelligent calendar management, with all the features of the open-source version plus:
.nvmrc)To enable Google Calendar integration:
Create a Project:
Go to Google Cloud Console
Note your Project ID
Enable Required APIs:
In your project, go to "APIs & Services" > "Library"
Search for and enable:
Configure OAuth Consent Screen:
Go to "APIs & Services" > "OAuth consent screen"
./auth/calendar.events./auth/calendar./auth/userinfo.emailopenidAdd test users if in testing mode
Create OAuth 2.0 Credentials:
Go to "APIs & Services" > "Credentials"
http://localhost:3000 (for development)http://localhost:3000/api/calendar/google (for development)https://your-domain.com/api/calendar/google (for production)Save the generated Client ID and Client Secret
Configure Credentials:
bash
GOOGLE_CLIENT_ID="your-client-id.apps.googleusercontent.com"
GOOGLE_CLIENT_SECRET="your-client-secret"Note: For production deployment, you'll need to:
To enable Outlook Calendar integration:
Create an Azure AD Application:
Go to Azure Portal
Click "Register"
Configure Platform Settings:
In your registered app, go to "Authentication"
http://localhost:3000/api/auth/callback/azure-ad (for development)https://your-domain.com/api/auth/callback/azure-ad (for production)Click "Configure"
Add API Permissions:
Go to "API permissions"
Calendars.ReadWriteTasks.ReadWriteUser.Readoffline_accessClick "Grant admin consent" (if you're an admin)
Create Client Secret:
Go to "Certificates & secrets"
Copy the generated secret value immediately (you won't be able to see it again)
Configure Credentials:
bash
AZURE_AD_CLIENT_ID="your-client-id"
AZURE_AD_CLIENT_SECRET="your-client-secret"
AZURE_AD_TENANT_ID="your-tenant-id-or-common"Note: For production deployment:
bash
git clone https://github.com/dotnetfactory/fluid-calendar.git
cd fluid-calendar
bash
cp .env.example .env
Edit the .env file and set at minimum these values:
DATABASE_URL=postgresql://fluid:fluid@db:5432/fluid_calendar
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-random-secret-key
bash
docker compose up -d
That's it! The application will be running with a PostgreSQL database automatically configured. The docker-compose.yml file is already configured to use the pre-built Docker image.
If you want to develop FluidCalendar:
bash
git clone https://github.com/dotnetfactory/fluid-calendar.git
cd fluid-calendar
bash
docker compose -f docker-compose.yml up -d
The development environment includes:
# View logs
docker compose logs -f
# Stop the application
docker compose down
# Update to the latest version
docker pull eibrahim/fluid-calendar:latest
docker compose up -d
# Reset database (caution: deletes all data)
docker compose down -v
docker compose up -d
# Access database CLI
docker compose exec db psql -U fluid -d fluid_calendar
.env.example to .env:cp .env.example .env
Configure the following environment variables:
DATABASE_URL: Your database connection string
NEXTAUTH_URL: Your application URLNEXTAUTH_SECRET: Random string for session encryptionNote: Google credentials and logging settings can be managed through the UI in Settings > System. Environment variables will be used as fallback if system settings are not configured.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
Open http://localhost:3000 with your browser to see the result.
Don't want to handle the migration yourself? We offer a complete done-for-you service that includes:
Visit portfolio.elitecoders.co/openproject to learn more about our managed OpenProject migration service.
This project was built by EliteCoders, a software development company specializing in custom software solutions. If you need help with:
Please reach out to us at hello@elitecoders.co or visit our website at www.elitecoders.co.
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
FluidCalendar is available as both an open source self-hosted solution and a managed SAAS service. The open source version contains all the core functionality, while the SAAS version includes additional premium features.
| Feature | Open Source | SAAS |
|---|---|---|
| Calendar Management | ✅ | ✅ |
| Task Management | ✅ | ✅ |
| Google Calendar Integration | ✅ | ✅ |
| Outlook Calendar Integration | ✅ | ✅ |
| CalDAV Integration | ✅ | ✅ |
| Billing & Subscription Management | ❌ | ✅ |
If you're a contributor to the SAAS version, follow these steps to set up your development environment:
git clone https://github.com/dotnetfactory/fluid-calendar-saas.git
# .env.local
ENABLE_SAAS_FEATURES=true
npm run devTo sync changes from the private SAAS repository to the public open source repository:
./scripts/sync-repos.sh /path/to/private/repo /path/to/public/repo
When developing SAAS features:
src/saas directoryFor more information about contributing to the SAAS version, please contact the maintainers.
$ claude mcp add fluid-calendar \
-- python -m otcore.mcp_server <graph>