A standalone Electron application for uploading mods to the Steam Workshop for "Ascend from Nine Mountains".
- Workshop Management: View, upload, update, and delete your Steam Workshop items
- Automatic Image Compression: Preview images over 1MB are automatically compressed to fit Steam's limit
- Preview Image Support: Select and preview images before uploading
- Visibility Settings: Public, Friends Only, Private, Unlisted
- Tag Support: Add tags for better discoverability
- Statistics: View subscription, favorite, and view counts for your mods
- Steam Integration: Seamless connection with Steam client
- Auto-extraction: Automatically extracts mod metadata from ZIP files
- Bun (v1.0 or higher) - or Node.js v18+
- Steam client must be running
- You must own "Ascend from Nine Mountains" on Steam
- Navigate to the ModUploader directory:
cd ModUploader-AFNM- Install dependencies:
bun installTo run the application in development mode with hot reload:
bun run devbun run build:portablebun run build:winbun run build:linuxThe built application will be in the release folder.
- Launch the application - Make sure Steam is running first
- View Workshop Items - The app shows your published workshop items with statistics
- Upload a New Mod:
- Click "+ Upload New Mod"
- Select the mod's ZIP file (metadata will be auto-extracted)
- Fill in or edit the title and description
- Optionally add a preview image
- Add tags (comma-separated)
- Choose visibility settings
- Click "Upload to Workshop"
- Update Existing Mods:
- Click on any existing workshop item
- Modify the details or upload a new ZIP
- Add change notes when updating with new content
- Click "Update Workshop Item"
- Delete Mods: Click the delete button on any workshop item (with confirmation)
- Refresh: Click the refresh button to reload your workshop items
For a mod to be recognized, its ZIP file should contain a mod.js file with metadata:
getMetadata: function() {
return {
name: 'mod-name',
title: 'Mod Title',
version: '1.0.0',
description: 'Mod description',
author: { name: 'Your Name' }
};
}ModUploader-AFNM/
├── electron/
│ ├── main/
│ │ ├── index.ts # Main entry point
│ │ ├── config.ts # Configuration constants
│ │ ├── steam.ts # Steam SDK integration
│ │ ├── steam-types.ts # Steam TypeScript types
│ │ ├── ipc-handlers.ts # IPC communication handlers
│ │ ├── mod-parser.ts # ZIP/mod.js parsing
│ │ └── image-utils.ts # Image compression utilities
│ └── preload/
│ └── index.ts # Preload script
├── src/
│ ├── components/
│ │ ├── ConfirmDialog.tsx
│ │ ├── DebugConsole.tsx
│ │ ├── GameTitle.tsx
│ │ ├── ImagePreview.tsx
│ │ ├── ModEditor.tsx
│ │ ├── ModList.tsx
│ │ ├── StatusMessage.tsx
│ │ └── SteamStatus.tsx
│ ├── hooks/
│ │ └── useDebugLog.ts
│ ├── types/
│ │ └── navigation.ts
│ ├── App.tsx
│ ├── renderer.tsx
│ └── types.ts
├── styles.css
└── index.html
- Built with Electron 40, React 19, TypeScript 5.9, and Vite 7
- Uses
@pipelab/steamworks.jsfor Steam Workshop integration (actively maintained community fork) - Styled to match the game's visual theme
- Supports Windows and Linux platforms
- Uses Bun as the package manager and runtime
- Steam not detected: Make sure Steam is running before launching the app. The app will show connection status in the header.
- Upload fails: Check that your ZIP file is valid and contains a proper mod.js file
- "Limit exceeded" error: This usually means the preview image is too large. The app now automatically compresses images over 1MB, but if you still see this error, try using a smaller image.
- Permission errors: Run the app with appropriate permissions for file system access
- Steam connection issues: Use the "Retry" button in the Steam status indicator