Next Steps
You've built your first plugin. Now explore Core Concepts, Advanced Features, and the Plexcord API to level up your skills.
Next Steps
You've built your first Plexcord plugin and learned the fundamentals. Here's where to go next depending on your goals.
Learning Path
Level Up Your Knowledge
If you want to understand how plugins work under the hood, continue with Core Concepts:
Plugin Lifecycle
Understand exactly when start(), stop(), and startAt run, and why it matters.
Plugin Metadata
Master all the metadata fields: required, enabledByDefault, dependencies, and tags.
Settings Deep Dive
Learn every OptionType in detail: MULTISELECT, BIGINT, CUSTOM, and more.
Debugging
Use Plexcord's Logger, DevTools, and error boundaries to squash bugs fast.
Build Powerful Features
Once you understand the basics, learn the powerful capabilities that make Plexcord plugins unique:
Patches System
Modify Discord's internal code at runtime using regex-based patching.
Commands System
Create custom Discord slash commands with options, autocomplete, and responses.
Flux Events
React to Discord events like MESSAGE_CREATE, GUILD_MEMBER_UPDATE, and hundreds more.
Context Menus
Add items to right-click menus on users, messages, and channels.
Reference & Examples
Need a quick answer or a full working example?
API Reference
Complete TypeScript interfaces for every Plexcord API.
Examples
Copy-paste working plugin examples from beginner to advanced complexity.
Best Practices
Write clean, performant, secure plugins used in production.
Quick Reference
Most Used Imports
// Core
import definePlugin, { OptionType } from "@utils/types";
import { definePluginSettings } from "@api/Settings";
// Logging
import { Logger } from "@utils/Logger";
// Notifications
import { showNotification } from "@api/Notifications";
// Discord modules (Webpack)
import { UserStore, ChannelStore } from "@webpack/common";
// React
import { React, useState, useEffect } from "@webpack/common";Most Used Patterns
Reading user settings:
const userId = UserStore.getCurrentUser()?.id;Getting current channel:
const channelId = SelectedChannelStore.getChannelId();Conditionally running in start():
start() {
if (!IS_DISCORD_DESKTOP) return; // Desktop only
// ... your code
},Flux with multiple events:
flux: {
MESSAGE_CREATE({ message }) { ... },
MESSAGE_UPDATE({ message }) { ... },
MESSAGE_DELETE({ id }) { ... },
},Getting Help
- Discord Server: Join the Plexcord Discord in the
#plugin-developmentchannel - Bug Reports: Open an issue on GitHub
- Source Code: Browse existing plugins for real-world examples
- Contributing: See
CONTRIBUTING.mdin the repository
You're Ready!
With the Getting Started knowledge you have now, you can build most plugins. Explore the rest of the docs whenever you need a specific capability.
Happy hacking!