The open source calendar that changes everything
To get Analog up and running on your local machine, follow these steps:
Ensure you have the following installed:
- Bun: A fast JavaScript runtime, package manager, bundler, and test runner.
- Docker Desktop: For running the PostgreSQL database.
- 
Clone the repository: git clone https://github.com/analogdotnow/analog.git cd analog
- 
Install dependencies: bun install 
- 
Configure environment variables: Copy the example environment file: cp .env.example .env Then, open the newly created .envfile. You will find default values forDATABASE_URLandBETTER_AUTH_URL. You need to set the following:- BETTER_AUTH_SECRET: Generate a secure secret by running- openssl rand -hex 32in your terminal.
 
- 
Set up Google OAuth: 
- GOOGLE_CLIENT_IDand- GOOGLE_CLIENT_SECRET:- Create a Google project in the Google Cloud Console.
- Follow step 1 in the Better Auth documentation to set up Google OAuth credentials.
- Enable the Google Calendar API by visiting Google Cloud Console APIs and enabling it for your project.
- Add yourself as test user:
- Locate the Google OAuth Audiencetab.
- Under 'Test users', click on 'Add Users'.
- Add your email(s) in the textbox and click on 'Save'.
 
- Locate the Google OAuth 
 
- Set up Microsoft OAuth (optional):
- MICROSOFT_CLIENT_IDand- MICROSOFT_CLIENT_SECRET:- Go to the Microsoft Azure Portal, then navigate to Microsoft Entra ID → App registrations.
- Register a new application and set the redirect URI (http://localhost:3000/api/auth/callback/microsoft).
- Copy the Application (client) ID and create a new client secret under Certificates & secrets.
- Go to API permissions, click + Add a permission, choose Microsoft Graph → Delegated permissions, and add:
- Calendars.Read,- Calendars.ReadWrite,- User.Read,- offline_access
 
 
- Set up Google Maps API (optional):
- GOOGLE_MAPS_API_KEY:- In your existing Google Cloud project (or create a new one), enable the Places API (New) by visiting Google Cloud API Library.
- Create an API key in Google Cloud Maps Platform Credentials.
- Set the API key as GOOGLE_MAPS_API_KEYin your.envfile.
 
Analog uses PostgreSQL with Drizzle ORM. You can run the database using Docker:
- 
Start the PostgreSQL database container: bun run docker:up This command uses docker-compose.ymlto spin up a PostgreSQL container.
- 
Initialize the database: Once the database container is running and healthy, initialize the database: bun run db:push 
After setting up the environment and database, you can start the development server:
bun run devThe application should now be accessible in your browser at http://localhost:3000.
- Web: Next.js, TypeScript, Tailwind v4, Bun, tRPC, TanStack Query, shadcn/ui, Vercel API SDK
- Database: Drizzle with PostgreSQL
- Authentication: Better Auth
Please see CONTRIBUTING.md for details on how to contribute to this project.