A lightweight, self-hosted web UI for GitHub Actions — inspired by Jenkins. Monitor workflow runs, view stage pipelines, trigger builds, and browse logs, all from a dark-themed dashboard with sidebar navigation and breadcrumbs.
Project table grouped by repository with status circles, last success/failure times, and one-click build triggers.
Build history sidebar with status indicators, full runs table with branch, commit, duration, and actor details.
Jenkins-style stage grid showing job status with colored cells. Run metadata (branch, commit, actor, duration) displayed above.
Inline log viewer below the stage grid — click any stage cell to load job logs.
Trigger workflow dispatches with dynamic input forms, branch/tag selection, and sidebar navigation.
- Jenkins-style layout — Sidebar navigation, breadcrumb bar, stage view grid
- Repository groups — Organize workflows by project groups in the sidebar
- Dashboard — Status circles, last success/failure, duration, play button per workflow
- Stage View — Visual job grid with colored status cells (click to view logs)
- Build with Parameters — Trigger workflow_dispatch with dynamic input forms and branch/tag selection
- Build history — Sidebar list with status indicators and run numbers
- Auto-refresh — Configurable HTMX-powered polling with loading indicator
- Cancel / Rerun — Cancel running workflows or rerun completed ones
- Open in GitHub — Quick links to GitHub Actions UI
- Dark theme — Full dark color scheme
-
Get a GitHub token (see GitHub Token Setup)
-
Create config file at
~/.config/actix/config.json:
{
"github_token": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"refresh_interval": 30,
"auto_refresh": true,
"port": 9808,
"groups": [
{
"name": "Work Projects",
"repositories": ["org/repo-one", "org/repo-two"]
}
]
}- Build and run:
make build
./bin/actix- Open http://localhost:9808 in your browser.
Or use a custom config file or override the port:
./bin/actix --config /path/to/config.json
./bin/actix -c /path/to/config.json # shorthand
./bin/actix --port 3000 # override port
./bin/actix -p 3000 # shorthandOr set GITHUB_TOKEN environment variable (takes priority over config file):
export GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
./bin/actix# Clone the repository
git clone https://github.com/bigbag/actix.git
cd actix
# Build (requires templ CLI: go install github.com/a-h/templ/cmd/templ@latest)
make build
# Or install to GOPATH/bin
make installactix requires a GitHub Personal Access Token to access the GitHub API.
- Go to GitHub Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Click Generate new token
- Set a descriptive name (e.g., "actix")
- Set expiration as needed
- Under Repository access, select the repositories you want to monitor
- Under Permissions > Repository permissions, grant:
- Actions: Read and write (to view runs and trigger workflows)
- Contents: Read-only (to read workflow files for inputs)
- Metadata: Read-only (required)
- Click Generate token
- Copy the token (starts with
github_pat_)
- Go to GitHub Settings > Developer settings > Personal access tokens > Tokens (classic)
- Click Generate new token (classic)
- Set a descriptive name
- Select scopes:
repo- Full control of private repositories (orpublic_repofor public only)workflow- Update GitHub Action workflows
- Click Generate token
- Copy the token (starts with
ghp_)
You can provide the token in two ways:
-
Environment variable (recommended for security):
export GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-
Config file at
~/.config/actix/config.json:{ "github_token": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
The environment variable takes priority if both are set.
--config,-c- Path to config file (default:~/.config/actix/config.json)--port,-p- Web server port (overrides config file value)
Default location: ~/.config/actix/config.json
{
"github_token": "ghp_xxx...",
"refresh_interval": 30,
"auto_refresh": true,
"port": 9808,
"groups": [
{
"name": "Work Projects",
"repositories": ["org/repo-one", "org/repo-two"]
},
{
"name": "Personal",
"repositories": ["username/my-project"]
}
]
}github_token(string, required) - GitHub Personal Access Tokenrefresh_interval(int, default: 30) - Auto-refresh interval in secondsauto_refresh(bool, default: true) - Enable auto-refreshport(int, default: 9808) - HTTP server portgroups(array, required) - Repository groupsname(string, required) - Group name (shown in sidebar)repositories(array, required) - List ofowner/repostrings
make build # Build binary to bin/actix (generates templ + compiles)
make run # Build and run
make run/quick # Run without rebuild
make test # Run tests
make vet # Run go vet
make tidy # Tidy Go modules
make templ # Generate templ templates
make clean # Remove build artifacts
make install # Install to GOPATH/bin
make build-all # Build for linux/darwin amd64/arm64The project includes unit tests for major components.
# Run all tests
make test
# Run tests with verbose output
go test -v ./...
# Run tests with coverage
go test -cover ./...
# Run specific package tests
go test -v ./internal/github/...
go test -v ./internal/config/...Tests cover the following areas:
- internal/github - Repository parsing, duration formatting, URL building, tag fetching
- internal/config - Configuration loading, validation, environment variable overrides
Tests run automatically in CI before builds on pull requests and releases.
If you see 404 Not Found (check token permissions):
-
Fine-grained token: You must explicitly grant access to each repository:
- Go to https://github.com/settings/tokens?type=beta
- Edit your token
- Under Repository access, select the specific repositories
- Under Permissions > Repository permissions, ensure Actions has "Read" access
-
Classic token: Ensure you have the
reposcope selected -
Private organization repos: Your token must have access to the organization. Contact your org admin if needed.
Your token is invalid or expired:
- Generate a new token at https://github.com/settings/tokens
- Update your config or environment variable
Either rate limited or access denied:
- Wait a few minutes if rate limited
- Check that your token has correct permissions
- For organization repos, ensure SSO is authorized if required
actix writes detailed logs to ~/.config/actix/actix.log:
# Follow logs in real-time
tail -f ~/.config/actix/actix.log
# View recent logs
cat ~/.config/actix/actix.logRepositories in config can be specified as:
owner/repo(recommended)owner/repo/(trailing slash OK)https://github.com/owner/repo(full URL OK)
MIT License - see LICENSE file.




