# Change Ignition Project Location

**URL:** <https://forum.inductiveautomation.com/t/change-ignition-project-location/42275>\
**Category:** Ignition\
**Created:** [January 14, 2021, 11:28pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275 "2021-01-14T23:28:06Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jonathan](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@Jonathan](https://forum.inductiveautomation.com/u/Jonathan)\
**Post date:** [January 14, 2021, 11:28pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/1 "2021-01-14T23:28:06Z")

</div>

Is it possible to change where ignition looks for projects? Say for instance could I have my ignition projects stored at c:\projects rather than in the Ignition Programs Files directory.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 14, 2021, 11:48pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/2 "2021-01-14T23:48:15Z")

</div>

You can change the location of the entire `data` directory but not just projects.

(change the `-Ddata.dir` parameter in ignition.conf)

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 14, 2021, 11:49pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/3 "2021-01-14T23:49:57Z")

</div>

Eh, hang on, that might not be true… looking…

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 14, 2021, 11:50pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/4 "2021-01-14T23:50:53Z")

</div>

Yeah, okay, try setting `-Dignition.projects.dir=/path/to/projects` in ignition.conf.

---

<div class="post-metadata">

**Author:** ![Bryan\_Mason](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bryan_mason/32/30612_2.png) [@Bryan\_Mason](https://forum.inductiveautomation.com/u/Bryan_Mason)\
**Post date:** [December 21, 2021, 10:29pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/5 "2021-12-21T22:29:31Z")

</div>

Hey Kevin, can you give me an example of how to format an absolute path with a drive letter?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 21, 2021, 10:51pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/6 "2021-12-21T22:51:37Z")

</div>

Something like this should work:

```auto
-Dignition.projects.dir="C:/Temp/IgnitionProjects"

```

---

<div class="post-metadata">

**Author:** ![Bryan\_Mason](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bryan_mason/32/30612_2.png) [@Bryan\_Mason](https://forum.inductiveautomation.com/u/Bryan_Mason)\
**Post date:** [December 21, 2021, 11:30pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/7 "2021-12-21T23:30:38Z")

</div>

Great! This worked for me. The reason I’m moving the project directory is so that I don’t need to run as admin to perform git operations. I think it would be better if the default project location wasn’t under Program Files.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 21, 2021, 11:33pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/8 "2021-12-21T23:33:30Z")

</div>

> [@Bryan\_Mason](#):
>
> I think it would be better if the default project location wasn’t under Program Files.

We have no intention of moving the project location outside the rest of the Ignition install directory, but you're welcome to change where Ignition gets installed when you run the installer the first time.

I'm not really a Windows person, but it seems like there would be a way to modify permissions on the default projects dir if you need.

---

<div class="post-metadata">

**Author:** ![thecesrom.git](https://avatars.discourse-cdn.com/v4/letter/t/dfb087/32.png) [@thecesrom.git](https://forum.inductiveautomation.com/u/thecesrom.git)\
**Post date:** [December 22, 2021, 12:55am UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/9 "2021-12-22T00:55:02Z")

</div>

If you’re running Windows, another option is to create symbolic links to your desired directory.

With PowerShell you can run `New-Item`.

> **[New-Item (Microsoft.PowerShell.Management) - PowerShell](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-item?view=powershell-7.2#example-7--create-a-symbolic-link-to-a-file-or-folder)**
>
> The New-Item cmdlet creates a new item and sets its value. The types of items that can be created depend on the location of the item. For example, in the file system, New-Item creates files and folders. In the registry, New-Item creates registry keys...

Or `mklink` if you’re on Command Prompt.

> **[mklink](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/mklink)**
>
> Reference article for the mklink command, which creates a directory or file symbolic or hard link.

---

<div class="post-metadata">

**Author:** ![SKA](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ska/32/29528_2.png) [@SKA](https://forum.inductiveautomation.com/u/SKA)\
**Post date:** [December 22, 2021, 6:54am UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/10 "2021-12-22T06:54:10Z")

</div>

Its very un-suggested to change the permissions for c:\program files and c:\program files(x86).  
Its like giving anyone access to /root in linux.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 22, 2021, 1:28pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/11 "2021-12-22T13:28:34Z")

</div>

I’m suggesting changing it for the data/projects directory, not the install root…

---

<div class="post-metadata">

**Author:** ![Salim\_SSH](https://avatars.discourse-cdn.com/v4/letter/s/58f4c7/32.png) [@Salim\_SSH](https://forum.inductiveautomation.com/u/Salim_SSH)\
**Post date:** [February 24, 2022, 4:45pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/12 "2022-02-24T16:45:49Z")

</div>

Please i need help !  
I would like to change the location of the data directory in partition D on windows  
i tried with =\> wrapper.java.additional.1=-Ddata.dir=“D:\Ignition\data” in igntion.conf file and restart ignition but Don’t work

---

<div class="post-metadata">

**Author:** ![thecesrom.git](https://avatars.discourse-cdn.com/v4/letter/t/dfb087/32.png) [@thecesrom.git](https://forum.inductiveautomation.com/u/thecesrom.git)\
**Post date:** [March 2, 2022, 4:36pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/13 "2022-03-02T16:36:15Z")

</div>

Try forward slashes:

```auto
# Java Additional Parameters
wrapper.java.additional.1=-Ddata.dir="D:/Ignition/data"

```

---

<div class="post-metadata">

**Author:** ![hunterdg](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/hunterdg/32/67774_2.png) [@hunterdg](https://forum.inductiveautomation.com/u/hunterdg)\
**Post date:** [February 13, 2024, 11:25pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/15 "2024-02-13T23:25:14Z")

</div>

any ideas why this doesn't/if this should work with relative paths?

works fine at the gateway level, but Designer fails to save with

> **com.inductiveautomation.ignition.client.gateway\_interface.GatewayException: Unable to push project changes**
>
> > com.inductiveautomation.ignition.client.gateway\_interface.GatewayException: Unable to push project changes.  
> > at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.newGatewayException(GatewayInterface.java:351)  
> > at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.sendMessage(GatewayInterface.java:325)  
> > at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.sendMessage(GatewayInterface.java:278)  
> > at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.invoke(GatewayInterface.java:954)  
> > at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.pushProject(GatewayInterface.java:987)  
> > at com.inductiveautomation.ignition.designer.project.PushTask.run(PushTask.java:19)  
> > at com.inductiveautomation.ignition.client.util.gui.ProgressDialog$TaskRunner.run(ProgressDialog.java:364)  
> > at java.base/java.lang.Thread.run(Unknown Source)  
> > Caused by: com.inductiveautomation.ignition.gateway.servlets.gateway.functions.GatewayFunctionException: Unable to push project changes.  
> > at com.inductiveautomation.ignition.gateway.servlets.gateway.functions.Projects.push(Projects.java:248)  
> > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
> > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(null)  
> > at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(null)  
> > at java.lang.reflect.Method.invoke(null)  
> > at com.inductiveautomation.ignition.gateway.servlets.gateway.AbstractGatewayFunction.invoke(AbstractGatewayFunction.java:228)  
> > at com.inductiveautomation.ignition.gateway.servlets.Gateway.doPost(Gateway.java:431)  
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)  
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)  
> > at com.inductiveautomation.ignition.gateway.bootstrap.MapServlet.service(MapServlet.java:86)  
> > at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)  
> > at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)  
> > at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631)  
> > at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)  
> > at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)  
> > at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)  
> > at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)  
> > at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)  
> > at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)  
> > at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)  
> > at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)  
> > at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)  
> > at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)  
> > at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)  
> > at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)  
> > at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)  
> > at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)  
> > at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)  
> > at com.inductiveautomation.catapult.handlers.RemoteHostNameLookupHandler.handle(RemoteHostNameLookupHandler.java:121)  
> > at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)  
> > at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)  
> > at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)  
> > at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)  
> > at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)  
> > at org.eclipse.jetty.server.Server.handle(Server.java:516)  
> > at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)  
> > at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)  
> > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)  
> > at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)  
> > at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)  
> > at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)  
> > at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)  
> > at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)  
> > at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)  
> > at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)  
> > at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)  
> > at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)  
> > at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)  
> > at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)  
> > at java.lang.Thread.run(null)
> > 
> > Ignition v8.1.21 (b2022092908)  
> > Java: Azul Systems, Inc. 11.0.15

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [February 13, 2024, 11:51pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/16 "2024-02-13T23:51:00Z")

</div>

Is there a corresponding error in the Gateway logs?

---

<div class="post-metadata">

**Author:** ![hunterdg](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/hunterdg/32/67774_2.png) [@hunterdg](https://forum.inductiveautomation.com/u/hunterdg)\
**Post date:** [February 14, 2024, 3:03am UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/17 "2024-02-14T03:03:27Z")

</div>

there is not (default logging)

tried:  
`wrapper.java.additional.3=-Dignition.projects.dir=../projects`  
`wrapper.java.additional.3=-Dignition.projects.dir=..\\projects`  
`wrapper.java.additional.3=-Dignition.projects.dir=..\projects`

(windows host)

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [February 14, 2024, 3:20am UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/18 "2024-02-14T03:20:46Z")

</div>

Well, I don't really expect relative paths to work, so just don’t do that.

---

<div class="post-metadata">

**Author:** ![hunterdg](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/hunterdg/32/67774_2.png) [@hunterdg](https://forum.inductiveautomation.com/u/hunterdg)\
**Post date:** [February 14, 2024, 7:07am UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/19 "2024-02-14T07:07:12Z")

</div>

I'm a bit surprised at that response - use case is a container-less/portable, submoduled (version controlled) dev environment FWIW, but I guess we'll roll with it - thanks for confirmation!

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [February 14, 2024, 1:20pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/20 "2024-02-14T13:20:38Z")

</div>

Hmm, after looking I'm a bit unsure what to expect now.

The code I was thinking of does expect absolute paths, but it looks like when you set that property we attempt to convert it to an absolute path before passing it to the code that expects absolute paths...

Does the directory you're to resolve exist? Is there a warning from IgnitionProjectManager on startup about it?

---

<div class="post-metadata">

**Author:** ![hunterdg](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/hunterdg/32/67774_2.png) [@hunterdg](https://forum.inductiveautomation.com/u/hunterdg)\
**Post date:** [February 14, 2024, 3:16pm UTC](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275/21 "2024-02-14T15:16:09Z")

</div>

directory exists, gateway (and designer) load projects fine, issue is only on save.

```auto
INFO | jvm 1 | 2024/02/14 09:13:56 | I [g.ProjectManager] [15:13:56]: Using custom projects dir: ..\projects 
INFO | jvm 1 | 2024/02/14 09:13:56 | I [g.ProjectManager] [15:13:56]: Using custom projects dir: ..\projects

```

[Next page](https://forum.inductiveautomation.com/t/change-ignition-project-location/42275.md?page=2)
