Timelinize: A Local, Owner-Controlled Archive of Every Data Type from Every Platform
Store your data from all your accounts and devices in a single cohesive timeline on your own computer
At a glance
- What is it?
- Timelinize is a Go application that imports photos, messages, location history, social media posts, and contacts from practically any source into a single SQLite-backed timeline stored entirely on your own computer. Data is stored by date in ordinary files without obfuscation, and the same HTTP API drives both the web UI and the command-line interface.
- Who is it for?
- Timelinize fits people who want a permanent, local archive of their digital life and are willing to accept an unstable schema and a build process that requires CGO, libvips, and zig. The README is explicit: always keep original source data, because schema changes require starting over from a clean slate.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 132 days ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 26, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Timelinize Is and Who It Serves
Timelinize is a Go application that aggregates personal data from all sources into a single timeline stored on the user's own machine. The data types it handles include photos, videos, chat messages, location history, social media content, and contacts. It imports from computers, phones, online account exports, GPS-enabled radios, apps, and contact lists. The README positions it as a tool for keeping memories alive and owning them permanently, calling it a great living family history tool. It is aimed at individuals who want ownership of their data rather than dependency on cloud services, and who are prepared to periodically export and re-import data from platforms like Google, Facebook, and Instagram. The README notes that some services take days to provide exported archives, so starting the export process early is important before the data becomes inaccessible.
How Import and Storage Works
Timelinize's import process reads data in its original format: zip archives and tar files do not need to be extracted first. The README describes the workflow as: obtain a data export, import it using Timelinize, and explore. Data is indexed in a SQLite database and stored on disk organized by date. No obfuscation or proprietary formats are used, so files can be browsed directly without Timelinize running. The README explicitly notes this as a feature: you can simply browse your files if you wish. Timelinize skips existing data that is the same on re-import, so the process can be repeated every few weeks to pull in new content from busy accounts without duplicating what is already there. The README recommends this incremental import pattern for the most important accounts. A four-step loop is described: obtain the data export, import it, explore and organize, then repeat.
The Entity System: People, Pets, and Organizations Across Data Sources
Timelinize treats entities (people, pets, animals, organizations) as first-class data points. The UI shows data filtered by entity, and Timelinize automatically recognizes the same entity across data sources when enough identifying information is present. For cases where automatic recognition is insufficient, entities can be manually merged with a single click. The cross-source entity model produces emergent behaviors: the conversation view aggregates messages exchanged with a person across Facebook and SMS, showing them in a single thread ordered by time. The gallery shows not only photos from a photo library but also images sent in messages, photos uploaded to social media, and any other images in the imported data. A map view can show data points without geolocation information by inferring location from other signals, such as a text message received while at a known place. The entity-aware architecture is what distinguishes Timelinize from a simple file backup tool.
Downloading and Running Timelinize
Timelinize provides pre-built binaries for download from the releases page at github.com/timelinize/timelinize/releases/latest. The most recent release listed in the repository metadata is v0.0.28, published on 2025-10-17. Installation instructions are at timelinize.com/docs/install. Developers who want to build from source need CGO_ENABLED=1, the libvips image processing library, and optionally zig for cross-compilation. The community-maintained Makefile shows the native macOS ARM64 build command:
go build -o $(BIN_ROOT)/$(BIN_NAME)_darwin_arm64Cross-compilation for Linux ARM64 uses zig as the C compiler:
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC="zig cc -target aarch64-linux" CXX="zig c++ -target aarch64-linux" go build -o $(BIN_ROOT)/$(BIN_NAME)_linux_arm64A Dockerfile is also provided in the repository, building on Debian Trixie and compiling libvips from source to ensure HEIF support. The Go module path is github.com/timelinize/timelinize with a go 1.25.8 requirement.
The HTTP API and CLI
Timelinize has a symmetric HTTP API and CLI: when an HTTP API endpoint is created in the code, it automatically becomes a CLI command. The README describes this design as meaning that JSON or form inputs are converted to command-line arguments and flags that represent the JSON schema or form fields. To see the full list of available commands, the README instructs:
timelinize helpOr, if running from source:
go run main.go helpThis symmetric design means every UI action is scriptable from the command line without a separate API client. The web UI itself runs as a local HTTP server, with the frontend served from the frontend/ directory in the source tree. The README notes the project originally used Wails for a native GUI (with the last Wails commit preserved as a reference in the code history) but transitioned to a client/server model in mid-2023 due to poor Webkit2GTK performance on Linux.
The Schema Instability Warning and What It Means Practically
The README contains an explicit caution: Timelinize is in active development and is still unstable. The database schema is still changing, which requires starting over from a clean slate when updating to a new version. The README recommends always keeping original source data because of this. In practical terms, a user who updates Timelinize must delete their existing database and re-import all their data archives from the originals. This is a significant operational cost for large personal archives. The README describes this caution in the context of screenshots being outdated because the UI is still evolving. The most recent release listed in the metadata is v0.0.28, which signals pre-1.0 status. Treat Timelinize as a tool for building and exploring a personal archive, not as a long-term storage format that can be upgraded in place.
Timelinize vs. Dawarich and Self-Hosted Alternatives
Dawarich is a self-hosted location history tracker that appears in the project's search-related terms. The comparison is narrow: Dawarich focuses on importing GPS track files and location data from services like Google Maps Timeline and Overland, displaying them on a map. Timelinize covers a much broader data surface: photos, messages, contacts, social media, and location data all in a single database. Dawarich does not handle photos or messages. Timelinize does not specialize in GPS track formats to the same degree Dawarich does. A user who only needs location history visualization will find Dawarich more focused. A user who wants a unified archive of all personal digital data across all platforms will need Timelinize's broader import scope. Both are self-hosted and store data locally.
License and Build Requirements
Timelinize is licensed under AGPL-3.0. The AGPL requires that anyone who runs a modified version as a network service must release the modified source code to users of that service. This is a meaningful constraint for anyone considering building a hosted personal archive service on top of Timelinize. The build requirements are heavier than a typical Go project: libvips is required for image processing and must be compiled with HEIF support (for Apple HEIC photos) enabled. The Dockerfile compiles libvips from source using meson and ninja on Debian Trixie. The go.mod file lists over 30 direct dependencies including Caddy v2 for the HTTP server, sqlite-vec-go-bindings for vector search, and cshum/vipsgen for the Go bindings to libvips. The last push to the repository was on 2026-05-22.
Editorial conclusion
Timelinize fits people who want a permanent, local archive of their digital life and are willing to accept an unstable schema and a build process that requires CGO, libvips, and zig. The README is explicit: always keep original source data, because schema changes require starting over from a clean slate. Do not treat a Timelinize database as the authoritative copy of your files. The AGPL-3.0 license means any networked service built on it must release source.
Frequently asked questions
Can Timelinize import data from Google Takeout?
The README lists Google Takeout as one of the supported import sources, alongside Apple iCloud, Facebook, Twitter/X, Strava, and Instagram. Timelinize reads archives in their original format without requiring extraction first.
What happens to existing data when I update Timelinize?
The README warns explicitly that the database schema is still changing and requires starting over from a clean slate when updating to a new version. Original source data must always be kept separately, because existing Timelinize databases cannot be migrated forward to new schema versions.
Does Timelinize use any proprietary file formats for storage?
No. The README states that all imported data is indexed in a SQLite database and stored on disk organized by date, with no obfuscation or proprietary formats. Files can be browsed directly without Timelinize running.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/timelinize-timelinize)