Timelinize
Store your data from all your accounts and devices in a single cohesive timeline on your own computer
Install / Use
/learn @timelinize/TimelinizeREADME
Organize your photos & videos, chats & messages, location history, social media content, contacts, and more into a single cohesive timeline on your own computer where you can keep them alive and own them forever.
Timelinize lets you import your data from practically anywhere: your computer, phone, online accounts, GPS-enabled radios, various apps and programs, contact lists, cameras, and more.
Join our Discord to discuss!
[!TIP]
Screenshots and videos here portray real timelines containing real data in demo mode, which obfuscates the sensitive information. Images are blurred, names and other identifiers are replaced with random data, and some locations are faked. Your timeline will show the real data.
Videos
90 second intro:
30 minute tour:
Screenshots
[!NOTE]
The UI is still evolving, so these screenshots are outdated, but they give you the idea.
| | |
| ---- | ---- |
WIP dashboard. Very WIP. The bubble chart is particularly interesting as it shows you what kinds of data are most common at which times of day throughout the years. |
The classic timeline view is a combination of all data grouped by types and time segments for reconstructing a day or other custom time period.
Viewing an item shows all the information about it, regardless of type: text, photo, live photo, video, location, etc. |
I had to make a custom file picker since browser APIs are too limiting. This is how you'll import most of your data into your timeline, but this flow is being revised soon.
The large map view is capable of 3D exploration, showing your memories right where they happened with a color-coded path that represents time. |
Because Timelinize is entity-aware and supports multiple data sources, it can show data on a map even if it doesn't have geolocation information. That's what the gray dots or pins represent. In this example, a text message was received while at church, even though it doesn't have any geolocation info associated with it directly.
Timelinize treats entities (people, pets/animals, organizations, etc.) as first-class data points which you can filter and organize. |
Timelinize will automatically recognize the same entity across data sources with enough information, but if it isn't possible automatically, you can manually merge entities with a click.
Conversations are aggregated across data sources that have messaging capabilities. They become emergent from the database by querying relationships between items and entities. |
In this conversation view, you can see messages exchanged with this person across both Facebook and SMS/text message are displayed together. Reactions are also supported.
A gallery displays photos and videos, but not just those in your photo library: it includes pictures and memes sent via messages, photos and videos uploaded to social media, and any other photos/videos in your data. You can always filter to drill down.
How it works
- Obtain your data. This usually involves exporting your data from apps, online accounts, or devices. For example, requesting an archive from Google Takeout. (Apple iCloud, Facebook, Twitter/X, Strava, Instagram, etc. all offer similar functionality for GDPR compliance.) Do this early/soon, because some services take days to provide your data.
- Import your data using Timelinize. You don't need to extract or decompress .tar or .zip archives; Timelinize will attempt to recognize your data in its original format and folder structure. All the data you import is indexed in a SQLite database and stored on disk organized by date -- no obfuscation or proprietary formats; you can simply browse your files if you wish.
- Explore and organize! Timelinize has a UI that portrays data using various projections and filters. It can recall moments from your past and help you view your life more comprehensively. (It's a great living family history tool.)
- Repeat steps 1-3 as often as desired. Timelinize will skip any existing data that is the same and only import new content. You could do this every few weeks or months for busy accounts that are most important to you.
[!CAUTION] Timelinize is in active development and is still unstable. The schema is still changing, necessitating starting over from a clean slate when updating. Always keep your original source data. Expect to delete and recreate your timelines as you upgrade to new versions/builds.
Download and run
Download the latest release for your platform.
See the website for installation instructions.
Develop
See our project wiki for instructions on compiling from source.
Command line interface
Timelinize has a symmetric HTTP API and CLI. When an HTTP API endpoint is created in the code, it automatically adds to the command line as well.
Run timelinize help (or go run main.go help if you're running from source) to view the list of commands, which are also HTTP endpoints. JSON or form inputs are converted to command line args/flags that represent the JSON schema or form fields.
Setup Development Environment
Dev Container setup is provided for easy development using GitHub Codespaces or Visual Studio Code with the DevContainers extension.
Getting started with VSCode
-
Make sure you have the following installed:
-
Open this project in VSCode
-
Go to the Remote Explorer on Activity Bar
-
Click on New Dev Container (+)
-
Click on Open Current Folder in Container
This sets up a docker container with all the dependencies required for building this project. You can get started with contributing quickly.
Motivation and vision
(For roadmap, see issues tagged long-term 🔭.)
The motivation for this project is two-fold. Both press upon me with a sense of urgency, which is why I dedicated some nights and weekends to work on this.
- Connecting with my family -- both living and deceased -- is important to me and my close relatives. But I wish we had more insights into the lives of those who came before us. What was important to them? Where did they live / travel / spend their time? What lessons did they learn? How did global and local events -- or heck, even the weather -- affect them? What hardships did they endure? What would they have wanted to r


