ShipShipShip is a free, open source publishing project written in Svelte and released under Apache-2.0. It has 299 GitHub stars, 16 forks and 10 open issues, and was last pushed 7 months ago. On this registry it ranks #45 of 46 tracked projects in Publishing, with 5 head-to-head comparisons available.

What is ShipShipShip?

ShipShipShip is an open-source, self-hostable changelog and roadmap web application that lets product teams publish release notes, run a public roadmap, and gather community feedback through voting on proposed features.

What it is

ShipShipShip is a web application made of two parts: a Go 1.21 backend built on Gin, SQLite and GORM, and a SvelteKit 2 / Svelte 5 admin panel that uses TailwindCSS, shadcn-svelte and the TipTap editor. It ships as a single Docker image for both AMD64 and ARM64, so the same artifact runs on a laptop, a small VPS or an ARM-based server. The project is licensed under Apache-2.0, carries roughly 299 stars and 16 forks on GitHub, and was last pushed in February 2026.

The concrete problem it solves is tool sprawl around shipping. Teams typically keep release notes in one place, feature requests in another, and the newsletter in a third, with no shared notion of what has shipped and what is planned. ShipShipShip puts events (changelog entries), a voting system for proposed features, and an automated newsletter into one install with one database. It replaces the combination of a separate changelog site, a separate feedback board and a separate mailing workflow, and it does so on infrastructure the team controls, with the data held in a local SQLite database at DB_PATH rather than in a vendor account.

Key capabilities

  • Rich event management with the TipTap editor, markdown support, tags and media uploads for changelog entries.
  • Emoji reactions with eight types (👍❤️🔥🎉👀💡🤔👎) collected directly on published events.
  • A voting system that lets community members vote on proposed features before they are built.
  • A drag-and-drop kanban board with customizable statuses for moving roadmap items through delivery.
  • A theme system where themes are installed through /admin/customization/theme with manifest-based configuration, and event statuses are mapped to theme categories.
  • Newsletter automation that sends email when events change status, using customizable email templates and SMTP configuration for Gmail, Outlook, SendGrid and similar providers.
  • A complete RESTful API for integrations, alongside the full-featured SvelteKit admin dashboard.

Who uses it and how

  • Small product teams that want a public changelog plus voting without paying for a hosted board, and who already have a server or VPS to deploy a single Docker container on.
  • Open-source maintainers who need release notes and a roadmap that live next to the rest of their project infrastructure and can be themed to match an existing site.
  • Teams running a release-driven workflow where moving an event to a status such as "Released" triggers an automated newsletter to subscribers.
  • Developers integrating changelog or roadmap data into other systems, using the RESTful API rather than the admin panel.
  • Self-hosters who want the community-facing surface separated from the admin surface, with the public changelog served at the root URL only after a theme is installed and statuses are mapped.

Getting started

The README recommends Docker: run nelkinsky/shipshipship:latest with ADMIN_USERNAME, ADMIN_PASSWORD, JWT_SECRET and BASE_URL set, then visit /admin on port 8080 to complete setup. A Docker Compose file is provided as an equivalent path, and local development is done by cloning the repository and running ./start-dev.sh.

How it compares

No comparable product is named in the facts supplied for this entry, so the page states plainly that ShipShipShip stands alone in this registry on the changelog and roadmap axis.

When to use it — and when not to

A self-hoster has to operate the container, provide persistent storage for the SQLite database, and configure SMTP before newsletter automation works; teams that need a clustered database or a horizontally scaled deployment have no documented path here. The configuration table also lists ADMIN_PASSWORD as admin and JWT_SECRET as your-secret-key-change-in-production by default, so those values must be replaced before any instance is exposed. It is a poor fit for teams that want a fully managed service with no operational work, and for anyone who needs a public changelog running immediately, since the root URL shows the admin interface until a theme is installed and statuses are mapped.

project readme (upstream, from github) — read inline

🚢 ShipShipShip

A modern, self-hostable changelog and roadmap platform with emoji reactions, custom themes, and automated newsletters.

License Go Version Node Version Docker

SSSBanner

🔗 Links

✨ Features

  • 📋 Rich Event Management - TipTap editor with markdown support, tags, and media uploads
  • 😊 Emoji Reactions - 8 reaction types (👍❤️🔥🎉👀💡🤔👎) for community feedback
  • 🗳️ Voting System - Let users vote on proposed features
  • 📊 Kanban Board - Drag-and-drop interface with customizable statuses
  • 🎨 Theme System - Install custom themes with manifest-based configuration
  • 📧 Newsletter Automation - Auto-send emails when events change status
  • 📮 Email Templates - Customizable templates for different event types
  • 🔧 Admin Dashboard - Full-featured SvelteKit admin panel
  • 🔌 RESTful API - Complete API for integrations

🏗️ Tech Stack

Admin: SvelteKit 2 · Svelte 5 · TailwindCSS · shadcn-svelte · TipTap
Backend: Go 1.21 · Gin · SQLite · GORM
Deploy: Docker (AMD64 & ARM64)

🚀 Quick Start

🔑 Admin Panel: /admin Visit http://localhost:8080/admin (or https://your-domain/admin) right after installation to complete setup.

Docker (Recommended)

docker run -d \
  -p 8080:8080 \
  -e ADMIN_USERNAME=admin \
  -e ADMIN_PASSWORD=changeme \
  -e JWT_SECRET=your-secret-key \
  -e BASE_URL=https://changelog.yourdomain.com \
  -v shipshipship_data:/app/data \
  nelkinsky/shipshipship:latest

🔑 Admin Panel: http://localhost:8080/admin

Docker Compose

version: "3.8"
services:
  shipshipship:
    image: nelkinsky/shipshipship:latest
    ports:
      - "8080:8080"
    environment:
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=changeme
      - JWT_SECRET=your-secret-key
      - BASE_URL=https://changelog.yourdomain.com
      - GIN_MODE=release
    volumes:
      - shipshipship_data:/app/data
    restart: unless-stopped

volumes:
  shipshipship_data:

🔑 Admin Panel: http://localhost:8080/admin

Local Development

git clone https://github.com/GauthierNelkinsky/ShipShipShip.git
cd ShipShipShip

# Start backend + admin dev server
./start-dev.sh

# Or backend only
./quick-start.sh

Dev URLs:

⚙️ Configuration

Variable Default Description
ADMIN_USERNAME admin Admin username
ADMIN_PASSWORD admin Admin password
JWT_SECRET your-secret-key-change-in-production JWT signing key
BASE_URL (auto-detected) Base URL of your instance (e.g., https://changelog.yourdomain.com) - used for email unsubscribe links
PORT 8080 Server port
GIN_MODE debug debug or release
DB_PATH ./data/changelog.db Database path

🎨 Theme System

ShipShipShip separates the admin interface from the public-facing changelog through installable themes:

  1. Install Theme: Upload via /admin/customization/theme
  2. Configure: Customize theme settings (colors, layout, etc.)
  3. Map Statuses: Connect your event statuses to theme categories
  4. Publish: Your themed changelog appears at the root URL

Without a theme, the root URL shows the admin interface for initial setup.

📧 Newsletter Setup

  1. Go to /admin/newsletter/settings
  2. Configure SMTP settings (Gmail, Outlook, SendGrid, etc.)
  3. Test configuration
  4. Enable automation for status-based triggers
  5. Customize email templates

Automation: Automatically send newsletters when events move to specific statuses (e.g., "Released").

🛠️ Development

# Full dev mode (hot reload)
./start-dev.sh

# Rebuild everything
./start-dev.sh --rebuild

# Backend only
./quick-start.sh

Project Structure

admin/              # SvelteKit admin panel (SPA)
  ├── src/routes/admin/
  │   ├── events/          # Kanban board
  │   ├── newsletter/      # Email management
  │   └── customization/   # Themes & branding
  └── build/        # Static output (served by backend)

backend/            # Go API server
  ├── handlers/     # API endpoints
  ├── models/       # Database models
  ├── services/     # Business logic (email, automation)
  └── main.go       # Server entry point

data/               # SQLite + uploads + themes

📖 API Examples

Public:

# Get public events
curl http://localhost:8080/api/events

# Add reaction
curl -X POST http://localhost:8080/api/events/1/reactions \
  -H "Content-Type: application/json" \
  -d '{"reaction_type":"thumbs_up"}'

# Subscribe to newsletter
curl -X POST http://localhost:8080/api/newsletter/subscribe \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]"}'

Admin (requires JWT):

# Create event
curl -X POST http://localhost:8080/api/admin/events \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"New Feature","status":"Proposed","content":"..."}'

🤝 Contributing

Contributions welcome! Fork the repo, create a feature branch, and submit a PR.

📝 License

Apache 2.0 - see LICENSE

💬 Support


Built with ❤️ and shipped with ShipShipShip 🚢

Frequently asked questions

Is ShipShipShip free to use?

ShipShipShip is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does ShipShipShip do?

Open-source changelog & roadmap platform for teams

What is ShipShipShip written in?

ShipShipShip is primarily written in Svelte. Its source is publicly available at https://github.com/gauthiernelkinsky/shipshipship, and it has 299 GitHub stars.