-
-
+
+
+
+
{item.title}
-
+
{item.description}
+
+
-
- {`${item.dateType} - ${isBrowser ? item.date.toLocaleDateString(navigator.language) : ''}`}
-
- {item.description}
);
diff --git a/docs/src/pages/milestones.tsx b/docs/src/pages/roadmap.tsx
similarity index 54%
rename from docs/src/pages/milestones.tsx
rename to docs/src/pages/roadmap.tsx
index a69b11670f..cc96495a06 100644
--- a/docs/src/pages/milestones.tsx
+++ b/docs/src/pages/roadmap.tsx
@@ -1,31 +1,43 @@
import {
- mdiEyeRefreshOutline,
mdiAccountGroup,
+ mdiAccountGroupOutline,
mdiAndroid,
mdiAppleIos,
mdiArchiveOutline,
mdiBash,
mdiBookSearchOutline,
+ mdiBookmark,
mdiCakeVariant,
+ mdiCameraBurst,
+ mdiChartBoxMultipleOutline,
mdiCheckAll,
mdiCheckboxMarked,
+ mdiCloudUploadOutline,
mdiCollage,
mdiContentCopy,
mdiDevices,
+ mdiEmailOutline,
mdiExpansionCard,
+ mdiEyeOutline,
+ mdiEyeRefreshOutline,
mdiFaceMan,
mdiFaceManOutline,
mdiFile,
mdiFileSearch,
+ mdiFlash,
+ mdiFlowerPoppy,
mdiFolder,
mdiForum,
+ mdiHandshakeOutline,
mdiHeart,
mdiImage,
mdiImageAlbum,
+ mdiImageEdit,
mdiImageMultipleOutline,
mdiImageSearch,
mdiKeyboardSettingsOutline,
mdiMagnify,
+ mdiMagnifyScan,
mdiMap,
mdiMaterialDesign,
mdiMatrix,
@@ -36,13 +48,18 @@ import {
mdiPanVertical,
mdiPartyPopper,
mdiPencil,
+ mdiPencilOff,
+ mdiPencilOutline,
mdiRaw,
+ mdiRocketLaunch,
mdiRotate360,
+ mdiScaleBalance,
mdiSecurity,
mdiServer,
mdiShareAll,
mdiShareCircle,
mdiStar,
+ mdiTableKey,
mdiTag,
mdiText,
mdiThemeLightDark,
@@ -50,663 +67,608 @@ import {
mdiVectorCombine,
mdiVideo,
mdiWeb,
- mdiScaleBalance,
- mdiMagnifyScan,
- mdiChartBoxMultipleOutline,
- mdiAccountGroupOutline,
- mdiFlowerPoppy,
- mdiHandshakeOutline,
} from '@mdi/js';
import Layout from '@theme/Layout';
import React from 'react';
-import Timeline, { DateType, Item } from '../components/timeline';
+import { Item, Timeline } from '../components/timeline';
-const items: Item[] = [
+const releases = {
+ 'v1.104.0': new Date(2024, 4, 13),
+ 'v1.103.0': new Date(2024, 3, 29),
+ 'v1.102.0': new Date(2024, 3, 15),
+ 'v1.99.0': new Date(2024, 2, 20),
+ 'v1.98.0': new Date(2024, 2, 7),
+ 'v1.95.0': new Date(2024, 1, 20),
+ 'v1.94.0': new Date(2024, 0, 31),
+ 'v1.93.0': new Date(2024, 0, 19),
+ 'v1.91.0': new Date(2023, 11, 15),
+ 'v1.90.0': new Date(2023, 11, 7),
+ 'v1.88.0': new Date(2023, 10, 20),
+ 'v1.84.0': new Date(2023, 10, 1),
+ 'v1.83.0': new Date(2023, 9, 28),
+ 'v1.82.0': new Date(2023, 9, 17),
+ 'v1.79.0': new Date(2023, 8, 21),
+ 'v1.76.0': new Date(2023, 7, 29),
+ 'v1.75.0': new Date(2023, 7, 26),
+ 'v1.72.0': new Date(2023, 7, 6),
+ 'v1.71.0': new Date(2023, 6, 29),
+ 'v1.69.0': new Date(2023, 6, 23),
+ 'v1.68.0': new Date(2023, 6, 20),
+ 'v1.67.0': new Date(2023, 6, 14),
+ 'v1.66.0': new Date(2023, 6, 4),
+ 'v1.65.0': new Date(2023, 5, 30),
+ 'v1.63.0': new Date(2023, 5, 24),
+ 'v1.61.0': new Date(2023, 5, 16),
+ 'v1.58.0': new Date(2023, 4, 28),
+ 'v1.57.0': new Date(2023, 4, 23),
+ 'v1.56.0': new Date(2023, 4, 18),
+ 'v1.55.0': new Date(2023, 4, 9),
+ 'v1.54.0': new Date(2023, 3, 18),
+ 'v1.52.0': new Date(2023, 2, 29),
+ 'v1.51.0': new Date(2023, 2, 20),
+ 'v1.48.0': new Date(2023, 1, 21),
+ 'v1.47.0': new Date(2023, 1, 13),
+ 'v1.46.0': new Date(2023, 1, 9),
+ 'v1.43.0': new Date(2023, 1, 3),
+ 'v1.41.0': new Date(2023, 0, 10),
+ 'v1.39.0': new Date(2022, 11, 19),
+ 'v1.36.0': new Date(2022, 10, 20),
+ 'v1.33.1': new Date(2022, 9, 26),
+ 'v1.32.0': new Date(2022, 9, 14),
+ 'v1.27.0': new Date(2022, 8, 6),
+ 'v1.24.0': new Date(2022, 7, 19),
+ 'v1.10.0': new Date(2022, 4, 29),
+ 'v1.7.0': new Date(2022, 3, 24),
+ 'v1.3.0': new Date(2022, 2, 22),
+ 'v1.2.0': new Date(2022, 1, 8),
+} as const;
+
+const weirdTags = {
+ 'v1.41.0': 'v1.41.1_64-dev',
+ 'v1.39.0': 'v1.39.0_61-dev',
+ 'v1.36.0': 'v1.36.0_55-dev',
+ 'v1.33.1': 'v1.33.0_52-dev',
+ 'v1.32.0': 'v1.32.0_50-dev',
+ 'v1.27.0': 'v1.27.0_37-dev',
+ 'v1.24.0': 'v1.24.0_34-dev',
+ 'v1.10.0': 'v1.10.0_15-dev',
+ 'v1.7.0': 'v1.7.0_11-dev ',
+ 'v1.3.0': 'v1.3.0-dev ',
+ 'v1.2.0': 'v0.2-dev ',
+};
+
+const withLanguage = (date: Date) => (language: string) => date.toLocaleDateString(language);
+
+type Base = { icon: string; title: string; description: string };
+const withRelease = ({ icon, title, description, release: version }: Base & { release: keyof typeof releases }) => {
+ return {
+ icon,
+ title,
+ description,
+ link: {
+ url: `https://github.com/immich-app/immich/releases/tag/${weirdTags[version] ?? version}`,
+ text: version,
+ },
+ getDateLabel: withLanguage(releases[version]),
+ };
+};
+
+const roadmap: Item[] = [
+ {
+ done: false,
+ icon: mdiRocketLaunch,
+ title: 'Stable release',
+ description: 'Immich goes stable',
+ getDateLabel: () => 'Planned for 2024',
+ },
+ {
+ done: false,
+ icon: mdiCloudUploadOutline,
+ title: 'Better background backups',
+ description: 'Rework background backups to be more reliable',
+ getDateLabel: () => 'Planned for 2024',
+ },
+ {
+ done: false,
+ icon: mdiImageEdit,
+ title: 'Basic editor',
+ description: 'Basic photo editing capabilities',
+ getDateLabel: () => 'Planned for 2024',
+ },
+ {
+ done: false,
+ icon: mdiFlash,
+ title: 'Workflows',
+ description: 'Automate tasks with workflows',
+ getDateLabel: () => 'Planned for 2024',
+ },
+ {
+ done: false,
+ icon: mdiTableKey,
+ title: 'Fine grained access controls',
+ description: 'Granular access controls for users and api keys',
+ getDateLabel: () => 'Planned for 2024',
+ },
+ {
+ done: false,
+ icon: mdiWeb,
+ title: 'Web translations',
+ description: 'Translate the web application to multiple languages',
+ getDateLabel: () => 'Planned for 2024',
+ },
+ {
+ done: false,
+ icon: mdiCameraBurst,
+ title: 'Auto stacking',
+ description: 'Auto stack burst photos',
+ getDateLabel: () => 'Planned for 2024',
+ },
+];
+
+const milestones: Item[] = [
+ // withRelease({
+ // icon: mdiVectorCombine,
+ // title: 'Container consolidation',
+ // description:
+ // 'The microservices container can be run as a worker within the server image, allowing us to remove it from the default stack.',
+ // release: 'v1.106.0',
+ // }),
+ withRelease({
+ icon: mdiPencilOutline,
+ title: 'Read-write external libraries',
+ description: 'Edit, update, and delete files in external libraries',
+ release: 'v1.104.0',
+ }),
+ withRelease({
+ icon: mdiEmailOutline,
+ title: 'Email notifications',
+ description: 'Send emails for important events',
+ release: 'v1.104.0',
+ }),
{
icon: mdiHandshakeOutline,
- description: 'Joined Futo and Immich core team goes full-time',
title: 'Immich joins FUTO!',
- date: new Date(2024, 4, 1),
- dateType: DateType.DATE,
+ description: 'Joined Futo and Immich core team goes full-time',
+ getDateLabel: withLanguage(new Date(2024, 4, 1)),
},
- {
+ withRelease({
+ icon: mdiEyeOutline,
+ title: 'Read-only albums',
+ description: 'Share albums with other users as read-only',
+ release: 'v1.103.0',
+ }),
+ withRelease({
+ icon: mdiBookmark,
+ title: 'Permanent URLs (Web)',
+ description: 'Assets on the web now have permanent URLs',
+ release: 'v1.103.0',
+ }),
+ withRelease({
icon: mdiStar,
- description: 'Reached 30K Stars on GitHub!',
title: '30,000 Stars',
+ description: 'Reached 30K Stars on GitHub!',
release: 'v1.102.0',
- tag: 'v1.102.0',
- date: new Date(2024, 3, 15),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiChartBoxMultipleOutline,
- description: 'OpenTelemetry metrics for local evaluation and advanced debugging',
title: 'OpenTelemetry metrics',
+ description: 'OpenTelemetry metrics for local evaluation and advanced debugging',
release: 'v1.99.0',
- tag: 'v1.99.0',
- date: new Date(2024, 2, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFlowerPoppy,
- description: 'Immich got its new logo',
title: 'New logo',
+ description: 'Immich got its new logo',
release: 'v1.98.0',
- tag: 'v1.98.0',
- date: new Date(2024, 2, 7),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMagnifyScan,
- description: 'Advanced search with filters by date, location and more',
title: 'Search enhancement with advanced filters',
+ description: 'Advanced search with filters by date, location and more',
release: 'v1.95.0',
- tag: 'v1.95.0',
- date: new Date(2024, 1, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiScaleBalance,
- description: 'Immich switches to AGPLv3 license',
title: 'AGPL License',
+ description: 'Immich switches to AGPLv3 license',
release: 'v1.95.0',
- tag: 'v1.95.0',
- date: new Date(2024, 1, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiEyeRefreshOutline,
- description: 'Automatically import files in external libraries when the operating system detects changes.',
title: 'Library watching',
+ description: 'Automatically import files in external libraries when the operating system detects changes.',
release: 'v1.94.0',
- tag: 'v1.94.0',
- date: new Date(2024, 0, 31),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiExpansionCard,
- description: 'Hardware acceleration support for Nvidia and Intel devices through CUDA and OpenVINO.',
title: 'GPU acceleration for machine-learning',
+ description: 'Hardware acceleration support for Nvidia and Intel devices through CUDA and OpenVINO.',
release: 'v1.94.0',
- tag: 'v1.94.0',
- date: new Date(2024, 0, 31),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiAccountGroupOutline,
- description: '250 amazing people contributed to Immich',
title: '250 unique contributors',
+ description: '250 amazing people contributed to Immich',
release: 'v1.93.0',
- tag: 'v1.93.0',
- date: new Date(2024, 0, 19),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMatrix,
- description: 'Moved the search from typesense to pgvecto.rs',
title: 'Search improvement with pgvecto.rs',
+ description: 'Moved the search from typesense to pgvecto.rs',
release: 'v1.91.0',
- tag: 'v1.91.0',
- date: new Date(2023, 11, 15),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiPencil,
- description: "Edit a photo or video's date, time, hours, timezone, and GPS information",
title: 'Edit metadata',
+ description: "Edit a photo or video's date, time, hours, timezone, and GPS information",
release: 'v1.90.0',
- tag: 'v1.90.0',
- date: new Date(2023, 11, 7),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiVectorCombine,
+ title: 'Container consolidation',
description:
'The serving of the web app is merged into the server image, allowing us to remove two containers from the stack.',
- title: 'Container consolidation',
release: 'v1.88.0',
- tag: 'v1.88.0',
- date: new Date(2023, 10, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiBash,
- description: 'Version 2 of the Immich CLI is released, replacing the legacy v1 CLI.',
title: 'CLI v2',
+ description: 'Version 2 of the Immich CLI is released, replacing the legacy v1 CLI.',
release: 'v1.88.0',
- tag: 'v1.88.0',
- date: new Date(2023, 10, 19),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiForum,
- description: 'Comment a photo or a video in a shared album',
title: 'Activity',
+ description: 'Comment a photo or a video in a shared album',
release: 'v1.84.0',
- tag: 'v1.84.0',
- date: new Date(2023, 10, 1),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiStar,
- description: 'Reached 20K Stars on GitHub!',
title: '20,000 Stars',
+ description: 'Reached 20K Stars on GitHub!',
release: 'v1.83.0',
- tag: 'v1.83.0',
- date: new Date(2023, 9, 28),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiContentCopy,
title: 'Stack assets',
description: 'Manual asset stacking for grouping and hiding related assets in the main timeline.',
release: 'v1.83.0',
- tag: 'v1.83.0',
- date: new Date(2023, 9, 28),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiPalette,
title: 'Custom theme',
description: 'Apply your custom CSS for modifying fonts, colors, and styles in the web application.',
release: 'v1.83.0',
- tag: 'v1.83.0',
- date: new Date(2023, 9, 28),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiTrashCanOutline,
- title: 'Trash Feature',
+ title: 'Trash feature',
description: 'Trash, restore from trash, and automatically empty the recycle bin after 30 days.',
release: 'v1.82.0',
- tag: 'v1.82.0',
- date: new Date(2023, 9, 17),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiBookSearchOutline,
- title: 'External Libraries',
+ title: 'External libraries',
description: 'Automatically import media into Immich based on imports paths and ignore patterns.',
release: 'v1.79.0',
- tag: 'v1.79.0',
- date: new Date(2023, 8, 21),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMap,
- title: 'Map View (Mobile)',
+ title: 'Map view (mobile)',
description: 'Heat map implementation in the mobile app.',
release: 'v1.76.0',
- tag: 'v1.76.0',
- date: new Date(2023, 7, 29),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFile,
- title: 'Configuration File',
+ title: 'Configuration file',
description: 'Auto-configure an Immich installation via a configuration file.',
release: 'v1.75.0',
- tag: 'v1.75.0',
- date: new Date(2023, 7, 26),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMonitor,
- title: 'Slideshow Mode (Web)',
+ title: 'Slideshow mode (web)',
description: 'Start a full-screen slideshow from an Album on the web.',
release: 'v1.75.0',
- tag: 'v1.75.0',
- date: new Date(2023, 7, 26),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiServer,
- title: 'Hardware Transcoding',
+ title: 'Hardware transcoding',
description: 'Support hardware acceleration (QuickSync, VAAPI, and Nvidia) for video transcoding.',
release: 'v1.72.0',
- tag: 'v1.72.0',
- date: new Date(2023, 7, 6),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiImageAlbum,
- title: 'View Albums via Time Buckets',
+ title: 'View albums via time buckets',
description: 'Upgrade albums to use time buckets, an optimized virtual viewport.',
release: 'v1.72.0',
- tag: 'v1.72.0',
- date: new Date(2023, 7, 6),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiImageAlbum,
- title: 'Album Description',
+ title: 'Album description',
description: 'Save an album description.',
release: 'v1.72.0',
- tag: 'v1.72.0',
- date: new Date(2023, 7, 6),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiRotate360,
- title: '360° Photos (Web)',
+ title: '360° Photos (web)',
description: 'View 360° Photos on the web.',
release: 'v1.71.0',
- tag: 'v1.71.0',
- date: new Date(2023, 6, 29),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMotionPlayOutline,
- title: 'Android Motion Photos',
+ title: 'Android motion photos',
description: 'Add support for Android Motion Photos.',
release: 'v1.69.0',
- tag: 'v1.69.0',
- date: new Date(2023, 6, 23),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFaceManOutline,
- title: 'Show/Hide Faces',
+ title: 'Show/hide faces',
description: 'Add the options to show or hide faces.',
release: 'v1.68.0',
- tag: 'v1.68.0',
- date: new Date(2023, 6, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMerge,
- title: 'Merge Faces',
+ title: 'Merge faces',
description: 'Add the ability to merge multiple faces together.',
release: 'v1.67.0',
- tag: 'v1.67.0',
- date: new Date(2023, 6, 14),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiImage,
- title: 'Feature Photo',
+ title: 'Feature photo',
description: 'Add the option to change the feature photo for a person.',
release: 'v1.66.0',
- tag: 'v1.66.0',
- date: new Date(2023, 6, 4),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiKeyboardSettingsOutline,
- title: 'Multi-Select via SHIFT',
+ title: 'Multi-select via SHIFT',
description: 'Add the option to multi-select while holding SHIFT.',
release: 'v1.66.0',
- tag: 'v1.66.0',
- date: new Date(2023, 6, 4),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiImageMultipleOutline,
- title: 'Memories (Mobile)',
+ title: 'Memories (mobile)',
description: 'View "On this day..." memories in the mobile app.',
release: 'v1.65.0',
- tag: 'v1.65.0',
- date: new Date(2023, 5, 30),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFaceMan,
- title: 'Facial Recognition (Mobile)',
+ title: 'Facial recognition (mobile)',
description: 'View detected faces in the mobile app.',
release: 'v1.63.0',
- tag: 'v1.63.0',
- date: new Date(2023, 5, 24),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiImageMultipleOutline,
- title: 'Memories (Web)',
+ title: 'Memories (web)',
description: 'View pictures taken in past years on this day on the web.',
release: 'v1.61.0',
- tag: 'v1.61.0',
- date: new Date(2023, 5, 16),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiCollage,
- title: 'Justified Layout (Web)',
+ title: 'Justified layout (web)',
description: 'Implement justified layout (collage) on the web.',
release: 'v1.61.0',
- tag: 'v1.61.0',
- date: new Date(2023, 5, 16),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiRaw,
- title: 'RAW File Formats',
+ title: 'RAW file formats',
description: 'Support for RAW file formats.',
release: 'v1.61.0',
- tag: 'v1.61.0',
- date: new Date(2023, 5, 16),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiShareAll,
- title: 'Partner Sharing (Mobile)',
+ title: 'Partner sharing (mobile)',
description: 'View shared partner photos in the mobile app.',
release: 'v1.58.0',
- tag: 'v1.58.0',
- date: new Date(2023, 4, 28),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFile,
- title: 'XMP Sidecar',
- description: 'Attach XMP Sidecar files to assets.',
+ title: 'XMP sidecar',
+ description: 'Attach XMP sidecar files to assets.',
release: 'v1.58.0',
- tag: 'v1.58.0',
- date: new Date(2023, 4, 28),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFolder,
- title: 'Custom Storage Label',
+ title: 'Custom storage label',
description: 'Replace the user UUID in the storage template with a custom label.',
release: 'v1.57.0',
- tag: 'v1.57.0',
- date: new Date(2023, 4, 23),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiShareCircle,
- title: 'Partner Sharing',
+ title: 'Partner sharing',
description: 'Share your entire collection with another user.',
release: 'v1.56.0',
- tag: 'v1.56.0',
- date: new Date(2023, 4, 18),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFaceMan,
- title: 'Facial Recognition',
+ title: 'Facial recognition',
description: 'Detect faces in pictures and cluster them together as people, which can be named.',
release: 'v1.56.0',
- tag: 'v1.56.0',
- date: new Date(2023, 4, 18),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMap,
- title: 'Map View (Web)',
+ title: 'Map view (web)',
description: 'View a global map, with clusters of photos based on corresponding GPS data.',
release: 'v1.55.0',
- tag: 'v1.55.0',
- date: new Date(2023, 4, 9),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiDevices,
- title: 'Manage Auth Devices',
+ title: 'Manage auth devices',
description: 'Manage logged-in devices and revoke access from User Settings.',
release: 'v1.55.0',
- tag: 'v1.55.0',
- date: new Date(2023, 4, 9),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiStar,
- description: 'Reached 10K Stars on GitHub!',
title: '10,000 Stars',
+ description: 'Reached 10K stars on GitHub!',
release: 'v1.54.0',
- tag: 'v1.54.0',
- date: new Date(2023, 3, 18),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiText,
- title: 'Asset Descriptions',
+ title: 'Asset descriptions',
description: 'Save an asset description',
release: 'v1.54.0',
- tag: 'v1.54.0',
- date: new Date(2023, 3, 18),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiArchiveOutline,
title: 'Archiving',
description: 'Remove assets from the main timeline by archiving them.',
release: 'v1.54.0',
- tag: 'v1.54.0',
- date: new Date(2023, 3, 18),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiDevices,
- title: 'Responsive Web App',
+ title: 'Responsive web app',
description: 'Optimize the web app for small screen.',
release: 'v1.54.0',
- tag: 'v1.54.0',
- date: new Date(2023, 3, 18),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFileSearch,
- title: 'Search By Metadata',
+ title: 'Search by metadata',
description: 'Search images by filename, description, tagged people, make, model, and other metadata.',
release: 'v1.52.0',
- tag: 'v1.52.0',
- date: new Date(2023, 2, 29),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiImageSearch,
- title: 'CLIP Search',
+ title: 'CLIP search',
description: 'Search images with free-form text like "Sunset at the beach".',
release: 'v1.51.0',
- tag: 'v1.51.0',
- date: new Date(2023, 2, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMagnify,
- title: 'Explore Page',
+ title: 'Explore page',
description: 'View tagged places, object, and people.',
release: 'v1.51.0',
- tag: 'v1.51.0',
- date: new Date(2023, 2, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiAppleIos,
- title: 'iOS Background Uploads',
+ title: 'iOS background uploads',
description: 'Automatically backup pictures in the background on iOS.',
release: 'v1.48.0',
- tag: 'v1.48.0',
- date: new Date(2023, 1, 21),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMotionPlayOutline,
- title: 'Auto-Link Live Photos',
+ title: 'Auto-Link live photos',
description: 'Automatically link live photos, even when uploaded as separate files.',
release: 'v1.48.0',
- tag: 'v1.48.0',
- date: new Date(2023, 2, 21),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMaterialDesign,
- title: 'Material Design 3 (Mobile)',
+ title: 'Material design 3 (mobile)',
description: 'Upgrade the mobile app to Material Design 3.',
release: 'v1.47.0',
- tag: 'v1.47.0',
- date: new Date(2023, 1, 13),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiHeart,
- title: 'Favorites (Mobile)',
+ title: 'Favorites (mobile)',
description: 'Show favorites on the mobile app.',
release: 'v1.46.0',
- tag: 'v1.46.0',
- date: new Date(2023, 1, 9),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiCakeVariant,
- title: 'Immich Turns 1',
+ title: 'Immich turns 1',
description: 'Immich is officially one year old.',
release: 'v1.43.0',
- tag: 'v1.43.0',
- date: new Date(2023, 1, 3),
- dateType: DateType.DATE,
- },
- {
+ }),
+ withRelease({
icon: mdiHeart,
- title: 'Favorites Page (Web)',
+ title: 'Favorites page (web)',
description: 'Favorite and view favorites on the web.',
release: 'v1.43.0',
- tag: 'v1.43.0',
- date: new Date(2023, 0, 27),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiShareCircle,
- title: 'Public Share Links',
+ title: 'Public share links',
description: 'Share photos and albums publicly via a shared link.',
release: 'v1.41.0',
- tag: 'v1.41.1_64-dev',
- date: new Date(2023, 0, 10),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiFolder,
- title: 'User-Defined Storage Structure',
+ title: 'User-defined storage structure',
description: 'Support custom storage structures.',
release: 'v1.39.0',
- tag: 'v1.39.0_61-dev',
- date: new Date(2022, 11, 19),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiMotionPlayOutline,
- title: 'iOS Live Photos',
+ title: 'iOS live photos',
description: 'Backup and display iOS Live Photos.',
release: 'v1.36.0',
- tag: 'v1.36.0_55-dev',
- date: new Date(2022, 10, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiSecurity,
- title: 'OAuth Integration',
+ title: 'OAuth integration',
description: 'Support OAuth2 and OIDC capable identity providers.',
release: 'v1.36.0',
- tag: 'v1.36.0_55-dev',
- date: new Date(2022, 10, 20),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiWeb,
- title: 'Documentation Site',
+ title: 'Documentation site',
description: 'Release an official documentation website.',
release: 'v1.33.1',
- tag: 'v1.33.0_52-dev',
- date: new Date(2022, 9, 26),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiThemeLightDark,
- title: 'Dark Mode (Web)',
+ title: 'Dark mode (web)',
description: 'Dark mode on the web.',
release: 'v1.32.0',
- tag: 'v1.32.0_50-dev',
- date: new Date(2022, 9, 14),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiPanVertical,
- title: 'Virtual Scrollbar (Web)',
+ title: 'Virtual scrollbar (web)',
description: 'View the main timeline with a virtual scrollbar, allowing to jump to any point in time, instantly.',
release: 'v1.27.0',
- tag: 'v1.27.0_37-dev',
- date: new Date(2022, 8, 6),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiCheckAll,
- title: 'Checksum Duplication Check',
+ title: 'Checksum duplication check',
description: 'Enforce per user sha1 checksum uniqueness.',
release: 'v1.27.0',
- tag: 'v1.27.0_37-dev',
- date: new Date(2022, 8, 6),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiAndroid,
- title: 'Android Background Backup',
+ title: 'Android background backup',
description: 'Automatic backup in the background on Android.',
release: 'v1.24.0',
- tag: 'v1.24.0_34-dev',
- date: new Date(2022, 7, 19),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiAccountGroup,
- title: 'Admin Portal',
+ title: 'Admin portal',
description: 'Manage users and admin settings from the web.',
release: 'v1.10.0',
- tag: 'v1.10.0_15-dev',
- date: new Date(2022, 4, 29),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiShareCircle,
- title: 'Album Sharing',
+ title: 'Album sharing',
description: 'Share albums with other users.',
release: 'v1.7.0',
- tag: 'v1.7.0_11-dev ',
- date: new Date(2022, 3, 24),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiTag,
- title: 'Image Tagging',
+ title: 'Image tagging',
description: 'Tag images with custom values.',
release: 'v1.7.0',
- tag: 'v1.7.0_11-dev ',
- date: new Date(2022, 3, 24),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiImage,
- title: 'View Exif',
+ title: 'View exif',
description: 'View metadata about assets.',
release: 'v1.3.0',
- tag: 'v1.3.0-dev ',
- date: new Date(2022, 2, 22),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiCheckboxMarked,
- title: 'Multi Select',
+ title: 'Multi select',
description: 'Select and execute actions on multiple assets at the same time.',
release: 'v1.2.0',
- tag: 'v0.2-dev ',
- date: new Date(2022, 1, 8),
- dateType: DateType.RELEASE,
- },
- {
+ }),
+ withRelease({
icon: mdiVideo,
- title: 'Video Player',
+ title: 'Video player',
description: 'Play videos in the web and on mobile.',
release: 'v1.2.0',
- tag: 'v0.2-dev ',
- date: new Date(2022, 1, 8),
- dateType: DateType.RELEASE,
- },
+ }),
{
icon: mdiPartyPopper,
- title: 'First Commit',
+ title: 'First commit',
description: 'First commit on GitHub, Immich is born.',
- release: 'v1.0.0',
- date: new Date(2022, 1, 3),
- dateType: DateType.DATE,
+ getDateLabel: withLanguage(new Date(2022, 1, 3)),
},
];
@@ -715,14 +677,13 @@ export default function MilestonePage(): JSX.Element {
- Major Milestones
+ Roadmap
- A list of project achievements and milestones,
- by release date.
+ A list of future plans and goals, as well as past achievements and milestones.
-
+
diff --git a/docs/static/_redirects b/docs/static/_redirects
index 8b02fe11b9..df45fc95e8 100644
--- a/docs/static/_redirects
+++ b/docs/static/_redirects
@@ -28,3 +28,4 @@
/docs/features/search /docs/features/smart-search 301
/docs/guides/api-album-sync /docs/community-projects 301
/docs/guides/remove-offline-files /docs/community-projects 301
+/milestones /roadmap 301