SwissKit
SwissKit is a modular desktop toolbox built with JavaFX. It bundles a growing collection of utility tools — Excel splitting, PDF processing, email, an AI chat assistant, developer helpers, and more — into a single application with a modern JavaFX New UI and a plugin-based architecture.
A lightweight, fast, and customizable desktop utility suite with automatic service discovery, making it easy to add new functionality either as built-in tools or as drop-in plugins.
Quick Start
Requirements:
- JDK 21 or higher (recommended: Eclipse Temurin)
- Maven 3.6 or higher
Build from Source
The project uses standalone POMs (no parent inheritance), so the API module must be installed first:
# Clone the repository
git clone https://github.com/MuskStark/SwissKitJ.git
cd SwissKitJ
# 1. Install the API module into the local repo (required)
mvn install -f SwissKitJ-Api/pom.xml -DskipTests
# 2. Build the application
mvn clean package -f SwissKit/pom.xml -DskipTests
# 3. Run
java -jar SwissKit/target/SwissKitJ-3.2.0.jar
Download a Prebuilt Release
Prebuilt packages are published with each release. Every platform ships two variants:
| Variant | Contains |
|---|---|
*-x64.zip / *-arm64.zip |
Application only — a system Java 21+ is required |
*-x64-jre.zip / *-arm64-jre.zip |
Application bundled with a JRE — no separate Java install needed |
| Platform | Files |
|---|---|
| Windows 10/11 (64-bit) | SwissKitJ-3.2.0-windows-x64.zip, SwissKitJ-3.2.0-windows-x64-jre.zip |
| Linux x64 | SwissKitJ-3.2.0-linux-x64.zip, SwissKitJ-3.2.0-linux-x64-jre.zip |
| macOS Apple Silicon (M-series) | SwissKitJ-3.2.0-macos-arm64.zip, SwissKitJ-3.2.0-macos-arm64-jre.zip |
See the Releases page for the latest builds.
Features
- Modern New UI — JetBrains IDEA 2025 New UI aesthetic with token-based dark/light themes, native OS window chrome, MDI icon glyphs, and a collapsible sidebar
- Modular Architecture — Plugin-based design with Java ServiceLoader auto-discovery for external JARs plus a built-in tool registrar for packaged tools
- AI Chat Assistant — Multi-backend chat with local GGUF models (inference engine included), OpenAI-compatible cloud APIs, and Anthropic Claude; supports streaming and tool calling
- AI Tool Calling — Plugins expose
AiTools that the assistant can invoke to act on your data (Excel operations, email archive queries, PDF split/merge/convert, browser automation, and more) - High Performance — Streaming Excel processing via Apache FESOD, low memory footprint
- Browser Automation — Headless-style browser session tool drivable by the AI assistant
- Plugin Store — Browse and install plugins from an online store with one click, or install local JARs
- Database Support — H2 + MyBatis for persistent storage of settings, contacts, and history
- Internationalization — i18n-backed UI labels and sidebar navigation
- Easy Extension — Add new tools by implementing the
SwissKitJPlugininterface
Built-in Tools
AI Chat (OTHER)
- Multi-backend: local GGUF inference, OpenAI-compatible, Anthropic Claude
- Streaming responses and tool calling
- Plugin-provided tools auto-registered with the assistant
Excel Splitter (DEV)
- 4-Step Wizard — Select file → Choose split mode → Configure → Output
- Split by Sheet — One output file per selected sheet
- Split by Column — Group rows by unique column value
- Complex Split Mode — Multi-config splitting with saved configurations
- Progress Tracking — Real-time progress with streaming (low memory usage)
PDF Tools (OTHER)
- PDF Split — Extract page ranges into separate files
- PDF Merge — Combine multiple PDFs into one
- PDF → DOCX — Convert PDF documents to editable Word files
Email (OTHER)
- Email Composition — Subject and body with plain-text/HTML toggle
- Recipient Management — Multiple recipients, CC/BCC support
- Mass Email — Send to contacts filtered by tags
- Attachment by Tag — Attach files from tag-based folder selection
- SMTP Integration — Full SMTP support with TLS/SSL
- Sent Log — View history of sent emails with status tracking
Email Archive (OTHER)
- Fetch and archive email messages from configured accounts
- Query archived emails (also exposed as an AI tool)
Browser Automation (NET)
- Drives a browser session through a sequence of actions
- Page snapshot inspection; AI-callable automation tool
Color Converter (IMAGE)
- Convert between color formats (HEX, RGB, HSL, etc.)
Markdown Editor (TEXT)
- Edit and preview Markdown
Developer Tools (DEV)
- JSON Formatter — Pretty-print and validate JSON
- Base64 — Encode/decode Base64
- Hash Calculator — Compute common hash digests
Settings
- Email Server — SMTP configuration with TLS/SSL
- Address Book — Manage contacts with nicknames; double-click to edit
- Tag Management — Create and manage tags for contacts
- AI Configuration — Choose mode (local/OpenAI/Anthropic), endpoints, API keys, models
- Plugin Store URL — Configure the online plugin store endpoint
Architecture
Project Modules
SwissKit uses a multi-module Maven structure with standalone POMs (no parent inheritance):
| Module | Purpose |
|---|---|
SwissKitJ-Api |
Shared plugin contract + reusable UI components (SwissKitJPlugin, AiTool, StepWizard, ToolCategory) |
SwissKit |
Main JavaFX application — UI shell, plugin loading, built-in tools, AI layer, database |
UI Structure
MainWindow (StageStyle.DECORATED)
├── Sidebar — Collapsible category navigation (all / text / image / dev / net / other + AI chat, plugins)
├── ContentArea — ToolCard grid or active tool view
└── DetailPanel — Slide-in panel with plugin metadata + Launch button
Sidebar categories are defined by the ToolCategory enum: DEV, TEXT, IMAGE, NET, OTHER.
The AI Chat assistant and installed-plugins list are pinned as dedicated sidebar sections.
Plugin System
Plugins implement fan.summer.api.SwissKitJPlugin (from SwissKitJ-Api):
public interface SwissKitJPlugin {
// Metadata
String getId(); // reverse-domain ID, e.g. "com.example.my-tool"
String getName();
String getDescription();
ToolCategory getCategory(); // DEV / TEXT / IMAGE / NET / OTHER
String getVersion();
String getMdiIcon(); // Material Design Icons name, e.g. "file-excel"
default IconStyle getIconStyle() { return IconStyle.BLUE; }
default ToolType getType() { return ToolType.PLUGIN; } // BUILTIN vs PLUGIN
// UI lifecycle — createView() is called once and cached
Node createView();
default void onActivate() {}
default void onDeactivate() {}
default void onUnload() {}
default boolean hasRunningTasks() { return false; } // keep alive in background
default void onBackground() {}
default void onForeground() {}
// AI integration — tools the assistant can call
default List<AiTool> aiTools() { return List.of(); }
}
Register external plugins via META-INF/services/fan.summer.api.SwissKitJPlugin, package as a fat
JAR, then drop it into the host's plugins/ directory (hot-reload supported) or install via the
Plugin Store.
Built-in Tool Registration
Built-in tools (packaged with the main app) bypass SPI and are registered programmatically via
BuiltinToolRegistrar during startup:
BuiltinToolRegistrar.register(loader, registry);
The current registrar registers: AI Chat, JSON Formatter, Base64, Hash Calculator, Excel Splitter, Color Converter, Markdown Editor, Email, Email Archive, PDF Tools, and Browser Automation.
Tech Stack
| Category | Technology | Version |
|---|---|---|
| Language | Java | 21 |
| Build Tool | Maven | 3.6+ |
| UI Framework | JavaFX | 21.0.2 |
| Theming | Custom CSS (token-based New UI) + MDI icon glyphs | — |
| Excel Processing | Apache FESOD / Apache POI | 2.0.1-incubating / 5.4.1 |
| PDF Processing | Apache PDFBox | 3.0.4 |
| AI — Cloud | LangChain4j (OpenAI + Anthropic) | 1.2.0 |
| AI — Local | Built-in GGUF inference engine | — |
| Database | H2 + MyBatis | 2.4.240 / 3.5.19 |
| Logging | SLF4J + Logback | 2.0.13 / 1.5.6 |
| Simple Java Mail | 8.12.6 | |
| Serialization | Gson | 2.13.1 |
Development
Adding a Built-in Tool
- Create a class implementing
SwissKitJPluginunderSwissKit/src/main/java/fan/summer/buildintool/<your-tool>/ - Instantiate and add it inside
BuiltinToolRegistrar.register(...) - The tool appears in the sidebar under its
ToolCategory
Creating an External Plugin
- Create a Maven project with
SwissKitJ-Apias aprovideddependency - Implement
SwissKitJPlugin(optionally exposeAiTools) - Register in
META-INF/services/fan.summer.api.SwissKitJPlugin - Package as a fat JAR and install via the Plugin Store or the Local Install tab
Building
# API module must be installed first
mvn install -f SwissKitJ-Api/pom.xml -DskipTests
# Build the app
mvn clean package -f SwissKit/pom.xml -DskipTests
# Run
java -jar SwissKit/target/SwissKitJ-3.2.0.jar
Running with a Local Plugin Store
Override the store URL via system property:
java -Dstore.url=http://localhost:8888/plugins/store.json -jar SwissKit/target/SwissKitJ-3.2.0.jar
Database
SwissKit uses an embedded H2 file-based database — no external server required.
Location
.swisskit/swisskit.db relative to the application runtime directory.
Key Entities
| Area | Entity / Mapper | Purpose |
|---|---|---|
| General | AppSettingEntity |
General app settings (store URL, AI config, etc.) |
| General | MenuOrderEntity |
Sidebar / tool menu ordering |
| General | PluginFavoriteEntity |
Favorited plugins |
swiss_kit_setting_email |
SMTP configuration | |
email_address_book |
Contacts with nicknames and tags | |
email_tag |
Tags for categorizing contacts | |
email_mass_sent_config |
Mass email configuration | |
email_sent_log |
Email sending history | |
| Excel | complex_split_config |
Excel complex split configurations |
Roadmap
- Excel file analysis and split by sheet / column / complex mode
- Email address book, tag management, and SMTP sending
- Mass email with tag-based recipients + sent log
- Plugin Store with online + local installation
- JavaFX UI redesign (New UI, token-based theming)
- Multi-backend AI chat (local GGUF + OpenAI-compatible + Anthropic)
- AI tool calling across plugins
- PDF processing (split / merge / convert)
- Browser automation tool
- Internationalization (i18n)
- Image processing toolset (expansion)
- Theme switching (dark/light, persisted)
- Add unit tests
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes using conventional commits with emojis
- Push to the branch
- Open a Pull Request
Commit Message Format
✨— New feature📝— Documentation🐛— Bug fix♻️— Refactor⬆️— Dependency upgrade
License
GNU General Public License v3.0 — see LICENSE.
Documentation
- CHANGELOG — Release history
- AGENTS.md — Technical documentation for AI assistants
- Online docs: https://muskstark.github.io/SwissKitJ/
Built with using JavaFX