How To Upload and Update a WordPress Plugin using SVN Client on Windows

Introduction

If you’re a WordPress plugin developer looking to publish your plugin on the official WordPress Plugin Repository, you’ll need to use SVN (Subversion) to manage your plugin’s source code.

Unlike Git, WordPress uses SVN for its plugin directory, so setting this up locallyโ€”especially on Windowsโ€”requires a few extra steps. Donโ€™t worry though, this guide has you covered whether you’re a beginner or just need a refresher.

This guide assumes that your plugin has already been approved for hosting on the WordPress repository.

โš ๏ธ If you’re not yet approved and need help getting there, drop a comment below! Iโ€™ll be happy to put together a detailed guide on โ€œHow to submit your WordPress plugin for repository approval.โ€

In the meantime, you can also refer to the official WordPress plugin developer handbook for detailed technical instructions.

๐Ÿš€ What Youโ€™ll Learn in This Guide:

  • โœ… How to install an SVN client on Windows

  • ๐Ÿ“ฆ How to upload your first plugin to the WordPress SVN repo

  • ๐Ÿ” How to update your plugin later (like releasing a new version)

๐Ÿง  What is SVN and Why WordPress Uses It

SVN (Subversion) is a version control system used to track and manage changes to source code over time. While most modern developers prefer Git, the official WordPress Plugin Directory still uses SVN โ€” and for good reason.

Using SVN allows plugin developers to:
  • Manage multiple versions (releases) of a plugin.
  • Easily roll back to a previous version.
  • Keep development and production code organized using trunk/, tags/, and assets/.

How To Install SVN Clients On Windows

Before you can upload or update a WordPress plugin using SVN, you’ll need to install a Subversion (SVN) client on your Windows machine. While there are a few options out there, we highly recommend SlikSVN for a lightweight and command-lineโ€“friendly setup.SlikSVN is great for developers who prefer working in Command Prompt (CMD) or scripting plugin deployment tasks.

โš ๏ธ Important Note: While TortoiseSVN is a popular graphical SVN client (and can be configured for command-line use), this guide focuses on a clean, CLI-based workflow. If you’re comfortable with the command prompt or planning to automate deployments, SlikSVN is the better fit.

SlikSVN is great for developers who prefer working in Command Prompt (CMD) or scripting plugin deployment tasks.
  1. Visit the official site: ๐Ÿ‘‰https://sliksvn.com/download/
  2. Download and run the Windows installer.
  3. During installation, be sure to check the box that says: โ€œAdd to PATHโ€
  4. After installation, open Command Prompt and type:
    bash
    svn --version
    If everything is set up correctly, youโ€™ll see output like:
    bash
    svn, version 1.14.2-SlikSvn (SlikSvn/1.14.2)...............
You’re now ready to interact with the WordPress SVN repo using clean, scriptable, command-lineโ€“based commands!

How To Upload a New Plugin to WordPress SVN

Now that you’ve been approved by the WordPress Plugin Review Team and received your plugin’s SVN repository URL via email, you’re ready to upload your plugin files to the WordPress SVN repository.

โš ๏ธ Note: Weโ€™re assuming that your plugin has already passed the review process and you have your plugin slug and SVN repository URL. If not, please refer to the plugin submission process first.

Your repository URL will look like this:
url link
https://plugins.svn.wordpress.org/your-plugin-slug/
Letโ€™s go step by step and upload your plugin for the first time.

Step 1: Checkout the Empty SVN Repository to Your Local System

Before you can start working on your plugin locally, you need to “checkout” (download) the empty structure of your pluginโ€™s SVN repository to your computer. This step creates a local working copy that stays in sync with the WordPress plugin repository.Before performing the checkout, create a folder named after your pluginโ€™s slug to help you easily identify it later. You can create this folder in a convenient location on your local system, such as:
file-path
C:\Users\YourName\Desktop\your-plugin-slug

Open that folder in File Explorer. In the File Explorer address bar, click on the path to highlight it, and copy the full path.

๐Ÿ’กNote:In the following demonstration, the example path C:\Users\YourName\Desktop\your-plugin-slug is equivalent to the actual path used: C:\Users\USERJOHN DOE01\Desktop\w3netlab-plugins

Example copied path:
file-path
C:\Users\USERJOHN DOE01\Desktop\w3netlab-plugins
Open Command Prompt (CMD), and now use the following command to checkout the WordPress SVN repository. Replace the URL with your pluginโ€™s repository URL, and paste your folder path at the end, like this:
cmd
svn checkout https://plugins.svn.wordpress.org/w3netlab-plugin/ "C:\Users\USERJOHN DOE01\Desktop\w3netlab-plugins"

๐Ÿ“ฆ This command tells SVN to:

  • Connect to your pluginโ€™s repository (https://plugins.svn.wordpress.org/your-plugin-slug/)

  • Download (checkout) the repositoryโ€™s structure into your local folder (your-plugin-slug)

๐Ÿ“ After successful checkout, your folder will contain the standard WordPress plugin SVN structure:

folder-structure
your-plugin-slug/
โ”œโ”€โ”€ assets/     โ† Banner & screenshot images (not bundled in ZIP)
โ”œโ”€โ”€ tags/       โ† Version snapshots (like 1.0.0, 1.1.0)
โ””โ”€โ”€ trunk/      โ† Main plugin code (latest working version)
Now that your pluginโ€™s folder structure is ready locally, you’re all set to move your plugin code into the trunk/ folder in the next step.

Step 2: Add Plugin Files to the /trunk/ Folder

Move all your plugin files โ€” including your main PHP file, other code, subfolders, and readme.txt/ โ€” into the trunk/ directory.

โš ๏ธ Important: Your readme.txt file must be properly formatted according to WordPress standards.

Example folder after copying:

folder-structure
trunk/
โ”œโ”€โ”€ my-plugin.php
โ”œโ”€โ”€ includes/
โ”œโ”€โ”€ css/
โ”œโ”€โ”€ js/
โ””โ”€โ”€ readme.txt

Also, place plugin page assets (e.g. screenshots and banners) into the assets/ folder (not inside trunk/).

Step 3: Create the New Version Tag in /tags/1.0.0

Now create initial release tag inside theย /tags/1.0.0 directory.

To tag version 1.0.0 (replace with your version):

cmd
cd "C:\Users\YourName\Desktop\your-plugin-slug"
svn copy trunk tags/1.0.0
In order to execute above command, you might need to enter twice. This creates a copy of the trunk/ folder as tags/1.0.0/.

Step 4: Add All Files to SVN Version Control

Now, add all files to SVN using the svn add command:
cmd
cd "C:\Users\YourName\Desktop\your-plugin-slug"
svn add assets/* --force 
svn add trunk/* --force 
svn add tags/* --force 
  • The --force flag ensures all subdirectories and files are added.
  • You can also use svn status to verify which files are being tracked (A means added).

Step 5: Commit Your Plugin Files to the WordPress Repository

Now that everything is added, push your code to the WordPress SVN repository using the svn commit command:
cmd
svn commit -m "Initial commit: Uploaded plugin files to WordPress SVN"
When prompted, enter your WordPress svn credentials:
  • Username: This is your WordPress.org login username (not email).
  • Password: Itโ€™s not your WordPress.org account password instead it is a specific to wordpress svn repo. SVN passwords separate your commit access from your main WordPress.org account credentials. SVN passwords cannot be used for any other services on WordPress.org, including logging into your account.
How to get SVN account credentials:
  1. While logged in your wordpress.org account, visit your profile at https://profiles.wordpress.org.
  2. Click on theย Account & Securityย tab.
  3. Clickย SVN credentials
  4. Clickย Generate Password
  5. Clickย Copyย next to the newly generated password to copy it to your clipboard.

Once commit successful, the files in trunk/ and assets/ are now live in the repository.
And your wordpress plugin will be available to the users via wordpress official repository within few minutes.

Step 6: Verify Plugin is Live

After committing, your plugin should appear on:

url-link
https://wordpress.org/plugins/your-plugin-slug/

Depending on cache and sync, it might take a few minutes to reflect changes.

How to Push an Update to Your WordPress Plugin in the SVN Repository

After your plugin is published and live in the WordPress Plugin Directory, youโ€™ll eventually need to release updates โ€” whether it’s fixing bugs, improving functionality, or releasing new features. This section explains how to safely update your plugin in the SVN repository.

Step 1: Option1 - Navigate To Your Local SVN Working Copy and run svn update

You’re not the only one working on the project, right?

Even if you’re the primary developer, thereโ€™s always a chance that collaborators โ€” or even automated systems โ€” have made changes to the WordPress plugin repository. To stay in sync with the latest version and avoid pushing outdated or conflicting code, itโ€™s essential to always update your local copy before making or committing any changes.

The svn update command synchronizes your local working copy with the central repository, pulling in any updates made by others (or by you on another device).

To do so, open Command Prompt and navigate to the working copy folder:
cmd
cd "C:\Users\YourName\Desktop\wordpress-plugins\your-plugin-slug"
Now run the below command to bring latest copy from repository.
cmd
svn update
Hereโ€™s what svn update does:
  • Download new changes made by others from the central SVN repository
  • Merge them into your local copy if no conflict exists
  • Leave your own local changes (like uncommitted edits) untouched
Risks of Skipping svn update

If you skip updating your local copy before making changes or committing, you might:

  • Overwrite someone elseโ€™s work.
  • Push buggy or outdated code by accident.
  • Break the plugin for everyone on WordPress.org.

Imagine pushing an update that unknowingly removes an important fix added by a teammate or reintroduces a bug that was already patched. These are disasters you can avoid by following the simple best practice of running svn update first.

Option2 - Create a Fresh Working Copy folder and Run svn checkout

If you donโ€™t have the folder anymore, simply create working copy folder, and checkout the repository again:

cmd
svn checkout https://plugins.svn.wordpress.org/your-plugin-slug/ "C:\Users\YourName\Desktop\wordpress-plugins\your-plugin-slug"

Step 2: Now Run svn status

The svn update command make working up to date with the latest version from the repository.

But what if you already had some local changes? SVN doesnโ€™t overwrite them โ€” instead, it merges them if possible and flags them as modified (M) or conflicted (C).

Running svn status immediately afterward will show:

  • M โ†’ You still have local modifications

  • C โ†’ A conflict occurred during the update

  • ! โ†’ Some files are missing (locally deleted but not properly removed from SVN)

  • ? โ†’ New files/folders not added to version control yet

For instance, If someone else made changes to the same file (e.g., readme.txt) that you also modified locally, an update might cause a conflict.

Running svn status right after svn update shows you:

cmd
C       trunk\readme.txt
So you can resolve it before you commit, avoiding broken commits or unexpected overwrites.After running svn status, you might also see like:
cmd
M       trunk\readme.txt
?       debug.log
!       trunk\missing.php

This alerts you to:

  • Possible unintended or delibrate edits (M)

  • Untracked files you forgot to ignore (?)

  • Files you deleted manualy but forgot to run svn delete for (!)

So you can take action: revert, add, delete, or ignore as needed.

Step 3: Update Files Inside the /trunk/ Folder

Make all the necessary updates in the trunk/ directory. For example:

  • Update your pluginโ€™s main .php files
  • Update or add modules, CSS/JS files, etc.
  • Update your readme.txt file (especially the โ€œStable tagโ€ and changelog)
  • If you have new screenshots or banners, update them in the assets/ folder
โœ…Correct Way to Delete a File in SVN

In SVN (Subversion), if you want to delete a file from your local working copy and the repository, you should never delete it manually using File Explorer.

Instead, you should use the svn delete command so that SVN properly tracks the deletion and prepares it for commit.

  1. Open Command Prompt (in the folder where the file is located).
  2. Run this command to delete the file via SVN (replace the example path with the actual file path):
    cmd
    svn delete trunk\modules\example-widget.php
    
  3. Confirm the deletion with SVN:
    cmd
    svn status
    
    Youโ€™ll see:
    cmd
    D       trunk\modules\example-widget.php
    
    D means “scheduled for deletion.”

Step 4: Commit the Update to the WordPress SVN Repository

Once you’re satisfied with the changes, run:

cmd
svn commit -m "Updated plugin to version 1.0.1 โ€“ added new feature X and fixed bug Y"

You’ll be prompted to enter your WordPress.org username and password. If you use Two-Factor Authentication (2FA), use an App Password instead of your account password.

โœ… Final Tips for Successful Plugin Management

  • Do not manually delete the file in File Explorer or using del command in terminal
  • Always update the Stable tag in readme.txt to match your latest release version.
  • Do not put assets/ images in the trunk/ folder โ€” they must be in /assets/ only.
  • Tag each release using svn copy, not by editing the tags/ folder manually.
  • Test your plugin thoroughly before committing.
  • Use meaningful commit messages for better tracking.

Conclusion

Uploading and managing a WordPress plugin using SVN may feel different at first, especially if you’re used to Git. However, by following this structured guide, you’ll be able to confidently upload new plugins, manage updates, and ensure your plugin is professionally maintained on the WordPress repository.

Need help fixing SVN conflicts or automating this with scripts? Feel free to reach out or comment below โ€” weโ€™re here to help!

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories

Popular Tags

Need Help?