ChrisRM/material-theme-jetbrains
JetBrains theme of Material Theme
Stale — last commit 4y ago
weakest axisnon-standard license (Other); last commit was 4y ago…
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
last commit was 4y ago; no CI workflows detected
- ✓2 active contributors
- ✓Other licensed
- ✓Tests present
Show all 8 evidence items →Show less
- ⚠Stale — last commit 4y ago
- ⚠Small team — 2 contributors active in recent commits
- ⚠Single-maintainer risk — top contributor 98% of recent commits
- ⚠Non-standard license (Other) — review terms
- ⚠No CI workflows detected
What would change the summary?
- →Use as dependency Concerns → Mixed if: clarify license terms
- →Deploy as-is Mixed → Healthy if: 1 commit in the last 180 days
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Forkable" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/chrisrm/material-theme-jetbrains)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/chrisrm/material-theme-jetbrains on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: ChrisRM/material-theme-jetbrains
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/ChrisRM/material-theme-jetbrains shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Stale — last commit 4y ago
- 2 active contributors
- Other licensed
- Tests present
- ⚠ Stale — last commit 4y ago
- ⚠ Small team — 2 contributors active in recent commits
- ⚠ Single-maintainer risk — top contributor 98% of recent commits
- ⚠ Non-standard license (Other) — review terms
- ⚠ No CI workflows detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live ChrisRM/material-theme-jetbrains
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/ChrisRM/material-theme-jetbrains.
What it runs against: a local clone of ChrisRM/material-theme-jetbrains — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in ChrisRM/material-theme-jetbrains | Confirms the artifact applies here, not a fork |
| 2 | License is still Other | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | Last commit ≤ 1593 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of ChrisRM/material-theme-jetbrains. If you don't
# have one yet, run these first:
#
# git clone https://github.com/ChrisRM/material-theme-jetbrains.git
# cd material-theme-jetbrains
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of ChrisRM/material-theme-jetbrains and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "ChrisRM/material-theme-jetbrains(\\.git)?\\b" \\
&& ok "origin remote is ChrisRM/material-theme-jetbrains" \\
|| miss "origin remote is not ChrisRM/material-theme-jetbrains (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Other)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Other\"" package.json 2>/dev/null) \\
&& ok "license is Other" \\
|| miss "license drift — was Other at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 1593 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~1563d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/ChrisRM/material-theme-jetbrains"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
A JetBrains IDE theme plugin that ports the popular Material Theme design system to IntelliJ, PyCharm, WebStorm, and other JetBrains products. It provides customizable color schemes, Material Design UI components, icon packs (including Atom Material Icons), and runtime accent color patching via bytecode manipulation with Javassist. The plugin is archived as of February 2021 but serves as a historical reference for how to deeply customize JetBrains IDE appearance. Single-module Gradle project: src/main/java/com/mallowigi/idea/ contains core components (MTConfig for settings, MTThemeManager for theme application, MTLafComponent for LAF injection). src/main/java/com/mallowigi/idea/actions/ holds ~15 toggle actions (compact mode, accent color, fonts, etc.). Resources define bundled Material theme XML files. MTAccentColorPatcher and MTHackComponent handle runtime bytecode patching and LAF hacks respectively.
👥Who it's for
JetBrains IDE users (developers in IntelliJ, PyCharm, WebStorm, etc.) who want Material Design aesthetics and fine-grained theme customization. Plugin developers interested in learning how to patch JetBrains Look-and-Feel (LAF), modify accent colors at runtime, and manage bundled theme resources.
🌱Maturity & risk
Production-ready but archived. The plugin shipped to the JetBrains marketplace (plugin ID 8006), accumulated significant GitHub stars, and has been maintained since 2015. However, development moved to closed-source in February 2021, and this repository is now read-only. It demonstrates mature plugin architecture with application components, settings persistence, and update handling.
High risk for new contributions: the repo is archived and no longer accepts changes. Single maintainer (ChrisRM/Mallowigi) with ongoing development elsewhere. Uses dated Gradle (0.7.2) and Kotlin (1.3.20) versions. Bytecode patching via Javassist and reflection-heavy LAF manipulation are fragile across IntelliJ versions. No visible test suite in the file structure indicates coverage is likely minimal.
Active areas of work
Nothing—the repository is archived. The README explicitly notes development moved to closed-source in February 2021. This snapshot captures the last open-source state. Issues and questions are now redirected to https://github.com/mallowigi/material-theme-issues.
🚀Get running
git clone https://github.com/ChrisRM/material-theme-jetbrains.git
cd material-theme-jetbrains
./gradlew build
The Gradle wrapper (gradlew) is included. Build output will be a .jar plugin file suitable for manual installation in JetBrains IDEs via Settings → Plugins → Install Plugin from Disk.
Daily commands:
This is a plugin, not a standalone app. Build with ./gradlew build, then manually install the resulting JAR into a JetBrains IDE (File → Settings → Plugins → ⚙ → Install Plugin from Disk), or use ./gradlew runIde if the IntelliJ Gradle plugin is properly configured (it may require adjusting gradle.properties to target a specific IDE version).
🗺️Map of the codebase
- src/main/java/com/mallowigi/idea/MTThemeManager.java: Central orchestrator for applying themes—loads bundled themes, applies color schemes, and manages theme switching
- src/main/java/com/mallowigi/idea/MTConfig.java: Persistent settings holder using XStream; stores user preferences like compact mode, accent color, font choice
- src/main/java/com/mallowigi/idea/MTAccentColorPatcher.java: Runtime bytecode injection using Javassist to override IDE accent colors without theme restart
- src/main/java/com/mallowigi/idea/MTLafComponent.java: Look-and-Feel customization component that patches Swing UIDefaults on plugin init
- src/main/java/com/mallowigi/idea/MTHackComponent.java: Contains hacks and workarounds for version-specific LAF inconsistencies across different JetBrains IDE versions
- src/main/java/com/mallowigi/idea/actions/: Directory of ~15 toggle actions (MTCompactTablesAction, MTContrastAction, etc.) that modify settings and trigger theme reapplication
- build.gradle: Gradle build configuration; defines plugin metadata, dependencies (XStream, Javassist, Mixpanel), and IntelliJ SDK plugin settings
🛠️How to make changes
New color scheme: Add XML file to theme resources directory and register in MTBundledThemesManager.java. New toggle action: Create class in src/main/java/com/mallowigi/idea/actions/ extending MTAbstractAction and register in ActionGroup.java. Settings UI: Modify MTConfig.java and corresponding configurable component. LAF customization: Extend MTLafComponent.java or MTHackComponent.java. Accent colors: Modify MTAccentColorPatcher.java to add new color definitions.
🪤Traps & gotchas
Bytecode version fragility: Javassist patches assume specific JetBrains bytecode structure—breaks across major IDE versions. No public test suite: verify changes manually in IDE. XStream serialization: MTConfig uses XStream; changing config bean structure requires migration logic. Analytics: Mixpanel dependency included; may be disabled in closed-source fork. IDE version targeting: build.gradle likely requires intellij-version property to build against specific IDE; check gradle.properties for correct version. Archived status: PRs will not be merged; the repository is read-only.
💡Concepts to learn
- Java Bytecode Manipulation / Javassist — This plugin uses Javassist to inject runtime color patches into compiled IDE classes without modifying source—core technique for non-invasive LAF customization in closed-source IDEs
- JetBrains Look-and-Feel (LAF) Patching — UIDefaults and Swing LAF customization is how the plugin overrides IDE colors; understanding LAF is essential to modify any visual element
- IntelliJ Application Components & Plugin Lifecycle — MTApplicationComponent, MTLafComponent, and MTUpdatesComponent hook into IDE startup lifecycle via plugin.xml; foundational for plugin initialization and state management
- XML Theme Resource Bundling & Registration — Bundled Material themes are XML files registered via MTBundledThemesManager; understanding this pattern is key to adding new color schemes or themes
- Reflection & Dynamic Class Loading — MTAccentColorPatcher and MTHackComponent use reflection to inspect and modify IDE internals at runtime; reflection is brittle but necessary for deep customization
- XStream XML Serialization — MTConfig uses XStream to persist settings as XML; understanding XStream is necessary to modify config storage or handle version migrations
- Action Pattern in IntelliJ Plugins — All theme toggles (MTCompactTablesAction, MTContrastAction, etc.) inherit a common action pattern; mastering this enables adding new user-facing features
🔗Related repos
equinusocio/vsc-material-theme— Original Material Theme for VS Code; this JetBrains port is derived from the design system and color palette defined heremallowigi/material-theme-issues— Official issue tracker for Material Theme after this repo archived; new bugs and feature requests go hereJetBrains/intellij-platform-plugin-template— Modern IntelliJ plugin boilerplate; useful reference for understanding current best practices vs. this 2015-2021 codebaseChrisRM/atom-material-icons— Companion icon pack plugin (ID 10044) used alongside Material Theme UI for consistent Material Design iconographymallowigi/material-theme-issues— Community issue tracker and discussion hub since the main repo archived; reflects active user base and feature requests
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add unit tests for MTConfig and MTCustomThemeConfig classes
The repo has no visible test directory despite complex configuration management in src/main/java/com/mallowigi/idea/MTConfig.java and MTCustomThemeConfig.java. These classes handle theme persistence, accent colors, and user preferences. Adding unit tests would improve reliability and make future refactoring safer, especially for configuration serialization/deserialization via XStream.
- [ ] Create src/test/java/com/mallowigi/idea directory structure
- [ ] Write tests for MTConfig property getters/setters and persistence logic
- [ ] Write tests for MTCustomThemeConfig theme switching and accent color application
- [ ] Add test dependencies to build.gradle (JUnit 4+, Mockito)
- [ ] Verify tests run via gradle test task
Add GitHub Action CI workflow for gradle build and checkstyle validation
The repo has checkstyle configuration (gradle/checkstyle.xml, gradle/suppressions.xml) and a gradle build system, but no visible CI pipeline in .github/workflows/. Adding automated build validation on PRs would catch compilation errors and style violations early. The incomplete build.gradle snippet suggests the build setup exists but isn't being validated automatically.
- [ ] Create .github/workflows/build.yml with gradle build and checkstyle tasks
- [ ] Configure workflow to run on push to main and all pull requests
- [ ] Add gradle wrapper verification step
- [ ] Test workflow runs successfully on sample branch
- [ ] Add workflow badge to README.md
Refactor duplicate accent action classes into parameterized abstract implementation
The actions/accents directory contains 25+ nearly identical accent action classes (MTAbyssAccentAction.java, MTAcidLimeAccentAction.java, MTAmberAccentAction.java, etc.) that each extend MTAbstractAccentAction but only differ in color values. This creates maintenance burden and violates DRY principle.
- [ ] Analyze MTAbstractAccentAction.java to extract the parameterizable differences (color hex values, accent names)
- [ ] Create an AccentColor enum or registry with all accent definitions
- [ ] Refactor MTAbstractAccentAction to accept accent parameters in constructor
- [ ] Replace all individual accent action classes with a single MTAccentAction using the registry
- [ ] Update ActionGroup.java to dynamically register accent actions from the enum
- [ ] Verify all accent color functionality still works via testing the changed actions
🌿Good first issues
- Add unit tests for MTConfig.java serialization/deserialization—currently no test coverage visible in file structure, risking config corruption during upgrades
- Document the LAF customization flow: trace how MTLafComponent.java and UIReplacer.java interact, and create a guide in docs/ for contributors wanting to add new theme properties
- Create missing Javadoc for MTAccentColorPatcher bytecode injection logic—the Javassist reflection code is opaque; add inline comments and class-level docs explaining the hooking mechanism
📝Recent commits
Click to expand
Recent commits
4b3683f— try to use settings (mallowigi)220eabb— update readme (mallowigi)32e2c33— remove sponsors :/ (mallowigi)46d9f45— update readme (mallowigi)65435bb— remove MTAnalytics (mallowigi)06da0a8— remove deprecated files (mallowigi)f591ecd— fix collective (mallowigi)f5cbb98— fix collective (mallowigi)c6b6014— Fix back (mallowigi)62d9d4e— update readme (mallowigi)
🔒Security observations
This JetBrains theme plugin has significant security concerns primarily related to severely outdated dependencies. XStream (1.4.11.1) has multiple known RCE vulnerabilities and should be immediately updated. The Gradle IntelliJ plugin (0.7.2), Kotlin (1.3.x), and Javassist are all years out of date. Additionally, the project relies on Bintray repositories that no longer exist, breaking dependency management. The codebase appears to be archived/unmaintained. Immediate action is required to update all dependencies and migrate to current repository solutions before using in any production environment.
- High · Outdated XStream Dependency with Known Vulnerabilities —
build.gradle - dependencies section. XStream 1.4.11.1 is an outdated version with multiple known CVEs including remote code execution vulnerabilities (CVE-2021-21341, CVE-2021-21342, CVE-2021-21343, CVE-2021-21344). Current vulnerable versions are <1.4.18 for Java serialization attacks. Fix: Update XStream to version 1.4.18 or later: implementation('com.thoughtworks.xstream:xstream:1.4.18') - High · Outdated Gradle Plugin for JetBrains IntelliJ —
build.gradle - plugins section. The org.jetbrains.intellij plugin version 0.7.2 is significantly outdated (released in 2019). Current versions are 1.x+. Outdated plugins may have unpatched security issues and lack modern security features. Fix: Update to the latest stable version: id 'org.jetbrains.intellij' version '1.16.1' (or latest available) - Medium · Outdated Kotlin Version —
build.gradle - plugins and dependencies sections. Kotlin version 1.3.20 (from 2019) and 1.3.72 are severely outdated. Current versions are 1.9.x+. Outdated Kotlin may have unpatched vulnerabilities and compatibility issues with modern security standards. Fix: Update Kotlin to latest stable: id 'org.jetbrains.kotlin.jvm' version '1.9.23' and kotlin-stdlib-jdk8:1.9.23 - Medium · Outdated Javassist Dependency —
build.gradle - dependencies section. Javassist 3.27.0-GA is outdated. Current versions are 3.29.x+. Javassist is used for bytecode manipulation and outdated versions may have security issues. Fix: Update to latest stable: implementation 'org.javassist:javassist:3.29.2-GA' - Medium · Use of Deprecated Bintray Repository —
build.gradle - repositories and buildscript sections. The build.gradle uses Bintray repositories (https://dl.bintray.com/) which was shut down in 2021. This repository is no longer functional and represents poor dependency management practices. Fix: Replace Bintray URLs with Maven Central or JCenter equivalents: Use 'mavenCentral()' and update plugin repositories to official JetBrains repositories - Low · Missing HTTPS in Maven Repository —
build.gradle - repositories section. Some repository configurations may not enforce HTTPS for dependency downloads, increasing risk of man-in-the-middle attacks during build time. Fix: Ensure all repository URLs use HTTPS: maven { url 'https://repo1.maven.org/maven2' } - Low · Incomplete build.gradle Configuration —
build.gradle. The build.gradle file appears to be truncated (ends with 'sourceCompa'), indicating the configuration is incomplete or corrupted. This could hide additional security misconfigurations. Fix: Review and complete the full build.gradle file to ensure all configurations are properly defined and validated
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.