Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0c8e71f
feat(marketing): add changelog page
Kitenite Jan 27, 2026
841c66f
refactor(marketing): update changelog to Linear-style inline layout
Kitenite Jan 27, 2026
34cc47f
feat(marketing): add sticky timeline navigation to changelog
Kitenite Jan 27, 2026
9513728
fix(marketing): align timeline dots on the gridline
Kitenite Jan 27, 2026
677f99e
fix(marketing): fix sticky timeline with proper flexbox layout
Kitenite Jan 27, 2026
3726655
style(marketing): change timeline indicator to orange vertical line
Kitenite Jan 27, 2026
9c13dad
style(marketing): remove duplicate date from changelog entries
Kitenite Jan 27, 2026
e967ea5
style(marketing): align timeline date with entry title
Kitenite Jan 27, 2026
0a8c25d
style(marketing): increase timeline top offset for title alignment
Kitenite Jan 27, 2026
48348f0
Add PR urls
Kitenite Jan 27, 2026
59b0736
refactor(marketing): extract changelog PR link styling to custom MDX …
Kitenite Jan 27, 2026
c88de0b
feat(marketing): add PRBadge component and update all changelogs
Kitenite Jan 27, 2026
d185095
docs(marketing): update changelog content from PR release notes
Kitenite Jan 27, 2026
351843c
Add images
Kitenite Jan 28, 2026
dc5671e
refactor(marketing): rename changelog files to match content
Kitenite Jan 28, 2026
c03630d
feat(marketing): use docs image for terminal tab changelog, add inlin…
Kitenite Jan 28, 2026
45d0daf
feat(marketing): add ghostty image for Ghostty section
Kitenite Jan 28, 2026
97d549c
feat(marketing): use ghostty as featured image for terminal tab chang…
Kitenite Jan 28, 2026
76d2d3b
style(marketing): crop 10% from bottom of ghostty image
Kitenite Jan 28, 2026
5452833
style(marketing): allow featured images to display at full width and …
Kitenite Jan 28, 2026
48f72b8
fix(marketing): prevent horizontal scroll on changelog entry page
Kitenite Jan 28, 2026
b623f69
fix(marketing): add overflow-hidden to GridCross component
Kitenite Jan 28, 2026
55a8118
merge: resolve conflict keeping changelog and blog nav links
Kitenite Jan 28, 2026
7aae212
fix(marketing): fix lint issues and remove blog from header nav
Kitenite Jan 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
title: Resizable sidebar, multiple terminal tabs, and port visibility
date: 2025-12-16
image: /changelog/terminal.png
---

## VS Code-Style Resizable Sidebar <PRBadge url="https://github.com/superset-sh/superset/pull/457" />

- Replace percentage-based panels with a custom `ResizableSidebar` component
- Use pixel-based widths (250px default, 200-500px range) for consistent sizing
- Implement drag-to-resize with mouse events like VS Code
- Add wider invisible drag handle (12px) for easier resize targeting while keeping thin visible indicator

## Multiple Terminal Tabs <PRBadge url="https://github.com/superset-sh/superset/pull/452" />

Fixed a regression that prevented creating new terminal tabs. The "New Terminal" button now creates new tabs again instead of just activating existing ones. Multiple tabs can be created per workspace for parallel workflows.

## Port Visibility <PRBadge url="https://github.com/superset-sh/superset/pull/462" />

![Ports panel](/changelog/ports.png)

- Auto-detects listening ports from terminal output and verifies activity before showing
- New Ports panel in the sidebar showing ports grouped by workspace with quick actions (open in browser, jump to pane)
- Real-time updates via subscriptions so the list stays current as ports appear/disappear
- Cleans up port entries when terminal panes close to avoid stale items

## Multi-line URL Links <PRBadge url="https://github.com/superset-sh/superset/pull/467" />

- Extract multi-line spanning logic into a shared `MultiLineLinkProvider` base class
- Create `UrlLinkProvider` that supports URLs spanning wrapped terminal lines
- Replace `WebLinksAddon` with the new custom provider for consistent multi-line handling
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
title: SQLite database, Sentry tracking, and Features section
date: 2025-12-23
image: /changelog/docs.png
---

## SQLite Local Database <PRBadge url="https://github.com/superset-sh/superset/pull/477" />

- Desktop app now uses a local SQLite-backed database with automatic migration from the legacy JSON store
- Adds `@superset/local-db` package with Drizzle ORM schema for SQLite
- Migrates all database operations from lowdb (db.json) to SQLite using better-sqlite3
- UUID defaults for all ID fields (prep for local-first architecture)

## Sentry Error Tracking <PRBadge url="https://github.com/superset-sh/superset/pull/484" />

- Added error tracking and monitoring to the desktop application for improved stability reporting
- Add Sentry integration for main and renderer processes
- Add tRPC middleware to automatically capture all backend errors with proper context (path, type, code)
- Added developer testing tools to validate error reporting functionality

## Features and FAQ Sections <PRBadge url="https://github.com/superset-sh/superset/pull/472" />

- Add Features section with alternating text/image layout showcasing Parallel Agents, Universal CLI Support, and Git Worktree Integration
- Add FAQ section with two-column layout and smooth accordion animations
- Custom accordion with plus icon (rotates to X when open)
- Multiple interactive demos (file/diff, IDE file-tree, terminal, compatibility, parallel execution)
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
title: Electric SQL sync, Linear integration, and required updates
date: 2025-12-30
image: /changelog/integrations.png
---

## Electric SQL Sync <PRBadge url="https://github.com/superset-sh/superset/pull/511" />

- Added task management UI with create, edit, and status tracking capabilities
- Implemented organization switching and multi-organization support
- Introduced local-first synchronization for tasks data via Electric SQL
- Bidirectional task updates that sync back to Linear via API

## Linear Integration <PRBadge url="https://github.com/superset-sh/superset/pull/503" />

- Added Linear integration with OAuth-based connection flow
- New integrations management page to connect and configure third-party services
- Task synchronization between Linear and local system with priority and team configuration
- Real-time sync from Linear via webhook

## Required Updates <PRBadge url="https://github.com/superset-sh/superset/pull/552" />

- Desktop app enforces a minimum required version via a remote endpoint
- New "Update Required" screen guides blocked users to check, download, or install updates
- App exposes its current version to the UI so version comparisons are accurate
- Fail-open behavior when API is unreachable, re-checks when network comes back online

## Confirm on Quit <PRBadge url="https://github.com/superset-sh/superset/pull/524" />

- Added a "Behavior" section in Settings with a "Confirm before quitting" toggle (defaults to enabled)
- App now shows a quit confirmation dialog when enabled and respects the toggle across restarts
- Update/install flows and programmatic quits can skip the confirmation to avoid blocking updates
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
title: Sidebar overhaul, workspaces page, and workspace status indicators
date: 2026-01-06
image: /changelog/branches.png
---

## Sidebar Overhaul <PRBadge url="https://github.com/superset-sh/superset/pull/601" />

- GitHub avatar support in project thumbnails
- Collapsible workspace sidebar with icon-only compact mode and improved toggle/collapse behavior
- Richer project headers and compact thumbnails
- Updated sidebar/list item layouts, icons, spacing, and sizing across many panels

## Workspaces Page <PRBadge url="https://github.com/superset-sh/superset/pull/599" />

- Added a searchable, filterable workspaces list view with grouped project headers and per-workspace rows
- New workspace row UI showing status, diffs, timestamps, and reopen/opening states
- Project headers now offer a context menu: Open in Finder, Project Settings, Close Project
- Workspace sidebar header is now a clickable toggle and the workspaces list auto-closes on selection

## Workspace Status Indicators <PRBadge url="https://github.com/superset-sh/superset/pull/588" />

- Add 3-color workspace status indicators showing agent lifecycle (amber=working, red=permission needed, green=ready for review)
- Integrate with Claude Code hooks and OpenCode plugin for real-time status updates
- Click behavior: review → idle (acknowledged), permission → working (assumes permission granted)

## PR Status in Changes View <PRBadge url="https://github.com/superset-sh/superset/pull/608" />

Add a PR status indicator (icon + number) to the Changes view header that links to GitHub. Color-coded PR icons based on state (green for open, violet for merged, red for closed, muted for draft).
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
title: Task list view, diff scrollbar highlights, and shell environment fix
date: 2026-01-13
image: /changelog/task-list.png
---

## Task List View <PRBadge url="https://github.com/superset-sh/superset/pull/717" />

- Added semantic search capabilities for tasks using embeddings
- Introduced dedicated task status management system with custom workflows
- Redesigned tasks interface with table-based view and improved organization
- Enhanced task filtering and sorting by status, priority, and assignee

## Diff Highlights in Scrollbar <PRBadge url="https://github.com/superset-sh/superset/pull/725" />

Enable Monaco's overview ruler in the diff viewer to show colored markers in the scrollbar. Additions (green) and deletions (red) are now visible in the scrollbar for quick navigation.

## Shell Environment Fix <PRBadge url="https://github.com/superset-sh/superset/pull/720" />

- App now captures and applies the user's shell environment on macOS/Linux during startup
- Terminal-related settings (like PATH and ZDOTDIR) are now available when launching from Finder/Spotlight
- Improved handling and merging of PATH entries to prevent terminal initialization issues

## Scroll to Bottom Button <PRBadge url="https://github.com/superset-sh/superset/pull/700" />

Add a floating scroll-to-bottom button that appears when the terminal is scrolled up. Button uses a chevron icon and animates in/out smoothly. Shows keyboard shortcut in tooltip when available.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
title: Expanded changes view, organization settings, and diff improvements
date: 2026-01-20
image: /changelog/changes.png
---

## Expanded Changes Sidebar <PRBadge url="https://github.com/superset-sh/superset/pull/858" />

- New workspace layout with a resizable sidebar and improved expand/collapse behavior
- Main content switches cleanly between tab view and changes view
- Added a placeholder "changes" view for upcoming code-review support

## Organization Settings <PRBadge url="https://github.com/superset-sh/superset/pull/820" />

- Desktop: pick an image file to set organization logo (preview + upload)
- Organization settings: edit name, manage slug with live availability checks (owner-only)
- Members: invite, view, sort, and manage organization members with role-aware actions
- Settings navigation reorganized from team-centric to separate Organization and Members sections

## Diff View Improvements <PRBadge url="https://github.com/superset-sh/superset/pull/845" />

- Added ability to toggle visibility of unchanged regions in the diff viewer
- Users can now hide unchanged lines to focus on actual changes, improving readability of large diffs
- New toggle button added to the file viewer toolbar with visual state indication

## Middle-Click to Close Tabs <PRBadge url="https://github.com/superset-sh/superset/pull/853" />

Added middle-click support for tabs—users can now close a tab by middle-clicking on it for quicker navigation. Matches standard browser tab behavior.
23 changes: 23 additions & 0 deletions apps/marketing/content/changelog/2026-01-27-terminal-tab.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
title: Terminal tab arrangement, docs support, and Ghostty
date: 2026-01-27
image: /changelog/ghostty.png
---

## Terminal Tab Arrangement <PRBadge url="https://github.com/superset-sh/superset/pull/980" />

- Enable drag-and-drop tab reordering for improved workspace organization
- Display keyboard navigation hints in tooltips for adjacent tabs
- Auto-generate branch names from workspace titles when creating workspaces

## Docs and Blog Support <PRBadge url="https://github.com/superset-sh/superset/pull/974" />

- Refactor docs sidebar with simplified section/item structure
- Update navigation bar logo to link to marketing URL
- Add dotenv for loading env vars during development
- Add overscroll-none to prevent pull-to-refresh behavior
- Fix marketing redirect to use env var for docs URL

## Ghostty Terminal Support <PRBadge url="https://github.com/superset-sh/superset/pull/950" />

Added Ghostty application integration to the desktop application's file opening capabilities. Users can now select Ghostty from the list of available applications when using the "Open In" functionality to open files with their preferred terminal application.
Binary file added apps/marketing/public/changelog/agents.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/branches.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/changes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/docs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/ghostty.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/integrations.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/open-in.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/ports.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/task-list.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/marketing/public/changelog/terminal.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export function GridCross({ className }: { className?: string }) {
return (
<div className={`absolute ${className}`}>
<div className={`absolute overflow-hidden ${className}`}>
<div className="absolute -translate-x-1/2 -translate-y-1/2 w-px h-4 bg-border" />
<div className="absolute -translate-x-1/2 -translate-y-1/2 w-4 h-px bg-border" />
</div>
Expand Down
46 changes: 46 additions & 0 deletions apps/marketing/src/app/changelog.xml/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { COMPANY } from "@superset/shared/constants";
import { getChangelogEntries } from "@/lib/changelog";

export async function GET() {
const entries = getChangelogEntries();
const baseUrl = COMPANY.MARKETING_URL;

const escapeXml = (str: string) =>
str
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&apos;");

const rss = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Superset Changelog</title>
<link>${baseUrl}/changelog</link>
<description>The latest updates, improvements, and new features in Superset.</description>
<language>en-us</language>
<lastBuildDate>${new Date().toUTCString()}</lastBuildDate>
<atom:link href="${baseUrl}/changelog.xml" rel="self" type="application/rss+xml"/>
${entries
.map(
(entry) => `
<item>
<title>${escapeXml(entry.title)}</title>
<link>${baseUrl}/changelog/${entry.slug}</link>
<description>${escapeXml(entry.description || "")}</description>
<pubDate>${new Date(entry.date).toUTCString()}</pubDate>
<guid isPermaLink="true">${baseUrl}/changelog/${entry.slug}</guid>
</item>`,
)
.join("")}
</channel>
</rss>`;

return new Response(rss, {
headers: {
"Content-Type": "application/xml",
"Cache-Control": "public, max-age=3600, s-maxage=3600",
},
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
"use client";

import { ArrowLeft } from "lucide-react";
import Link from "next/link";
import type { ReactNode } from "react";
import { GridCross } from "@/app/blog/components/GridCross";
import {
type ChangelogEntry,
formatChangelogDate,
} from "@/lib/changelog-utils";

interface ChangelogEntryLayoutProps {
entry: ChangelogEntry;
children: ReactNode;
}

export function ChangelogEntryLayout({
entry,
children,
}: ChangelogEntryLayoutProps) {
const formattedDate = formatChangelogDate(entry.date);

return (
<article className="relative min-h-screen">
{/* Grid background with dashed lines */}
<div
className="absolute inset-0 pointer-events-none"
style={{
backgroundImage: `
linear-gradient(to right, transparent 0%, transparent calc(50% - 384px), rgba(255,255,255,0.06) calc(50% - 384px), rgba(255,255,255,0.06) calc(50% - 383px), transparent calc(50% - 383px), transparent calc(50% + 383px), rgba(255,255,255,0.06) calc(50% + 383px), rgba(255,255,255,0.06) calc(50% + 384px), transparent calc(50% + 384px))
`,
}}
/>

{/* Hero header */}
<header className="relative border-b border-border">
<div className="max-w-3xl mx-auto px-6 pt-16 pb-10 md:pt-20 md:pb-12">
{/* Grid crosses */}
<GridCross className="top-0 left-0" />
<GridCross className="top-0 right-0" />

<div className="text-center">
<time
dateTime={entry.date}
className="text-sm font-mono text-muted-foreground uppercase tracking-wider"
>
{formattedDate}
</time>

<h1 className="text-3xl md:text-4xl lg:text-5xl font-medium tracking-tight text-foreground mt-4 mb-4">
{entry.title}
</h1>

{entry.description && (
<p className="text-base md:text-lg text-muted-foreground max-w-2xl mx-auto">
{entry.description}
</p>
)}
</div>
</div>

{/* Bottom crosses */}
<div className="max-w-3xl mx-auto px-6 relative">
<GridCross className="bottom-0 left-0" />
<GridCross className="bottom-0 right-0" />
</div>
</header>

{/* Back link section */}
<div className="relative border-b border-border">
<div className="max-w-3xl mx-auto px-6 py-4">
<Link
href="/changelog"
className="inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors"
>
<ArrowLeft className="h-4 w-4" />
Back to Changelog
</Link>
</div>
</div>

{/* Featured image */}
{entry.image && (
<div className="relative max-w-3xl mx-auto px-6 pt-12">
<div className="relative overflow-hidden border border-border">
{/* biome-ignore lint/performance/noImgElement: Need native img for natural dimensions */}
<img
src={entry.image}
alt={entry.title}
className="w-full h-auto"
/>
</div>
</div>
)}

{/* Content */}
<div className="relative max-w-3xl mx-auto px-6 py-12">
<div className="prose max-w-none">{children}</div>
</div>

{/* Footer */}
<footer className="relative border-t border-border">
<div className="max-w-3xl mx-auto px-6 relative">
<GridCross className="top-0 left-0" />
<GridCross className="top-0 right-0" />
</div>
<div className="max-w-3xl mx-auto px-6 py-10">
<Link
href="/changelog"
className="inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors"
>
<ArrowLeft className="h-4 w-4" />
All updates
</Link>
</div>
</footer>
</article>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { ChangelogEntryLayout } from "./ChangelogEntryLayout";
Loading