GitWit is an open-source cloud-based code editing environment with custom AI code generation, live preview, real-time collaboration, and AI chat.
For the latest updates, join our Discord server: discord.gitwit.dev.
A quick overview of the tech before we start: The deployment uses a NextJS app for the frontend and an ExpressJS server on the backend.
Required accounts to get started:
- Clerk: Used for user authentication.
- E2B: Used for the terminals and live preview.
- Anthropic for code generation.
- OpenAI: API keys for applying AI-generated code diffs.
No surprise in the first step:
git clone https://github.com/jamesmurdza/gitwit
cd gitwit
Copy .env files:
cp .env.example .env
cp web/.env.example web/.env
cp server/.env.example server/.env
Install dependencies:
npm install
Install and start Postgres:
brew install postgres
brew services start postgresql
Create a database:
psql postgres -c "CREATE DATABASE gitwit;"
# psql postgres -U postgres -c "CREATE DATABASE gitwit;"
Initialize the database schema:
npm run db:generate
npm run db:migrate
After making any changes to your database schema, run these commands again to update your local database. The migration files created are not committed to version control.
Instructions
Create a .env.production
file with your production database credentials:
DATABASE_URL=
Initialize or migrate the database:
npm run db:generate:prod
npm run db:migrate:prod
Production migration files are committed to version control.
Get API keys for E2B, Clerk, OpenAI, and Anthropic.
Add them to the .env
file along with the database connection string.
DATABASE_URL='🔑'
E2B_API_KEY='🔑'
CLERK_SECRET_KEY='🔑'
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY='🔑'
OPENAI_API_KEY='🔑'
ANTHROPIC_API_KEY='🔑'
Start the web app and server in development mode:
npm run dev
Instructions
Setup GitHub OAuth for authentication.
Update .env
:
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
To get your GitHub Client ID and Client Secret:
- Go to GitHub Developer Settings and create a new OAuth App
- Set the "Authorization callback URL" to
http://localhost:3000/loading
if running locally - Set the "Homepage URL" to
http://localhost:3000
if running locally - Get the "Client ID" and "Client Secret" from the OAuth App
To get a Personal Access Token (PAT):
- Go to GitHub Settings > Developer settings > Personal access tokens
- Click "Generate new token (classic)"
- Give it a descriptive name (e.g., "GitWit Testing")
- Select the necessary scopes (typically
repo
,user
,read:org
) - Generate the token and copy it securely
Instructions
The steps above do not include steps to setup Dokku, which is required for deployments.
Note: This is completely optional to set up if you just want to run GitWit.
Setting up deployments first requires a separate domain (such as gitwit.app, which we use).
We then deploy Dokku on a separate server, according to this guide: https://dev.to/jamesmurdza/host-your-own-paas-platform-as-a-service-on-amazon-web-services-3f0d
And we install dokku-daemon with the following commands:
git clone https://github.com/dokku/dokku-daemon
cd dokku-daemon
sudo make install
systemctl start dokku-daemon
The GitWit platform connects to the Dokku server via SSH, using SSH keys specifically generated for this connection. The SSH key is stored on the GitWit server, and the following environment variables are set in .env
:
DOKKU_HOST=
DOKKU_USERNAME=
DOKKU_KEY=
Instructions
Templates are pre-built environments which serve as the basis for new projects. Each template is spawned from its own E2B sandbox template.
Each template is a directory inside the templates
directory. The template should have at least an e2b.Dockerfile
, which is used by E2B to create the development environment. Optionally, a Dockerfile
can be added which will be used by Dokku to create the project build when it is deployed.
To deploy and test templates, you must have an E2B account and the E2B CLI tools installed. Then, run:
e2b auth login
To deploy a template to E2B, run:
npm run templates:deploy [TEMPLATENAME]
Leaving out the TEMPLATENAME parameter will redeploy all previously deployed templates.
Finally, to test your template run:
e2b sandbox spawn TEMPLATENAME
cd project
You will see a URL in the form of https://xxxxxxxxxxxxxxxxxxx.e2b-staging.com
.
Now, run the command to start your development server.
To see the running server, visit the public url https://<PORT>-xxxxxxxxxxxxxxxxxxx.e2b-staging.com
.
If you've done this and it works, let us know and we'll add your template to GitWit! Please reach out to us on Discord with any questions or to submit your working template.
To run the test suite, ensure both web app and server are running.
First, install dependencies in the test directory:
cd tests
npm install
Set up the following environment variables in the test directory:
GITHUB_PAT=ghp_xxxxxxxxxxxxxxxxxxxxxx
CLERK_TEST_USER_ID=user_xxxxxxxxxxxxxxxxxxxxxx
Note: The CLERK_TEST_USER_ID
should match the user ID that was used to sign up and is stored in your PostgreSQL database. You can find this ID in your database's users table or from your Clerk dashboard.
Make sure both web app and server are running, then execute:
npm run test
The backend server and deployments server can be deployed using AWS's EC2 service. See our video guide on how to do this.
Thanks for your interest in contributing! Review this section before submitting your first pull request. If you need any help, feel free contact us on Discord.
This repository uses Prettier for code formatting, which you will be prompted to install when you open the project. The formatting rules are specified in .prettierrc.
When commiting, please use the Conventional Commits format. Your commit should be in the form category: message
using the following categories:
Type | Description |
---|---|
feat |
All changes that introduce completely new code or new features |
fix |
Changes that fix a bug (ideally with a reference to an issue if present) |
refactor |
Any code-related change that is not a fix nor a feature |
docs |
Changing existing or creating new documentation (e.g., README, usage docs, CLI usage guides) |
chore |
All changes to the repository that do not fit into any of the above categories |