[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73242":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":15,"starSnapshotCount":15,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},73242,"timelinize","timelinize\u002Ftimelinize","Store your data from all your accounts and devices in a single cohesive timeline on your own computer","https:\u002F\u002Ftimelinize.com",null,"Go",3510,113,24,50,0,3,7,22,9,28.17,"GNU Affero General Public License v3.0",false,"main",true,[26,27,28,29,30,31],"archival","data-archiving","data-import","family-history","self-hosted","timeline","2026-06-12 02:03:10","\u003Ca href=\"https:\u002F\u002Ftimelinize.com\">\n\t\u003Cpicture>\n\t\t\u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Ftimelinize\u002Ftimelinize\u002Fmain\u002Ffrontend\u002Fresources\u002Fimages\u002Flogo-dark.svg\">\n\t\t\u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Ftimelinize\u002Ftimelinize\u002Fmain\u002Ffrontend\u002Fresources\u002Fimages\u002Flogo-light.svg\">\n\t\t\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Ftimelinize\u002Ftimelinize\u002Fmain\u002Ffrontend\u002Fresources\u002Fimages\u002Ftimelinize-light.svg\" alt=\"Timelinize\" width=\"400\">\n\t\u003C\u002Fpicture>\n\u003C\u002Fa>\n\u003Chr>\n\n[![godoc](https:\u002F\u002Fpkg.go.dev\u002Fbadge\u002Fgithub.com\u002Ftimelinize\u002Ftimelinize)](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Ftimelinize\u002Ftimelinize)\n&nbsp;\n[![Discord](https:\u002F\u002Fdcbadge.limes.pink\u002Fapi\u002Fserver\u002FC9dCnTW6qV?style=flat-square)](https:\u002F\u002Fdiscord.gg\u002FC9dCnTW6qV)\n\nOrganize 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.\n\nTimelinize 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.\n\n**[Join our Discord](https:\u002F\u002Fdiscord.gg\u002FC9dCnTW6qV)** to discuss!\n\n\n> [!TIP]  \n> 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.\n\n## Videos\n\n**90 second intro:**\n\n[![Timelinize Intro](https:\u002F\u002Fimg.youtube.com\u002Fvi\u002FB7h_oYAZQbo\u002F0.jpg)](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=B7h_oYAZQbo)\n\n**30 minute tour:**\n\n[![Timelinize Tour](https:\u002F\u002Fimg.youtube.com\u002Fvi\u002FVRhtEjz6hws\u002F0.jpg)](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VRhtEjz6hws)\n\n\n\n## Screenshots\n\n> [!NOTE]  \n> The UI is still evolving, so these screenshots are outdated, but they give you the idea.\n\n|  |  |\n| ---- | ---- |\n![WIP Dashboard](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F293cbe57-ac75-4c4b-b78a-b75f6d442d99) 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. | ![Timeline view](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F01f808c4-7b0e-4ad0-b12a-6398f6321272) 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.\n![Item view](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F41f5671c-df85-4af5-9f67-6358e7489442) Viewing an item shows all the information about it, regardless of type: text, photo, live photo, video, location, etc. | ![File picker](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fecf2482e-58a5-434f-a0d2-f9b1274af106) 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.\n![3D map](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F051031c1-0659-4388-b01f-475bb4d24490) The large map view is capable of 3D exploration, showing your memories right where they happened with a color-coded path that represents time. | ![Map showing non-geolocated data](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F7ddbe3cd-4bdc-4d3a-be92-d9c41e29ee1b) 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.\n![Entities](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F832c6bce-029c-4abf-943e-84253458a9f7) Timelinize treats entities (people, pets\u002Fanimals, organizations, etc.) as first-class data points which you can filter and organize. | ![Merge entities](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F932259b1-fc1d-40bc-b27d-a58e37537c4c) 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.\n![Conversations](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F0973df3c-eba9-49b8-b369-0e44f4120c37) Conversations are aggregated across data sources that have messaging capabilities. They become emergent from the database by querying relationships between items and entities. | ![Conversation view](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F62ece383-6702-47ed-8f11-6c95af0cc3de) In this conversation view, you can see messages exchanged with this person across both Facebook and SMS\u002Ftext message are displayed together. Reactions are also supported.\n![Gallery](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ffe89db8e-66b1-4854-9d47-a774bf20961f) 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\u002Fvideos in your data. You can always filter to drill down.\n\n\n## How it works\n\n1. **[Obtain your data.](https:\u002F\u002Ftimelinize.com\u002Fdocs\u002Fdata-preparation)** This usually involves exporting your data from apps, online accounts, or devices. For example, requesting an archive from Google Takeout. (Apple iCloud, Facebook, Twitter\u002FX, Strava, Instagram, etc. all offer similar functionality for GDPR compliance.) Do this early\u002Fsoon, because some services take days to provide your data.\n2. **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.\n3. **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.)\n4. **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.\n\n> [!CAUTION]\n> 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\u002Fbuilds.\n\n## Download and run\n\nDownload the [latest release](https:\u002F\u002Fgithub.com\u002Ftimelinize\u002Ftimelinize\u002Freleases\u002Flatest) for your platform.\n\nSee the website for [installation instructions](https:\u002F\u002Ftimelinize.com\u002Fdocs\u002Finstall).\n\n## Develop\n\nSee our [project wiki](https:\u002F\u002Fgithub.com\u002Ftimelinize\u002Ftimelinize\u002Fwiki\u002F) for instructions on [compiling from source](https:\u002F\u002Fgithub.com\u002Ftimelinize\u002Ftimelinize\u002Fwiki\u002FDevelop).\n\n\n## Command line interface\n\nTimelinize 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.\n\nRun `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\u002Fflags that represent the JSON schema or form fields.\n\n\u003C!-- \u003Cdetails>\n\n\u003Csummary>Wails UI info (no longer used)\u003C\u002Fsummary>\n\n## Wails v2 (native GUI) info\n\nThe last commit that used Wails (v2) was b9b80838b2b92501139f2f0c5fab63921a7e6502.\nThat can be used as a reference if we ever switch back to Wails. The last working\ncommit that had Wails that was released as a dev preview was\nbcb0f732e01e5b0e34a142a35b658a1f328c4c6d.\n\nIn July-August 2023 we transitioned away from Wails and went to a client\u002Fserver\nmodel for stability and flexibility. Wails itself was great, the main problem\nwas the poor performance of Webkit2GTK, even on Mac it was pretty bad (frequent\ncrashes).\n\nThe instructions below are preserved here for reference in case that comes\nin handy, though the commits above also have this in their READMEs:\n\n### Development\n\nRun commands in the project root:\n\n#### Linux, macOS\n\n```bash\n$ wails dev\n```\n\n#### Windows\n\n```powershell\n$env:CC=\"zig cc\"; $env:CXX=\"zig c++\"; wails dev\n```\n\nOr, if cross-compiling:\n\n```powershell\n> $env:CC=\"zig cc -target x86_64-windows\"; $env:CXX=\"zig c++ -target x86_64-windows\"; wails dev\n```\n\n\u003C\u002Fdetails> -->\n\n## Setup Development Environment\nDev Container setup is provided for easy development using GitHub Codespaces or Visual Studio Code with the DevContainers extension.\n\n### Getting started with VSCode\n1. Make sure you have the following installed:\n\n\t- [Docker](https:\u002F\u002Fwww.docker.com\u002F)\n\t- [DevContainers for VSCode](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-vscode-remote.remote-containers)\n\n2. Open this project in VSCode\n3. Go to the __Remote Explorer__ on Activity Bar\n4. Click on __New Dev Container (+)__\n5. Click on __Open Current Folder in Container__\n\nThis sets up a docker container with all the dependencies required for building this project. You can get started with contributing quickly.\n\n\n## Motivation and vision\n\n(For roadmap, see [issues tagged `long-term 🔭`](https:\u002F\u002Fgithub.com\u002Ftimelinize\u002Ftimelinize\u002Fissues?q=is%3Aissue%20label%3A%22long-term%20%F0%9F%94%AD%22).)\n\nThe 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.\n\n1. 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 \u002F travel \u002F 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 remember? What would it be like to talk to them? A lot of this could not be known unless they wrote it all down. But these days, we have that data for ourselves. What better time than right now to start collecting personal histories from all available sources and develop a rich timeline of our life for our family, or even just for our own reference and nostalgia.\n\n2. Our lives are better-documented than any before us, but the record of our life is more ephemeral than any before us, too. We lose control of our data by relying on centralized, proprietary apps and cloud services which are useful today, and gone tomorrow. I wrote Timelinize because now is the time to liberate my data from corporations who don't own it, yet who have the only copy of it. This reality has made me feel uneasy for years, and it's not going away soon. Timelinize makes it bearable.\n\nImagine being able to pull up a single screen with your data from any and all of your online accounts and services -- while offline. And there you see so many aspects of your life at a glance: your photos and videos, social media posts, locations on a map and how you got there, emails and letters, documents, health and physical activities, mental and emotional wellness, and maybe even music you listened to, for any given day. You can \"zoom out\" and get the big picture. Machine learning algorithms could suggest major clusters based on your content to summarize your days, months, or years, and from that, even recommend printing physical memorabilia. It's like a highly-detailed, automated journal, fully in your control, which you can add to in the app: augment it with your own thoughts like a regular journal.\n\nThen cross-reference your own timeline with a global public timeline: see how locations you went to changed over time, or what major news events may have affected you, or what the political\u002Fsocial climate -- or the literal climate -- was like at the time. For example, you may wonder, \"Why did the family stay inside so much of the summer one year?\" You could then see, \"Oh, because it was 110 F (43 C) degrees for two months straight.\"\n\nOr translate the projection sideways, and instead of looking at time cross-sections, look at cross-sections of your timeline by media type: photos, posts, location, sentiment. Look at plots, charts, graphs, of your physical activity.\n\nOr view projections by space instead of time: view interrelations between items on a map, even items that don't have location data, because the database is entity-aware. So if a person receives a text message and the same person has location information at about the same time from a photo or GPS device, then the text message can appear on a map too, reminding you where you first got the text with the news about your nephew's birth.\n\nAnd all of this runs on your own computer: no one else has access to it, no one else owns it, but you.\n\nAnd if everyone had their own timeline, in theory they could be merged into a global supertimeline to become a thorough record of the human race, all without the need for centralizing our data on cloud services that are controlled by greedy corporations.\n\n## History\n\nI've been working on this project since about 2013, even before I conceptualized [Caddy](https:\u002F\u002Fcaddyserver.com). My initial vision was to create an automated backup of my Picasa albums that I could store on my own hard drive. This project was called Photobak. Picasa eventually became Google Photos, and about the same time I realized I wanted to backup my photos posted to Facebook, Instagram, and Twitter, too. And while I was at it, why not include my Google Location History to augment the location data from the photos. The vision continued to expand as I realized that my family could use this too, so the schema was upgraded to support multiple people\u002Fentities as well. This could allow us to merge databases, or timelines, as family members pass, or as they share parts of their timeline around with each other. Timelinize is the mature evolution of the original project that is now designed to be a comprehensive, highly detailed archive of one's life through digital (or _digitized_) content. An authoritative, unified record that is easy to preserve and organize.\n\n## License\n\nThis project is licensed with AGPL. I chose this license because I do not want others, especially companies, to make proprietary or commercial software using this package. The point of this project is liberation of and control over one's own personal data, and I want to ensure that this project won't perpetuate or exacerbate the walled garden problem we already face today. Even if the future of this project ever has proprietary source code, I can ensure it will stay aligned with my values and the project's original goals.\n","Timelinize 是一个用于将来自所有账户和设备的数据整合到个人电脑上的单一时间线中的工具。它支持从计算机、手机、在线账户、GPS 设备等多种来源导入照片、视频、聊天记录、位置历史等数据，并以时间轴形式展示，便于用户永久保存和管理个人信息。项目采用 Go 语言开发，具备强大的数据导入与归档能力，特别适用于希望在本地安全存储并浏览个人或家庭历史资料的用户。此外，作为自托管软件，Timelinize 提供了对数据完全控制的解决方案。",2,"2026-06-11 03:44:41","high_star"]