A secure AI chat application crafted for deep thinkers
中文 | English
Pointer is a cross-platform desktop AI chat client built with Electron, React 19, and TypeScript. It connects to various AI model APIs (OpenAI, Claude, DeepSeek, etc.) and provides advanced conversation management with a focus on knowledge organization and deep thinking workflows.
- Configure multiple AI providers (OpenAI GPT, Anthropic Claude, DeepSeek, etc.)
- Switch between models seamlessly during conversations
- Streaming responses with real-time reasoning process display
- Tree-structured message history with version control
- Create and switch between conversation branches
- Maintain context inheritance across branches
- Navigate conversation history with ease
- Folder-based hierarchical organization
- Message bookmarking and tagging
- Parallel tab workflow for multiple conversations
- Global search with keyword highlighting
- Import data from ChatGPT and DeepSeek exports
- Export conversations for backup
- Local data storage with privacy focus
- Batch operations and drag-and-drop sorting
- Global AI generation task management
- Real-time task status and cancellation
- Cross-page Q&A traceability
Download the latest release for your platform from the Releases page:
- Windows:
.exeinstaller - macOS:
.dmginstaller - Linux:
.AppImageor.debpackage
Requirements:
- Node.js 18+
- pnpm
# Clone the repository
git clone https://github.com/experdot/pointer.git
cd pointer
# Install dependencies
pnpm install
# Run in development mode
pnpm dev
# Build for your platform
pnpm build:win # Windows
pnpm build:mac # macOS
pnpm build:linux # Linux- Launch the application
- Open Settings
- Add a new AI model configuration:
- Name: Display name for the configuration
- API Endpoint: The API URL (e.g.,
https://api.openai.com/v1) - API Key: Your access token
- Model: Model identifier (e.g.,
gpt-4o,claude-3-5-sonnet)
- Set as default and test the connection
| Category | Technologies |
|---|---|
| Frontend | React 19, TypeScript, Ant Design, Tailwind CSS |
| Desktop | Electron 35, electron-vite |
| State | Zustand, Immer |
| Build | Vite, Electron Builder |
| Editor | Monaco Editor |
| Rendering | Shiki (syntax highlighting), Streamdown (streaming markdown) |
src/
├── main/ # Electron main process
│ ├── aiHandler.ts # AI API request handling
│ ├── ipcHandlers.ts # IPC communication
│ └── autoUpdater.ts # Auto-update logic
├── preload/ # Preload scripts (context bridge)
└── renderer/ # React application
└── src/
├── components/ # UI components
├── services/ # Business logic
├── stores/ # Zustand state management
├── hooks/ # Custom React hooks
├── features/ # Feature modules
└── utils/ # Utility functions
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Follow the coding standards (TypeScript, ESLint, Prettier)
- Commit using conventional commits format
- Open a Pull Request