Hi,
I feel like I'm missing something when it comes to being able to save a game state.
For context I'm creating an app rather than a game. Which looks like this:

I want to be able to save the node graph and be able to have the user reopen different projects. This is what I've written so far as a save file:

extends Node


const SAVE_FILE = "user://save_file.save"
var g_data = {}


func save_data():
	var file = FileAccess.new.call()
	file.open(SAVE_FILE, FileAccess.WRITE)
	file.store_var(g_data)
	file.close()
	
	
func load_data():
	var file = FileAccess.new.call()
	
	if not file.file_exists(SAVE_FILE):
		g_data = {}

I've tried following a couple tutorials but I just can't manage to get saving to work. Any help would be appreciated!

Isn't that code producing error messages?

Try this:

extends Node

const SAVE_FILE: String = "user://save_file.save"
var g_data: Dictionary = {}

func save_data() -> void:
	var file: FileAccess
	var err: Error

	file = FileAccess.open(SAVE_FILE, FileAccess.WRITE)
	err = OK if file != null else FileAccess.get_open_error()
	if err != OK:
		print_debug("Failed to open file '%s' for writing, error=%d" % [SAVE_FILE, err])
		return
       file.store_var(g_data)
       file.close()

func load_data() -> void:
	var file: FileAccess
	var err: Error

        if not FileAccess.file_exists(SAVE_FILE):
                return

        file = FileAccess.open(SAVE_FILE, FileAccess.READ)
	err = OK if file != null else FileAccess.get_open_error()
	if err != OK:
		print_debug("Failed to open file '%s' for reading, error=%d" % [SAVE_FILE, err])
		return

	g_data = file.get_var()
        file.close()