Coder Social home page Coder Social logo

inkpot's Introduction

Inkpot

Inkpot - An container for Ink within the Unreal Engine developed by The Chinese Room.

This is a plugin for Unreal Engine 5.3 or later.
This is version 1.03.21 of the plugin.

Inkpot is a wrapper for the wonderful narrative scripting language Ink developed by Inkle Studios.

For a demo of how this integrates with an Unreal project see the inkpot demo.

For general support and chat with other users, check out Inkle's discord
(You'll find Inkpot chat in #unreal-projects)

Changes in 1.03.21

Added new abstract factory creation for stories, youclass UInkpotStory can now be subclassed on a per project basis.
Switched settings back to regular UDeveloperSettings as backed by CVAR version did not seem to work.
Fixed for 5.4 compilation error, template instantiation context error in InkPlusPlusTest.cpp(738).
Fixed compiler warnings in 5.4.
Fixed assertion when attempting to access no existent variable in story.
Fixed typo in headers that would fail on certain compilers ( #include "Coreminimal.h" should have been #include "CoreMinimal.h" )
FIxed Deprecation warning for GetAssetRegistryTags.
Updated serialize function to match parent in UInkpotStoryAsset.

Changes in 1.02.21

Fixed assertion when accessing variables that do not exist in the ink script.
Fixed relative path resolution bug that caused Ink source files to not import.
Improved compilation logging.

Changes in 1.01.21

Added tag accessor methods to InkpotLine & InkpotChoice.

Changes in 1.00.21

Inkplusplus port now matches version 21 of the Ink runtime engine, Ink version 1.1.1.
.net version updated to 5.0

Changes in 0.4.20

Settings backed by CVars added.
First pass on auto reload and replay of ink source.

Changes in 0.3.20

JSON serialisation now functional.

Changes in 0.2.20

External functions are now implemented, along with functional tests.

Changes in 0.1.20

Initial release.

Requirements

Inkpot works with version 5.3 of Unreal.
Inkpot includes a C++ port of Ink-engine-runtime version 21, which can be found in the InkPlusPlus module.

.Net framework 5.0

InkleCate requires the .net framework 5.0 which you can download from here.
https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-5.0.17-windows-x64-installer
(Without this you will not be able to import Ink source)

Visual Studio 2022

This plugin is distributed as source code which needs compiling.
You will need to install Visual Studio 2022.
https://visualstudio.microsoft.com/vs/

Installing the plugin

Make sure you have .Net framework 5.0 and Visual Studio 2022 installed.

In your project folder, create a folder named Plugins and copy the Inkpot plugin there.
Make sure the inkpot folder is called simply 'Inkpot'.

LIke this:

[Project Root Directory]/Plugins/Inkpot/

For an example of how this plugin should sit in your project see the InkpotDemo.
https://github.com/The-Chinese-Room/InkpotDemo

FAQ

I cannot compile the plugin.

My Ink files will not import.

  • Make sure you have .Net framework 5.0 installed.
    Inkpot uses Inklecate to compile the Ink files and it needs .net 5.0.
    Without this the Ink files will not import.

  • Inkpot has only been tested as an application plugin and not an engine plugin.
    It needs to be located in the project's plugins folder and not the engine plugin folder.

  • The plugin folder name should be simply 'inkpot',
    If you unzipped it directly to your project, it will likely be called 'inkpot-release'.
    eg \plugins\inkpot

  • See the inkpotdemo for how it should look in your project.
    https://github.com/The-Chinese-Room/InkpotDemo

My Ink file changes will not update on reimport.

  • Inky, the Ink script editor, will silently fail when saving to read only files.
    Some version control systems will make the file read only when you check them out, eg perforce.
    This can lead to some confusion when running Inky alongside Unreal & Inkpot.

Module Structure

Inkpot is made from three modules.

InkPlusPlus

InkPlusPlus is the name of the module that contains the C++ port of the Ink Engine Runtime which can be found here
https://github.com/inkle/ink/tree/master/ink-engine-runtime

When porting the code from C# to C++ we came to the conclusion that we should keep the source as close to the original C# as possible to make updates easier.
This has now been updated to Inkversion 21, Ink v1.1.1.

Inkpot

A set of wrapper classes for InkPlusPlus to simplify Blueprint coding.
Manages the lifetime of the Ink story and provides the interface for Ink variable setting, getting and change notification.

InkpotEditor

This is the unreal editor facing part of Ink pot.
This manages the defintion of data types in Unreal for inkpot and the compilation of new Ink scripts as they are added to the project.
It also contains the unit tests for InkPlusPlus.

Other folders

There area couple of supporting folders that make up the Inkpot distribution.

TestInkSource

All the Unit tests for Ink.
Currently 180 tests.

Third Party

This contains a copy of InkleCate and is used by the script importer to compile the scripts.

Thanks to

Inkle
for creating Ink. We've used this for much more than narrative.

UnrealInk
for giving us a good basis for creating InkPlusPlus.

Colin, Seb & Canute at TCR
for the brilliant job in porting the Ink Engine Runtime to C++, along with the editor asset handling, unit tests and Unreal integration, most of the work here in fact.

inkpot's People

Contributors

tcr-nick avatar solessfir avatar annalee avatar nightingalegregor avatar as3mbus avatar

Stargazers

Daniel Calderón avatar VedantS avatar  avatar Joshua Ordehi avatar Jan Kremer avatar Riku Ishikawa avatar  avatar Phillip Dykman avatar Oliver Judge avatar  avatar Sebastian Ploch avatar Phil Boltt avatar Aabid Dhamani avatar Barney Wilks avatar  avatar  avatar  avatar  avatar Nikita Gordeev avatar Lauren Gallagher avatar Marko Jukic avatar Rolando Rodrigues avatar  avatar  avatar Jason Warren avatar  avatar  avatar  avatar  avatar John McElmurray avatar Henry Ha avatar Diane Sparks avatar Max Black avatar  avatar  avatar halfd0rk avatar Richa Thomas avatar  avatar Vladyslav Ostrovskyi avatar  avatar Gavin avatar  avatar Richard Griffiths avatar WhiteFox Games avatar Axel Prieto avatar Gregory Pellechi avatar  avatar  avatar  avatar  avatar  avatar George Koutsikos avatar  avatar  avatar ShoulderStudios avatar Hafokem avatar btarg avatar Emrehan avatar jae kaplan avatar trvkv avatar Skalbe avatar Devlin McClure avatar  avatar Eugene Cherny avatar David Lusby avatar Giorgio Pomettini avatar Mark Anderson avatar Tim Samoff avatar Louys avatar  avatar Kevin Kimball avatar  avatar Airat Galiev avatar David Melo avatar  avatar  avatar  avatar Ali Eser avatar  avatar George Kokoris avatar José Manuel avatar  avatar Nicolas Darregert avatar  avatar  avatar  avatar Amber avatar  avatar  avatar Evan Pettie avatar  avatar Patrick Schnorbus avatar mcoms avatar Ash avatar  avatar MrRobin avatar kirill avatar Matthias Stöckli avatar Gregor Sönnichsen avatar Benjamin Stanley avatar

Watchers

 avatar kirill avatar  avatar  avatar Aabid Dhamani avatar  avatar  avatar Swastik Bhattacharyya avatar halfd0rk avatar  avatar

inkpot's Issues

Issue with importing files and Inklecate

Hi, I'm having an issue with importing .ink files in Unreal Engine 5.3.2.

I've installed the plugin successfully (I can access the new nodes in blueprinting). The trouble is that when trying to import an Inkle files, there is an error. Looking into the output log, here is the error message:

Inkpot: Warning: CompileInkString - C:\Users\Altorion\Downloads\InkTestStory.ink could not locate inklecate.exe.

I have looked into the readme, and installed .Net framework 3.1, as well as all other more recent versions, to no avail, the problem remains the same.

If I drag and drop into the content browser, nothing happens.
If I drag into the actual 'Content' folder of the unreal project, Unreal does detect that something happens, asks me whether or not it should import the new file, and when I click "import" it gives me this error message:

Failed to import file C:/Users/Altorion/Documents/Unreal Projects/UnrealRemnantsHope/Content/Dialogue/InkTestStory.ink.

Thanks in advance for your help!

TempInkFile.ink could not be opened

I got the following warning after dragging a new ink file into the browser (not named TempInkFile.ink):

Inkpot: Warning: CompileInkString - ../../../../../../../Projects/InkpotDemo/InkpotDemo/Plugins/Inkpot/Intermediate/InkCommandLine/1/2/TempInkFile.ink failed to compile ink string. Error Could not open file ''../../../../../../../Projects/InkpotDemo/InkpotDemo/Plugins/Inkpot/Intermediate/InkCommandLine/1/2/TempInkFile.ink''

Already tried adding safety apostrophes (see 1 below) and a check ensuring that the temp file already exists (see 2 below), didn't help.
grafik

Inkpot Plugin not appearing in packaged builds?

Everything is working just fine in editor, however when I package a shipping build for Windows I'm not seeing the text from my story appear. I believe the plugin isn't being included with the build, but I'm not sure why.

Here's how I'm packaging my build:
package

And here is the directory where I was expecting to see Inkpot related files, but there appear to be none:
buildirectory

Here is my build on Google Drive if it's helpful to poke around the directory.

Troubleshooting steps taken so far:

  • I've tried manually copying Inkpot DLLs from the Win64 folder to the packaged build
  • I've double checked that the plugin is indeed enabled
  • Built the project off the C Drive, as opposed to an external drive (People on the Unreal forums have reported this fixing issues with plugins not being packaged correctly)
  • Enabled the plugin by default on all projects (Another culprit according to some people online that can cause plugins to not get packaged correctly)

Any help would be much appreciated, thank you! This plugin has been amazing to work with so far.

BUILD FAILED when rebuilding

AutomationTool exiting with ExitCode=6 (6)
BUILD FAILED
when rebuilding on cmd

`Running AutomationTool...
Using bundled DotNet SDK version: 6.0.302
Starting AutomationTool...
Parsing command line: BuildPlugin -plugin="F:\1game DEv\UE\Inkpot5\InkpotDemo-release\Inkpot.uplugin" -package="F:\1game DEv\UE\Inkpot5\inker"
Initializing script modules...
Total script module initialization time: 0.19 s.
Executing commands...
Copying 301 file(s) using max 64 thread(s)
Reading plugin from F:\1game DEv\UE\Inkpot5\inker\HostProject\Plugins\Inkpot\Inkpot.uplugin...
Building plugin for host platforms: Win64
Running: F:\1game DEv\UE_5.3\Engine\Binaries\ThirdParty\DotNet\6.0.302\windows\dotnet.exe "F:\1game DEv\UE_5.3\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" UnrealEditor Win64 Development -Project="F:\1game DEv\UE\Inkpot5\inker\HostProject\HostProject.uproject" -plugin="F:\1game DEv\UE\Inkpot5\inker\HostProject\Plugins\Inkpot\Inkpot.uplugin" -noubtmakefiles -manifest="F:\1game DEv\UE\Inkpot5\inker\HostProject\Saved\Manifest-UnrealEditor-Win64-Development.xml" -nohotreload -log="C:\Users\Administrator\AppData\Roaming\Unreal Engine\AutomationTool\Logs\F+1game+DEv+UE_5.3\UBT-UnrealEditor-Win64-Development.txt"
Log file: C:\Users\Administrator\AppData\Roaming\Unreal Engine\AutomationTool\Logs\F+1game+DEv+UE_5.3\UBT-UnrealEditor-Win64-Development.txt
HostProject.uproject is has no code, but is being treated as a code-based project because: Inkpot plugin is enabled. Creating temporary .Target.cs files.
Total execution time: 2.79 seconds
Unhandled exception: System.ArgumentNullException: Value cannot be null. (Parameter 'element')
   at System.Attribute.GetCustomAttributes(MemberInfo element, Type attributeType, Boolean inherit)
   at System.Reflection.CustomAttributeExtensions.GetCustomAttributes[T](MemberInfo element)
   at UnrealBuildTool.ModuleRules.IsValidForTarget(Type ModuleType, ReadOnlyTargetRules TargetRules, String& InvalidReason) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\ModuleRules.cs:line 1623
   at UnrealBuildTool.UEBuildTarget.AddAllValidModulesToTarget(ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildTarget.cs:line 3886
   at UnrealBuildTool.UEBuildTarget.PreBuildSetup(ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildTarget.cs:line 3354
   at UnrealBuildTool.UEBuildTarget.Create(TargetDescriptor Descriptor, Boolean bSkipRulesCompile, Boolean bForceRulesCompile, Boolean bUsePrecompiled, UnrealIntermediateEnvironment IntermediateEnvironment, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildTarget.cs:line 1366
   at UnrealBuildTool.BuildMode.CreateMakefileAsync(BuildConfiguration BuildConfiguration, TargetDescriptor TargetDescriptor, ISourceFileWorkingSet WorkingSet, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 1114
   at UnrealBuildTool.BuildMode.BuildAsync(List`1 TargetDescriptors, BuildConfiguration BuildConfiguration, ISourceFileWorkingSet WorkingSet, BuildOptions Options, FileReference WriteOutdatedActionsFile, ILogger Logger, Boolean bSkipPreBuildTargets) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 396
   at UnrealBuildTool.BuildMode.ExecuteAsync(CommandLineArguments Arguments, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 252
   at UnrealBuildTool.UnrealBuildTool.Main(String[] ArgumentsArray) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:line 659
Took 2.90s to run dotnet.exe, ExitCode=6
UnrealBuildTool failed. See log for more details. (C:\Users\Administrator\AppData\Roaming\Unreal Engine\AutomationTool\Logs\F+1game+DEv+UE_5.3\UBT-UnrealEditor-Win64-Development.txt)
AutomationTool executed for 0h 0m 3s
AutomationTool exiting with ExitCode=6 (6)
BUILD FAILED
PS F:\1game DEv\UE_5.3\Engine\Build\BatchFiles> .\RunUAT.bat BuildPlugin -plugin="E:\upplugin\Inkpot5\Inkpot-release\Inkpot.uplugin" -package="E:\upplugin\Inkpot5\inkpot"
Running AutomationTool...
Using bundled DotNet SDK version: 6.0.302
Starting AutomationTool...
Parsing command line: BuildPlugin -plugin=E:\upplugin\Inkpot5\Inkpot-release\Inkpot.uplugin -package=E:\upplugin\Inkpot5\inkpot
Initializing script modules...
Total script module initialization time: 0.16 s.
Executing commands...
Copying 301 file(s) using max 64 thread(s)
Reading plugin from E:\upplugin\Inkpot5\inkpot\HostProject\Plugins\Inkpot\Inkpot.uplugin...
Building plugin for host platforms: Win64
Running: F:\1game DEv\UE_5.3\Engine\Binaries\ThirdParty\DotNet\6.0.302\windows\dotnet.exe "F:\1game DEv\UE_5.3\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" UnrealEditor Win64 Development -Project="E:\upplugin\Inkpot5\inkpot\HostProject\HostProject.uproject" -plugin="E:\upplugin\Inkpot5\inkpot\HostProject\Plugins\Inkpot\Inkpot.uplugin" -noubtmakefiles -manifest="E:\upplugin\Inkpot5\inkpot\HostProject\Saved\Manifest-UnrealEditor-Win64-Development.xml" -nohotreload -log="C:\Users\Administrator\AppData\Roaming\Unreal Engine\AutomationTool\Logs\F+1game+DEv+UE_5.3\UBT-UnrealEditor-Win64-Development.txt"
Log file: C:\Users\Administrator\AppData\Roaming\Unreal Engine\AutomationTool\Logs\F+1game+DEv+UE_5.3\UBT-UnrealEditor-Win64-Development.txt
HostProject.uproject is has no code, but is being treated as a code-based project because: Inkpot plugin is enabled. Creating temporary .Target.cs files.
Total execution time: 2.54 seconds
Unhandled exception: System.ArgumentNullException: Value cannot be null. (Parameter 'element')
   at System.Attribute.GetCustomAttributes(MemberInfo element, Type attributeType, Boolean inherit)
   at System.Reflection.CustomAttributeExtensions.GetCustomAttributes[T](MemberInfo element)
   at UnrealBuildTool.ModuleRules.IsValidForTarget(Type ModuleType, ReadOnlyTargetRules TargetRules, String& InvalidReason) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\ModuleRules.cs:line 1623
   at UnrealBuildTool.UEBuildTarget.AddAllValidModulesToTarget(ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildTarget.cs:line 3886
   at UnrealBuildTool.UEBuildTarget.PreBuildSetup(ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildTarget.cs:line 3354
   at UnrealBuildTool.UEBuildTarget.Create(TargetDescriptor Descriptor, Boolean bSkipRulesCompile, Boolean bForceRulesCompile, Boolean bUsePrecompiled, UnrealIntermediateEnvironment IntermediateEnvironment, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildTarget.cs:line 1366
   at UnrealBuildTool.BuildMode.CreateMakefileAsync(BuildConfiguration BuildConfiguration, TargetDescriptor TargetDescriptor, ISourceFileWorkingSet WorkingSet, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 1114
   at UnrealBuildTool.BuildMode.BuildAsync(List`1 TargetDescriptors, BuildConfiguration BuildConfiguration, ISourceFileWorkingSet WorkingSet, BuildOptions Options, FileReference WriteOutdatedActionsFile, ILogger Logger, Boolean bSkipPreBuildTargets) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 396
   at UnrealBuildTool.BuildMode.ExecuteAsync(CommandLineArguments Arguments, ILogger Logger) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 252
   at UnrealBuildTool.UnrealBuildTool.Main(String[] ArgumentsArray) in D:\build\++UE5\Sync\Engine\Saved\CsTools\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:line 659
Took 2.66s to run dotnet.exe, ExitCode=6
UnrealBuildTool failed. See log for more details. (C:\Users\Administrator\AppData\Roaming\Unreal Engine\AutomationTool\Logs\F+1game+DEv+UE_5.3\UBT-UnrealEditor-Win64-Development.txt)
AutomationTool executed for 0h 0m 3s
AutomationTool exiting with ExitCode=6 (6)
BUILD FAILED`

when building on VS

Severity	Code	Description	Project	File	Line	Suppression State	Details
Error	MSB3073	The command ""F:\1game DEv\UE_5.3\Engine\Build\BatchFiles\Build.bat" FacelessLandsEditor Win64 Development -Project="F:\1game DEv\1 projects\FacelessLands\FacelessLands\FacelessLands.uproject" -WaitMutex -FromMsBuild" exited with code 6.	FacelessLands	C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets	44	

Inkpot fails to compile on UE 5.4.2

Trying to build a fresh project with 5.4.2 throws out an error

image

Building it manually through VS2022 gives this error:

3>H:\UE_5.4\Engine\Source\Runtime\Core\Public\String\FormatStringSan.h(99): error C2338: static_assert failed: ''%s' expects TCHAR*; use '%hs' for const char*`.'

3>H:\UE_5.4\Engine\Source\Runtime\Core\Public\String\FormatStringSan.h(99): note: the template instantiation context (the oldest one first) is

3>H:\UnrealProjects\Parhelion\Plugins\Inkpot\Source\InkpotEditor\Private\Test\InkPlusPlusTest.cpp(738): note: see reference to class template instantiation 'UE::Core::Private::FormatStringSan::TPresentErr<1>::TErrMsg<UE::Core::Private::FormatStringSan::TAtArgPos<1>>' being compiled

Compilation errors due to INK_DBG

Hello,

First of all, thank you so much for sharing this repo, it'll be incredibly useful to us as we are moving engine with a project which was making extensive use of Ink, and it spares me the time of having to rewrite Ink in CPP myself!

Unfortunately, when trying to compile the plugin, I get quite a few errors due to the INK_DBG macro uses in InkpotStory.cpp. I can comment them all and it works fine then.

I'm on UE5.3.

Here's the compilation log after uncommenting one of the line, if I uncomment more it basically duplicates that for the other lines:

[1/1] Compile [x64] Module.Inkpot.cpp
 D:\PerforceWorkspace\UnrealProjects\X\Plugins\Inkpot\Source\Inkpot\Private\Inkpot\InkpotStory.cpp(345): error C3688: invalid literal suffix 'msg'; literal operator or literal operator template 'operator ""msg' not found
 D:\PerforceWorkspace\UnrealProjects\X\Plugins\Inkpot\Source\Inkpot\Private\Inkpot\InkpotStory.cpp(345): error C3553: decltype expects an expression not a type
 D:\PerforceWorkspace\UnrealProjects\X\Plugins\Inkpot\Source\Inkpot\Private\Inkpot\InkpotStory.cpp(345): error C2062: type 'unknown-type' unexpected
 D:\PerforceWorkspace\UnrealProjects\X\Plugins\Inkpot\Source\Inkpot\Private\Inkpot\InkpotStory.cpp(345): error C2955: 'TIsArrayOrRefOfTypeByPredicate': use of class template requires template argument list
 D:\UE_5.3\Engine\Source\Runtime\Core\Public\Templates\IsArrayOrRefOfTypeByPredicate.h(13): note: see declaration of 'TIsArrayOrRefOfTypeByPredicate'
 D:\PerforceWorkspace\UnrealProjects\X\Plugins\Inkpot\Source\Inkpot\Private\Inkpot\InkpotStory.cpp(345): error C2661: 'UE::Logging::Private::FStaticBasicLogRecord::FStaticBasicLogRecord': no overloaded function takes 4 arguments
 D:\PerforceWorkspace\UnrealProjects\X\Plugins\Inkpot\Source\Inkpot\Private\Inkpot\InkpotStory.cpp(345): note: while trying to match the argument list '(const char *, int, ELogVerbosity::Type, UE::Logging::Private::FStaticBasicLogDynamicData)'
 D:\PerforceWorkspace\UnrealProjects\X\Plugins\Inkpot\Source\Inkpot\Private\Inkpot\InkpotStory.cpp(345): error C2131: expression did not evaluate to a constant
 D:\PerforceWorkspace\UnrealProjects\X\Plugins\Inkpot\Source\Inkpot\Private\Inkpot\InkpotStory.cpp(345): note: a non-constant (sub-)expression was encountered

I didn't do anything apart from adding the plugin to my Plugins folder, and enabling it in Unreal.

Thanks,

Clem

Unable to compile due to lack of header files?

Hello, and many thanks for building this Ink & Unreal integration! I know my problem is very likely due to user error and my own inexperience, so apologies. I have been having problems with getting the code to compile in Visual Studio.
Whenever I attempt a compile it fails because Visual Studio cannot find the header files for each .cpp

Details

Build started...
1>------ Build started: Project: Inkpot, Configuration: Debug x64 ------
1>InkPlusPlus.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\InkPlusPlus.cpp(1,10): fatal  error C1083: Cannot open include file: 'InkPlusPlus.h': No such file or directory
1>CallStack.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\CallStack.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/CallStack.h': No such file or directory
1>Choice.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Choice.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Choice.h': No such file or directory
1>ChoicePoint.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\ChoicePoint.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/ChoicePoint.h': No such file or directory
1>Container.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Container.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Container.h': No such file or directory
1>ControlCommand.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\ControlCommand.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/ControlCommand.h': No such file or directory
1>DebugMetadata.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\DebugMetadata.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/DebugMetadata.h': No such file or directory
1>Divert.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Divert.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Divert.h': No such file or directory
1>Flow.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Flow.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Flow.h': No such file or directory
1>InkList.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\InkList.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/InkList.h': No such file or directory
1>InkListItem.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\InkListItem.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/InkListItem.h': No such file or directory
1>JsonExtension.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\JsonExtension.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/JsonExtension.h': No such file or directory
1>JsonSerialisation.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\JsonSerialisation.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/JsonSerialisation.h': No such file or directory
1>ListDefinition.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\ListDefinition.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/ListDefinition.h': No such file or directory
1>ListDefinitionsOrigin.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\ListDefinitionsOrigin.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/ListDefinitionsOrigin.h': No such file or directory
1>NamedContent.cpp
1>NativeFunctionCall.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\NativeFunctionCall.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/NativeFunctionCall.h': No such file or directory
1>Object.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Object.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Object.h': No such file or directory
1>Path.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Path.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Path.h': No such file or directory
1>Pointer.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Pointer.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Pointer.h': No such file or directory
1>Generating Code...
1>Compiling...
1>SearchResult.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\SearchResult.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/SearchResult.h': No such file or directory
1>SimpleJson.cpp
1>SimpleJsonObject.cpp
1>StatePatch.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\StatePatch.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/StatePatch.h': No such file or directory
1>Story.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Story.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Story.h': No such file or directory
1>StoryException.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\StoryException.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/StoryException.h': No such file or directory
1>StoryState.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\StoryState.cpp(2,10): fatal  error C1083: Cannot open include file: 'Ink/StoryState.h': No such file or directory
1>Tag.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Tag.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Tag.h': No such file or directory
1>Value.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\Value.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/Value.h': No such file or directory
1>VariableAssignment.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\VariableAssignment.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/VariableAssignment.h': No such file or directory
1>VariableReference.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\VariableReference.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/VariableReference.h': No such file or directory
1>VariableState.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\ink\VariableState.cpp(1,10): fatal  error C1083: Cannot open include file: 'Ink/VariableState.h': No such file or directory
1>InkPlusPlusLog.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\utility\InkPlusPlusLog.cpp(1,10): fatal  error C1083: Cannot open include file: 'Utility/InkPlusPlusLog.h': No such file or directory
1>InkPlusPlusUtility.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkplusplus\private\utility\InkPlusPlusUtility.cpp(1,10): fatal  error C1083: Cannot open include file: 'Utility/InkPlusPlusUtility.h': No such file or directory
1>InkpotStoryAssetActions.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpoteditor\private\asset\InkpotStoryAssetActions.cpp(1,10): fatal  error C1083: Cannot open include file: 'Asset/InkpotStoryAssetActions.h': No such file or directory
1>InkpotStoryAssetFactory.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpoteditor\private\asset\InkpotStoryAssetFactory.cpp(1,10): fatal  error C1083: Cannot open include file: 'Asset/InkpotStoryAssetFactory.h': No such file or directory
1>InkCompiler.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpoteditor\private\compiler\InkCompiler.cpp(1,10): fatal  error C1083: Cannot open include file: 'Compiler/InkCompiler.h': No such file or directory
1>InkpotEditorModule.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpoteditor\private\InkpotEditorModule.cpp(1,10): fatal  error C1083: Cannot open include file: 'InkpotEditorModule.h': No such file or directory
1>InkPlusPlusTest.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpoteditor\private\test\InkPlusPlusTest.cpp(9,10): fatal  error C1083: Cannot open include file: 'Misc/AutomationTest.h': No such file or directory
1>InkpotStoryAsset.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\asset\InkpotStoryAsset.cpp(1,10): fatal  error C1083: Cannot open include file: 'Asset/InkpotStoryAsset.h': No such file or directory
1>Generating Code...
1>Compiling...
1>InkpotModule.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\InkpotModule.cpp(1,10): fatal  error C1083: Cannot open include file: 'InkpotModule.h': No such file or directory
1>Inkpot.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\inkpot\Inkpot.cpp(1,10): fatal  error C1083: Cannot open include file: 'Inkpot/Inkpot.h': No such file or directory
1>InkpotChoice.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\inkpot\InkpotChoice.cpp(1,10): fatal  error C1083: Cannot open include file: 'Inkpot/InkpotChoice.h': No such file or directory
1>InkpotStories.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\inkpot\InkpotStories.cpp(1,10): fatal  error C1083: Cannot open include file: 'Inkpot/InkpotStories.h': No such file or directory
1>InkpotStory.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\inkpot\InkpotStory.cpp(1,10): fatal  error C1083: Cannot open include file: 'Inkpot/InkpotStory.h': No such file or directory
1>InkpotStoryInternal.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\inkpot\InkpotStoryInternal.cpp(1,10): fatal  error C1083: Cannot open include file: 'Inkpot/InkpotStoryInternal.h': No such file or directory
1>InkpotValue.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\inkpot\InkpotValue.cpp(1,10): fatal  error C1083: Cannot open include file: 'Inkpot/InkpotValue.h': No such file or directory
1>InkpotWatch.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\inkpot\InkpotWatch.cpp(1,10): fatal  error C1083: Cannot open include file: 'Inkpot/InkpotWatch.h': No such file or directory
1>InkpotLog.cpp
1>F:\Inkpot-ink lang to UE\Inkpot-release\source\inkpot\private\utility\InkpotLog.cpp(1,10): fatal  error C1083: Cannot open include file: 'Utility/InkpotLog.h': No such file or directory
1>Generating Code...
1>Done building project "Inkpot.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build started at 2:41 PM and took 04.230 seconds ==========

I know the header files are not with the files or in any other directory in the project. I'm not sure if I need to somehow generate the .h files, if the project does not need them to compile, and-or I've messed up at some other stage or setting in the compile?

Import the plugin by using submodule

Hello, I've just added your plugin into my project using submodule, there is no problem.
But I have to manually ignore the submodule content to not to be detected in my local changes, because of Unreal Engine compile result.

Could you please add a .gitignore in your repository to make us easier if we want to import the plugin by using submodule ways? Thank you so much before.

Unable to import ink files that INCLUDE other files

I'm trying to create a master ink file that includes my other files for the sake of making it possible to communicate between all of them (and to avoid having all text stored in one massive story file).

image

However, any time I try to import it into Unreal, it fails with the following message.
{"issues":["ERROR: 'TempInkFile.ink' line 1: Failed to load: 'Sheriff.ink'","ERROR: 'TempInkFile.ink' line 2: Failed to load: 'TestFile.ink'"]}:

My assumption so far is that it can't load the files because they aren't present in the temp folder where the compile is happening. Trying to place the files in the temp folder doesn't resolve it, since they just get deleted when the compile begins. Is there any way around this?

error C2974: “Ink::TValue”:“T”的 模板 参数无效,应为类型

当我尝试添加到5.4中 报错
G:\UE_5.4\Engine\Source\Runtime\Core\Public\Containers\Array.h(3173): error C2974: “Ink::TValue”:“T”的 模板 参数无效,应为类型
1>G:\Git\tdrpg\Plugins\Inkpot\Source\InkPlusPlus\Public\Ink\Value.h(71): note: 参见“Ink::TValue”的声明
1>G:\UE_5.4\Engine\Source\Runtime\Core\Public\Containers\Array.h(3173): note: 模板实例化上下文(最早的实例化上下文)为
1>G:\Git\tdrpg\Plugins\Inkpot\Source\InkPlusPlus\Public\Ink\NativeFunctionCall.h(78): note: 查看对正在编译的 类 模板 实例化“TArray<TSharedPtrInk::FValue,ESPMode::ThreadSafe,FDefaultAllocator>”的引用
1>G:\UE_5.4\Engine\Source\Runtime\Core\Public\Containers\Array.h(419): note: 在编译 类 模板 成员函数“TArray<TSharedPtrInk::FValue,ESPMode::ThreadSafe,FDefaultAllocator>::TArray(std::initializer_list)”时
1> with
1> [
1> InElementType=TSharedPtrInk::FValue,ESPMode::ThreadSafe
1> ]
1>G:\Git\tdrpg\Plugins\Inkpot\Source\InkPlusPlus\Private\Ink\NativeFunctionCall.cpp(214): note: 请参阅 "Ink::FNativeFunctionCall::CallBinaryListOperation" 中对 "TArray<TSharedPtrInk::FValue,ESPMode::ThreadSafe,FDefaultAllocator>::TArray" 的第一个引用
1>G:\UE_5.4\Engine\Source\Runtime\Core\Public\Containers\Array.h(424): note: 查看对正在编译的函数 模板 实例化“void TArray<TSharedPtrInk::FValue,ESPMode::ThreadSafe,FDefaultAllocator>::CopyToEmpty<_Elem,int>(const OtherElementType *,OtherSizeType,int)”的引用
1> with
1> [
1> _Elem=TSharedPtrInk::FValue,ESPMode::ThreadSafe,
1> OtherElementType=TSharedPtrInk::FValue,ESPMode::ThreadSafe,
1> OtherSizeType=int
1> ]

Template error with new project in UE 5.4.2

Hey Nick, I'm running into this template error when setting up a new project in 5.4.2. Looks like this area of code hasn't changed in a while so I'm at a loss as to why it is throwing compilation errors now. Any insights?

1>E:\UnrealEngine\Engine\Source\Runtime\Core\Public\Containers\Array.h(3173): error C2974: 'Ink::TValue': invalid template argument for 'T', type expected
1>E:\UnrealEngine\Projects\InkpotSanity\Plugins\Inkpot\Source\InkPlusPlus\Public\Ink\Value.h(71): note: see declaration of 'Ink::TValue'
1>E:\UnrealEngine\Engine\Source\Runtime\Core\Public\Containers\Array.h(3173): note: the template instantiation context (the oldest one first) is
1>E:\UnrealEngine\Projects\InkpotSanity\Plugins\Inkpot\Source\InkPlusPlus\Public\Ink\NativeFunctionCall.h(78): note: see reference to class template instantiation 'TArray<TSharedPtr<Ink::FValue,ESPMode::ThreadSafe>,FDefaultAllocator>' being compiled
1>E:\UnrealEngine\Engine\Source\Runtime\Core\Public\Containers\Array.h(419): note: while compiling class template member function 'TArray<TSharedPtr<Ink::FValue,ESPMode::ThreadSafe>,FDefaultAllocator>::TArray(std::initializer_list<InElementType>)'
1>        with
1>        [
1>            InElementType=TSharedPtr<Ink::FValue,ESPMode::ThreadSafe>
1>        ]
1>E:\UnrealEngine\Projects\InkpotSanity\Plugins\Inkpot\Source\InkPlusPlus\Private\Ink\NativeFunctionCall.cpp(214): note: see the first reference to 'TArray<TSharedPtr<Ink::FValue,ESPMode::ThreadSafe>,FDefaultAllocator>::TArray' in 'Ink::FNativeFunctionCall::CallBinaryListOperation'
1>E:\UnrealEngine\Engine\Source\Runtime\Core\Public\Containers\Array.h(424): note: see reference to function template instantiation 'void TArray<TSharedPtr<Ink::FValue,ESPMode::ThreadSafe>,FDefaultAllocator>::CopyToEmpty<_Elem,int>(const OtherElementType *,OtherSizeType,int)' being compiled
1>        with
1>        [
1>            _Elem=TSharedPtr<Ink::FValue,ESPMode::ThreadSafe>,
1>            OtherElementType=TSharedPtr<Ink::FValue,ESPMode::ThreadSafe>,
1>            OtherSizeType=int
1>        ]

Cannot import ink files

I have all the requirements that I am aware of: .NET 5.0 and MSVC 143. It compiles just fine, and I can confirm it works through blueprints. However when I drag the ink scripts into unreal, nothing happens. My plugin is located in the Plugins/Inkpot folders under the root of the game project. Any suggestions?

Unable to import Inkpot files to Unreal Project when project path uses spaces.

One of our team members was unable to import .ink files to the project until we realized the project path had spaces in it. Seems that it could not find the temp files created in Plugins\Inkpot\Intermediate\InkCommandLine\1\2

Removing the spaces solved the issue, but figured I would report this to be investigated.

Inkpot, InkPlusPlus, and InkpotEditor not building

Inky
Inky2
I have followed the steps to install the Plugin, I have the .NET version and Visual Studio 2022 as listed. I'm unfamiliar with how I can build these three from source. Any advice? Thank you for your help.

Build issues

I seem to be getting this build error when building from source:

Severity Code Description Project File Line Suppression State Tool Details
Error MSB3073 The command ""C:\Program Files\Epic Games\UE_5.3\Engine\Build\BatchFiles\Build.bat" TDA_TheGameEditor Win64 Development -Project="C:\Users\henry\Perforce\TDAGame\TDA_TheGame.uproject" -WaitMutex -FromMsBuild" exited with code -532462766. TDA_TheGame C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets 44 Exec

It seems to work fine in Unreal Engine when enabling the plugin, but I get this error as soon as I try to build.

Save/Load Alternative to JSON Serialisation?

You will note that 2 of the tests fail, these are the JSON serialisation tests & we simply did not need to implement them in our usage case.

So I'm aware that JSON serialisation isn't part of this plugin, and this isn't technically an issue- I just don't know where else to post this discussion. I would love to use plugin for a translation of a game I released, however I don't know how to implement save/load functionality without JSON serialisation.

  1. Is there a way to create save/load functionality of the ink story state using Unreal blueprints? (Without relying on JSON serialisation or diving into C++)
  2. Is anyone thinking about adding JSON serialisation support? If so please let me know, as I'd be interested in commissioning this feature.

(Re 2: I'm aware that The Chinese Room doesn't have current plans to add this feature, so posing this question more to the community)

Story asset BP accessibility

Not an issue so much as a question, but is there a reason to not make the InkStoryAsset BP accessible? It seems like i should be able to pass a different story asset to an instance of say some actor and have that actor control the story flow.

Alternatively I might just be misunderstanding how unreal handles assets...

External Functions

I took a stab at allowing external functions to be called. Probably not the best approach, but it does give access to UFUNCTION C++ static functions, as well as function libraries only created in Blueprints. It's somewhat restrictive on interpreting the function path replacing underscores with periods. But perhaps something for others to go off of. Could provide thoughts here, too. Thanks!

void Ink::FStory::CallExternalFunction(const FString& funcName, int numberOfArguments)
{
	FString FFunctionName = funcName;

	FString ProjectName = FApp::GetProjectName();
	if (FFunctionName.StartsWith(ProjectName))
	{
		// ProjectName_Class_Function => ProjectName.Class.Function
		int Index = 0;
		if (FFunctionName.FindChar('_', Index))
			FFunctionName[Index] = '.';
		if (FFunctionName.FindLastChar('_', Index))
			FFunctionName[Index] = '.';
	}
	else
	{
		// BlueprintFunctionLibrary_C_Function => BlueprintFunctionLibrary_C.Function
		FFunctionName.ReplaceInline(TEXT("_C_"), TEXT("_C."));
	}

	UFunction* Function = FindObject<UFunction>(nullptr, *FFunctionName, false);
	if (Function)
	{
		UObject* Caller = Function->GetOuterUClass()->GetDefaultObject();
		if (Caller)
		{
			TArray<uint8> Params;
			Params.SetNum(Function->ParmsSize);
			uint8* Buffer = (uint8*)Params.GetData();

			FMemory::Memzero(Buffer, Function->ParmsSize);

			int Counter = 0;
			if (numberOfArguments <= Function->NumParms)
			{
				for (TFieldIterator<FProperty> It(Function); It && It->HasAnyPropertyFlags(CPF_Parm); ++It)
				{
					TSharedPtr<Ink::FObject> InObject = State->GetEvaluationStack()[Counter];
					TSharedPtr<Ink::FValueBool> boolValue = FObject::DynamicCastTo<Ink::FValueBool>(InObject);
					TSharedPtr<Ink::FValueInt> intValue = FObject::DynamicCastTo<Ink::FValueInt>(InObject);
					TSharedPtr<Ink::FValueFloat> floatValue = FObject::DynamicCastTo<Ink::FValueFloat>(InObject);
					TSharedPtr<Ink::FValueString> stringValue = FObject::DynamicCastTo<Ink::FValueString>(InObject);

					FProperty* FunctionProperty = *It;
					FString Type = FunctionProperty->GetCPPType();

					if (Type == "int32")
					{
						*FunctionProperty->ContainerPtrToValuePtr<int32>(Buffer) = intValue->GetValue();
					}
					else if (Type == "bool" && boolValue.IsValid())
					{
						*FunctionProperty->ContainerPtrToValuePtr<bool>(Buffer) = boolValue->GetValue();
					}
					else if (Type == "double" && floatValue.IsValid())
					{
						*FunctionProperty->ContainerPtrToValuePtr<double>(Buffer) = floatValue->GetValue();
					}
					else if (Type == "float" && floatValue.IsValid())
					{
						*FunctionProperty->ContainerPtrToValuePtr<float>(Buffer) = floatValue->GetValue();
					}
					else if (Type == "FString" && stringValue.IsValid())
					{
						*FunctionProperty->ContainerPtrToValuePtr<FString>(Buffer) = stringValue->GetValue();
					}
					else
					{
						// Parameter unusable.
						Counter--;
					}

					Counter++;

					if (Counter == numberOfArguments)
						break;
				}
			}

			Caller->ProcessEvent(Function, Buffer);
		}
	}
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.